用于bdc程序中的所有条目时发生运行时错误

2020-08-24 05:07发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)专家们, 我开发了如下所示的b...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们,

我开发了如下所示的bdc程序,用于将excel文件上传到sap系统中,还从数据库中检索数据并下载错误记录。

但是当我运行以下代码时,程序进入转储。 除了使用所有的条目之外,我还使用内部联接,但是查询不是进程。 你能帮我找到这个吗

报告zbdc_call无标准页标题行大小255。

 桌子:lfbk,bnka。

 TYPE-POOLS特克斯。

 数据标志TYPE c。

 数据cnt(2)类型n。

 数据t_cnt(6)类型n。

 数据l_cnt(5)类型n。

 数据rng(6)类型n。

 数据字段(20)。

 *声明上传excel文件

 数据it_raw TYPE truxs_t_text_data。

 数据:w_textout类似于t100文本。

 数据:ty_lfbk的开头,

  像lfbk-lifnr一样,

 像lfbk-banks这样的银行,

 像lfbk-bankl一样的bankl,

 像lfbk-bankn一样的bankn,

 像lfbk-koinh一样

 像lfbk-bkref一样的bkref,

   ty_lfbk的结尾。

 数据:ty_bnka的开头,

      班纳(bnka-banka)

     像bnka-brnch一样

     像bnka-bankl一样的bankl,

   ty_bnka结束。

 *内部表

 数据:开始于ty_final发生0,

   像lfbk-lifnr一样,

 像lfbk-banks这样的银行,

 像lfbk-bankl一样的bankl,

 像lfbk-bankn一样的bankn,

 像lfbk-koinh一样

 班纳(bnka-banka)

 像bnka-brnch一样

 像lfbk-bkref一样的bkref,

 ty_final结束。

 *内部表处理错误

 数据:开始为ty_error,

   像lfbk-lifnr一样,

 像lfbk-banks这样的银行,

 像lfbk-bankl一样的bankl,

 像lfbk-bankn一样的bankn,

 像lfbk-koinh一样

 班纳(bnka-banka)

 像bnka-brnch一样

 像lfbk-bkref一样的bkref,

 err_msg(73)类型c,

 ty_error结束。

 数据:it_lfbk与带有标题行的ty_lfbk表类似,

       it_bnka像ty_bnka的标题行表一样,

       带有标题行的ty_final的it_final表。

 类似于bdcdata的DATA bdcdata出现在标题行中的0。

 数据:it_error与HEAD_LINE的t​​y_error表类似。

 *用于存储来自CALL TRANSACTION功能模块的错误信息

 数据:开始时为messtab发生0。

 包含结构bdcmsgcoll。

 数据:消息末尾。

 具有标题标题的Block1的选择屏幕开始。

 参数:rad1 RADIOBUTTON GROUP rad USER-COMMAND frad1 DEFAULT'X',

           rad2 RADIOBUTTON GROUP rad。

 选择屏幕结束块1。

 带有标题标题文本t02的block2的选择屏幕开始。
 参数:p_file类型rlgrap文件名MODIF ID g3。

 选择屏幕结束块3。
 TYPE-POOLS slis。

 选择屏幕输出时。

   如果rad1 ='X'。

     环视屏幕。

       IF screen-group1 ='G2'。或OR screen-group1 ='G4'。

         screen-active =" 1"。

 *屏幕输入= 0。

       ELSEIF screen-group1 ='G3'。

         screen-active =" 0"。

       万一。

       修改屏幕。

     结局。

 *    万一。
 ELSEIF rad2 ='X'。

     环视屏幕。

       如果screen-group1 ='G2'。

         screen-active =" 0"。

       ELSEIF screen-group1 ='G3'。

         screen-active =" 1"。

       万一。

       修改屏幕。

     结局。

   万一。


 *选择lfbk〜lifnr

 * lfbk〜银行

 * lfbk〜bankl

 * lfbk〜bankn

 * lfbk〜koinh

 * bnka〜班卡

 * bnka〜分支

 * lfbk〜bkref

 *插入表it_final

 *来自lfbk AS lfbk INNER JOIN bnka AS bnka

 *在bnka〜bankl EQ lfbk〜bankl

 *在s_lifnr中的lfbk〜lifnr中。

 从lfbk选择lifnr银行bankl bankn koinh bkref

     到表it_lfbk中,其中lifnr在s_lifnr中。

  如果it_lfbk不是初始的。

    从bnka中选择banka brnch bankl

      到表it_bnka中it_lfbk中的所有条目

      其中bankl = it_lfbk-bankl。

   万一。
  在it_lfbk循环。

     it_final-lifnr = it_lfbk-lifnr。

     it_final-banks = it_lfbk-banks。

     it_final-bankl = it_lfbk-bankl。

     it_final-bankn = it_lfbk-bankn。

     it_final-koinh = it_lfbk-koinh。

     it_final-bkref = it_lfbk-bkref。

  在it_bnka循环。

    it_final-banka = it_bnka-banka。

    it_final-branch = it_bnka-branch。
 附加it_final。

    清除:it_final,

             it_lfbk,

             it_bnka。

     it_final-banks = it_lfbk-banks。

 结局。

 结束循环。

 *万一。

 * -------------------------------------------------  -------------------- *

 *初始化*

 * -------------------------------------------------  -------------------- *

 初始化。

 将"文件名"移动到标题。

 * -------------------------------------------------  -------------------- *

 *在选择屏幕上*

 * -------------------------------------------------  -------------------- *
 在p_file的VALUE-REQUEST的SELECTION屏幕上。

 通话功能'F4_FILENAME'

 出口

 field_name ='P_FILE'

 输入

 file_name = p_file。

 ******************************************************  *********************

 * S T A R T O F S E L E C T I O N *

 ******************************************************  *********************
 选择开始。
 通话功能" TEXT_CONVERT_XLS_TO_SAP"

 出口

 * I_FIELD_SEPERATOR ='X'

 * I_LINE_HEADER ='X'

 i_tab_raw_data = it_raw

 i_filename = p_file

 桌子

 i_tab_converted_data = it_final。

 *例外情况

 * CONVERSION_FAILED = 1

 *其他= 2。

 循环到it_final。

 使用'SAPMF02K''0101'执行bdc_dynpro。

 使用'BDC_CURSOR'执行bdc_field

                               " RF02K-LIFNR"。

 使用'BDC_OKCODE'执行bdc_field

                               '/00'。

 使用'RF02K-LIFNR'执行bdc_field

                               it_final-lifnr。

 使用'RF02K-D0130'执行bdc_field

                               'X'。

 使用'SAPMF02K''0130'执行bdc_dynpro。

 使用'BDC_CURSOR'执行bdc_field

                               'LFBK-BKREF(01)'。

 使用'BDC_OKCODE'执行bdc_field

                               '= BANK'。

 使用'LFBK-BANKS(01)'执行bdc_field

                               it_final-banks。

 使用'LFBK-BANKL(01)'执行bdc_field

                               it_final-bankl。

 使用'LFBK-BANKN(01)'执行bdc_field

                               it_final-bankn。

 使用'LFBK-KOINH(01)'执行bdc_field

                               it_final-koinh。

 使用'LFBK-BKREF(01)'执行bdc_field

                               it_final-bkref。

 使用'SAPLBANK''0100'执行bdc_dynpro。

 使用'BDC_CURSOR'执行bdc_field

                               " BNKA-BANKA"。

 使用'BDC_OKCODE'执行bdc_field

                               '= ENTR'。

 使用'BNKA-BANKA'执行bdc_field

                               it_final-banka。

 使用'BNKA-BRNCH'执行bdc_field

                               it_final-branch。

 使用'SAPMF02K''0130'执行bdc_dynpro。

 使用'BDC_CURSOR'执行bdc_field

                               'LFBK-BKREF(01)'。

 使用'BDC_OKCODE'执行bdc_field

                               '= UPDA'。

 *致电交易以更新客户分期付款文字

 使用bdcdata模式'N'更新'S'进行交易'XK02'

 将消息发送到messtab。

 *检查更新是否成功

 IF sy-subrc NE 0。

 *检索在BDC更新期间显示的错误消息

 在msgtyp ='E'的地方在messtab中循环。

 *根据呼叫交易返回的信息构建实际消息

 通话功能" MESSAGE_TEXT_BUILD"

 出口

 msgid = messtab-msgid

 msgnr = messtab-msgnr

 msgv1 = messtab-msgv1

 msgv2 = messtab-msgv2

 msgv3 = messtab-msgv3

 msgv4 = messtab-msgv4

 输入

 message_text_output = w_textout。

 结局。

 *构建错误表准备输出

 it_error-lifnr = it_final-lifnr。

 it_error-banks = it_final-banks。

 it_error-bankl = it_final-bankl。

 it_error-bankn = it_final-bankn。

 it_error-koinh = it_final-koinh。

 it_error-banka = it_final-banka。

 it_error-brnch = it_final-branch。

 it_error-bkref = it_final-bkref。

 it_error-err_msg = w_textout。

 APPEND it_error。

 清除it_error。

 万一。

 *清除BDC数据表

 清除:bdcdata。

 刷新:bdcdata。

 结局。

 数据:IT_FCAT类型SLIS_T_FIELDCAT_ALV,

      WA_FCAT类型SLIS_FIELDCAT_ALV,

      WA_LAYOUT类型SLIS_LAYOUT_ALV。

   REFRESH:IT_FCAT []。

   使用以下内容执行FCAT:" LIFNR","供应商",

                       'BANKS''COUNTRY KEY',

                       'BANKL''ACC NUM',

                       'BANKN''ACC密钥',

                       'KOINH''帐户持有人',

                       'BANKA''BANK NAME',

                       'BRNCH''BRANCH',

                       'bkref''IFSC代码'。

 * ENDFORM。  " BUILD_FCAT

 * FORM DISPLAY_OUTPUT。

   WA_LAYOUT-ZEBRA ='X'。

   WA_LAYOUT-COLWIDTH_OPTIMIZE ='X'。

   通话功能'REUSE_ALV_GRID_DISPLAY'

    出口

 * I_INTERFACE_CHECK =''

 * I_BYPASSING_BUFFER =''

 * I_BUFFER_ACTIVE =''

       I_CALLBACK_PROGRAM = SY-REPID

       I_CALLBACK_PF_STATUS_SET ='PF_STATUS'

       I_CALLBACK_USER_COMMAND ='USER_COMMAND'

 * I_CALLBACK_TOP_OF_PAGE =''

 * I_CALLBACK_HTML_TOP_OF_PAGE =''

 * I_CALLBACK_HTML_END_OF_LIST =''

 * I_STRUCTURE_NAME =

 * I_BACKGROUND_ID =''

 * I_GRID_TITLE =

 * I_GRID_SETTINGS =

      IS_LAYOUT = WA_LAYOUT

      IT_FIELDCAT = IT_FCAT

 * IT_EXCLUDING =

 * IT_SPECIAL_GROUPS =

 * IT_SORT = IT_SORT

 * IT_FILTER =

 * IS_SEL_HIDE =

 * I_DEFAULT ='X'

 * I_SAVE =''

 * IS_VARIANT =

 * IT_EVENTS =

 * IT_EVENT_EXIT =

 * IS_PRINT =

 * IS_REPREP_ID =

 * I_SCREEN_START_COLUMN = 0

 * I_SCREEN_START_LINE = 0

 * I_SCREEN_END_COLUMN = 0

 * I_SCREEN_END_LINE = 0

 * I_HTML_HEIGHT_TOP = 0

 * I_HTML_HEIGHT_END = 0

 * IT_ALV_GRAPHICS =

 * IT_HYPERLINK =

 * IT_ADD_FIELDCAT =

 * IT_EXCEPT_QINFO =

 * IR_SALV_FULLSCREEN_ADAPTER =

 *重要

 * E_EXIT_CAUSED_BY_CALLER =

 * ES_EXIT_CAUSED_BY_USER =

    桌子

      T_OUTTAB = IT_Error

 *例外情况

 * PROGRAM_ERROR = 1

 *其他= 2

    。
 * ENDFORM。

 使用字段文本填写表格。

  WA_FCAT-FIELDNAME = FIELD。

   WA_FCAT-SELTEXT_M =文本。

  将WA_FCAT附加到IT_FCAT。

   清除WA_FCAT。

   最终形式。

   表格下载。

 *设置PF-STATUS'stat'。

 *在USER-COMMAND。

    如果sy-ucomm ='download'。

 通话功能'GUI_DOWNLOAD'

 出口

 ** BIN_FILESIZE =

 ** FILENAME = F_EFILE

 FILETYPE ='asc'

 *** APPEND =''

 WRITE_FIELD_SEPARATOR ='X'

 ** HEADER ='00'

 ** TRUNC_TRAILING_BLANKS =''

 ** WRITE_LF ='X'

 ** COL_SELECT =''

 ** COL_SELECT_MASK =''

 ** DAT_MODE =''

 ** CONFIRM_OVERWRITE =''

 ** NO_AUTH_CHECK =''

 ** CODEPAGE =''

 ** IGNORE_CERR = ABAP_TRUE

 **替换='#'

 ** WRITE_BOM =''

 ** TRUNC_TRAILING_BLANKS_EOL ='X'

 ** WK1_N_FORMAT =''

 ** WK1_N_SIZE =''

 ** WK1_T_FORMAT =''

 ** WK1_T_SIZE =''

 ** WRITE_LF_AFTER_LAST_LINE = ABAP_TRUE

 ** SHOW_TRANSFER_STATUS = ABAP_TRUE

 **进口

 **文件长度=

 桌子

 DATA_TAB = IT_Error

 例外情况

 FILE_WRITE_ERROR = 1

 NO_BATCH = 2

 GUI_REFUSE_FILETRANSFER = 3

 INVALID_TYPE = 4

 NO_AUTHORITY = 5

 UNKNOWN_ERROR = 6

 HEADER_NOT_ALLOWED = 7

 SEPARATOR_NOT_ALLOWED = 8

 FILESIZE_NOT_ALLOWED = 9

 HEADER_TOO_LONG = 10

 DP_ERROR_CREATE = 11

 DP_ERROR_SEND = 12

 DP_ERROR_WRITE = 13

 UNKNOWN_DP_ERROR = 14

 ACCESS_DENIED = 15

 DP_OUT_OF_MEMORY = 16

 DISK_FULL = 17

 DP_TIMEOUT = 18

 FILE_NOT_FOUND = 19

 DATAPROVIDER_EXCEPTION = 20

 CONTROL_FLUSH_ERROR = 21

 其他= 22

 。
 如果SY-SUBRC <> 0。

 *在这里实施适当的错误处理

 万一。

 万一。

 ENDFORM。  " DOWNLOAD_ERRFIL

 * -------------------------------------------------  ------------------- *

 *开始新屏幕*

 * -------------------------------------------------  --------------------- *

 FORM bdc_dynpro使用程序dynpro。

 清除bdcdata。

 bdcdata-program =程序。

 bdcdata-dynpro = dynpro。

 bdcdata-dynbegin ='X'。

 附加bdcdata。

 ENDFORM。  " bdc_dynpro

 * -------------------------------------------------  --------------------- *

 *插入栏位*

 * -------------------------------------------------  --------------------- *

 FORM bdc_field使用fnam fval。

 *如果fval <> nodata。

 清除bdcdata。

 bdcdata-fnam = fnam。

 bdcdata-fval = fval。

 附加bdcdata。

 * 万一。

 ENDFORM。  " bdc_field