在以fb01 T代码上传数据时,BDC报告出错(用于发布密钥35,40)

2020-08-22 13:51发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)嗨, 我开发了一个bdc报告,...

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

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


嗨,

我开发了一个bdc报告,用于以fb01 t代码将详细信息从excel文件上传到SAP系统(用于发布密钥35,40)。但是开发了bdc报告后,出现诸如"对帐帐户12011000或短键"的错误 00出现错误时,我在记录中更改了总帐科目编号,这时我得到的提示是"金额为零-订单项将被忽略"。下面是我开发的代码,请检查代码并告知 我该代码中的更正。 如果可以的话,请发布该录音。

报告ZLTT_DATA1。
 type-POOL:通配符。
 表:bseg。
 数据:ty_final的开头,
           bldat(16)类型c,"类型bkpf-bldat,
           blart型bkpf-blart,
           bukrs类型bkpf-bukrs,
           budat(20)c型," bkpf-budat类型,
           waers类型bkpf-waers,
           xblnr类型bkpf-xblnr,
           bktxt类型bkpf-bktxt,
           bschl(20)",键入bkf-bldat,
           hkont(20)," bkf-bldat类型,
           wrbtr类型bseg-wrbtr,
           bupla型bseg-bupla,
           zuonr类型bseg-zuonr,
           sgtxt类型bseg-sgtxt,
           prctr类型cobl-prctr,
           kostl类型cobl-prctr,
           值类型bseg-valut,
  ty_final结束。
  数据:ty_error的开头,
           bldat(16)类型c,",类型bkpf-bldat,
           blart型bkpf-blart,
           bukrs类型bkpf-bukrs,
           budat(20)c型," bkpf-budat类型,
           waers类型bkpf-waers,
           xblnr类型bkpf-xblnr,
           bktxt类型bkpf-bktxt,
           bschl(20)",键入bkf-bldat,
           hkont(20)," bkf-bldat类型,
           wrbtr类型bseg-wrbtr,
           bupla型bseg-bupla,
           zuonr类型bseg-zuonr,
           sgtxt类型bseg-sgtxt,
           prctr类型cobl-prctr,
           kostl类型cobl-prctr,
           值类型bseg-valut,
           err_msg(73)类型c,
           STRING(1000),
       ty_error结束。

 *声明上传excel文件
 数据it_raw TYPE truxs_t_text_data。
 数据:w_textout类似于t100文本。

 DATA:WA_FINAL,如TY_FINAL,
       it_final类似于带有标题行的ty_final表。
 类似于bdcdata的DATA bdcdata出现在标题行中的0。
 数据:it_error类似于带有标题行的ty_error表。

 数据:IT_FCAT类型SLIS_T_FIELDCAT_ALV,
      WA_FCAT类型SLIS_FIELDCAT_ALV,
      WA_LAYOUT类型SLIS_LAYOUT_ALV。
 数据:it_event类型为slis_t_event,
       wa_event类似于it_event的行。
 wa_event-name ='user_command'。
 wa_event-form ='uc'。
 将wa_event附加到it_event。
 数据:开始时为messtab发生0。
 包含结构bdcmsgcoll。
 数据:消息末尾。

  数据:budat(20)类型c,
          blart(16)类型c,
         w_amount(16)类型c。
 将it_final-wrbtr写入w_amount。
     CONDENSE w_amount。
   将sy-datum写到blart。
   将sy-datum写到budat。

 带有FRAME TITLE标题的block2的选择屏幕开始。
 参数:p_file TYPE rlgrap-filename。
 选择屏幕结束块2。

 初始化。
 将"文件名"移动到标题。

 在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循环。
 使用'SAPMF05A''0100'执行bdc_dynpro。
 使用'BDC_CURSOR'执行bdc_field
                               " RF05A-NEWKO"。
 使用'BDC_OKCODE'执行bdc_field
                               '/00'。
 使用'BKPF-BLDAT'执行bdc_field
                              it_final-bldat。
 使用'BKPF-BLART'执行bdc_field
                               it_final-blart。
 使用'BKPF-BUKRS'执行bdc_field
                               it_final-bukrs。
 使用'BKPF-BUDAT'执行bdc_field
                               it_final-budat。
 使用'BKPF-WAERS'执行bdc_field
                               it_final-waers。
 使用'BKPF-XBLNR'执行bdc_field
                               it_final-xblnr。
 使用'BKPF-BKTXT'执行bdc_field
                               it_final-bktxt。
 使用'RF05A-NEWBS'执行bdc_field
                               it_final-bschl。
 使用'RF05A-NEWKO'执行bdc_field
                               it_final-hkont。
 使用'SAPMF05A''0302'执行bdc_dynpro。
 使用'BDC_CURSOR'执行bdc_field
                               " BSEG-SGTXT"。
 使用'BDC_OKCODE'执行bdc_field
                               '= AB'。
 *使用'BSEG-HKONT'执行bdc_field
 * it_final-hkont。
 使用'BSEG-WRBTR'执行bdc_field
                               w_amount。
 使用'BSEG-BUPLA'执行bdc_field
                               it_final-bupla。
 使用'BSEG-ZUONR'执行bdc_field
                               it_final-zuonr。
 使用'BSEG-SGTXT'执行bdc_field
                               it_final-sgtxt。
 使用'SAPMF05A''0700'执行bdc_dynpro。
 使用'BDC_CURSOR'执行bdc_field
                               " RF05A-NEWKO"。
 使用'BDC_OKCODE'执行bdc_field
                               '/00'。
 使用'BKPF-XBLNR'执行bdc_field
                               it_final-xblnr。
 使用'BKPF-BKTXT'执行bdc_field
                               it_final-bktxt。
 使用'RF05A-NEWBS'执行bdc_field
                               it_final-bschl。
 使用'RF05A-NEWKO'执行bdc_field
                               it_final-hkont。
 使用'SAPMF05A''0300'执行bdc_dynpro。
 使用'BDC_CURSOR'执行bdc_field
                               " BSEG-SGTXT"。
 使用'BDC_OKCODE'执行bdc_field
                               '= AB'。
 使用'BSEG-WRBTR'执行bdc_field
                               w_amount。
 使用'BSEG-BUPLA'执行bdc_field
                               it_final-bupla。
 使用'BSEG-ZUONR'执行bdc_field
                               it_final-zuonr。
 使用'BSEG-SGTXT'执行bdc_field
                               it_final-sgtxt。
 使用'DKACB-FMORE'执行bdc_field
                               'X'。
 使用'SAPLKACB''0002'执行bdc_dynpro。
 使用'BDC_CURSOR'执行bdc_field
                               " COBL-PRCTR"。
 使用'BDC_OKCODE'执行bdc_field
                               '= ENTE'。
 使用'COBL-KOSTL'执行bdc_field
                               it_final-kostl。
 使用'COBL-PRCTR'执行bdc_field
                               it_final-prctr。
 使用'SAPMF05A''0700'执行bdc_dynpro。
 使用'BDC_CURSOR'执行bdc_field
                               " RF05A-NEWBS"。
 使用'BDC_OKCODE'执行bdc_field
                               '= BU'。
 使用'BKPF-XBLNR'执行bdc_field
                               it_final-xblnr。
 使用'BKPF-BKTXT'执行bdc_field
                               it_final-bktxt。
 *使用'FB01'执行bdc_transaction。

 *使用'FB01'执行bdc_transaction。
 使用bdcdata模式'A'更新'S'进行呼叫交易'FB01'
 将消息发送到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-bschl = it_final-bschl。
 it_error-bldat = it_final-bldat。
 it_error-budat = it_final-budat。
 it_error-waers = it_final-waers。
 it_error-xblnr = it_final-xblnr。
 it_error-bktxt = it_final-bktxt。
 it_error-blart = it_final-blart。
 it_error-bukrs = it_final-bukrs。
 it_error-hkont = it_final-hkont。
 * it_error-shkzg = it_final-shkzg。
 it_error-wrbtr = it_final-wrbtr。
 it_error-zuonr = it_final-zuonr。
 it_error-kostl = it_final-kostl。
 it_error-prctr = it_final-prctr。
 it_error-sgtxt = it_final-sgtxt。
 it_error-bupla = it_final-bupla。
 it_error-valut = it_final-valut。

 it_error-err_msg = w_textout。
 APPEND IT_ERROR。
 清除it_error。
 万一。
 清除:bdcdata。
 刷新:bdcdata。
 结局。
 *万一。
 * endloop。
  REFRESH:IT_FCAT []。
   执行FCAT使用:
                       'BLDAT''文档日期',
                       'BLART''文档类型',
                       'BUKRS''公司代码',
                       " BUDAT""发布日期",
                       " WAERS""货币",
                       'XBLNR''refrence',
                       'BKTXT''文档头',
                       " BSCHL""发布密钥",
                       " HKONT"" gl帐户",
                       'WRBTR''金额',
                       " BUPLA""营业地点",
                       " ZUONR""分配",
 *'wrbtr''金额',
                       'SGTXT''文本',
                       " KOSTL""成本中心",
                       " PRCTR""利润中心"。

 * ENDFORM。  " BUILD_FCAT
 * FORM DISPLAY_OUTPUT。
   WA_LAYOUT-ZEBRA ='X'。
   WA_LAYOUT-COLWIDTH_OPTIMIZE ='X'。
   通话功能'REUSE_ALV_GRID_DISPLAY'
    出口
     IS_LAYOUT = WA_LAYOUT
     IT_FIELDCAT = IT_FCAT
  桌子
      T_OUTTAB = IT_ERROR
    。
  使用类似sy-ucomm b类型的slis_selfield形成uv。
 通话功能'GUI_DOWNLOAD'
 出口
 档案名称= P_FILE
 FILETYPE ='asc'
 WRITE_FIELD_SEPARATOR ='X'


 桌子
 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。
 *在这里实施适当的错误处理
 万一。
 最终形式。
 使用字段文本填写表格。

    WA_FCAT-FIELDNAME = FIELD。
    WA_FCAT-SELTEXT_M =文本。

   将WA_FCAT附加到IT_FCAT。
   清除WA_FCAT。
 ENDFORM。

 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