F-02 会计凭证批量导入 - BAPI_ACC_DOCUMENT_POST

目录

一、程序原代码

二、非BAPI字段付值增强

三、数据模版


一、程序原代码

*&---------------------------------------------------------------------*
*& Report ZBAPI004
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZBAPI004.


SELECTION-SCREEN FUNCTION KEY 1.
TYPE-POOLS: ICON.
TYPE-POOLS SLIS.
TYPE-POOLS TRUXS.
TABLES SSCRFIELDS.

TYPES: BEGIN OF ST_UPLOAD,
******************************************
         ZID        TYPE CHAR100, "凭证序号
         XBLNR      TYPE CHAR100, "参照
         BLART      TYPE CHAR100, "凭证类型
         BUKRS      TYPE CHAR100, "公司代码
         BLDAT      TYPE CHAR100, "凭证日期
         BUDAT      TYPE CHAR100, "过帐日期
         WAERS      TYPE CHAR100, "货币码
         BKTXT      TYPE CHAR100, "凭证抬头文本
********************************************
         HKONT      TYPE CHAR100, "总帐科目
         ANLN1      TYPE CHAR100, "主资产编码
         ANLN2      TYPE CHAR100, "子资产编码
         KUNNR      TYPE CHAR100, "客户
         LIFNR      TYPE CHAR100, "供应商
         UMSKZ      TYPE CHAR100, "特别总帐标志
         NEWBW      TYPE CHAR100, "资产业务类型
         WRBTR      TYPE CHAR100, "金额
         MENGE      TYPE CHAR100, "数量
         KOSTL      TYPE CHAR100, "成本中心
         PRCTR      TYPE CHAR100, "利润中心
         PSPNR      TYPE CHAR100, "WMS
         AUFNR      TYPE CHAR100, "订单
         MWSKZ      TYPE CHAR100, "税码
         SGTXT      TYPE CHAR100, "行项目文本
         ZUONR      TYPE CHAR100, "分配字段
         RSTGR      TYPE CHAR100, "原因代码

         ICON       TYPE ICON-NAME,
         ZSEL       TYPE CHAR1,
         ZTYPE      TYPE BAPI_MTYPE,
         ZMESSAGE   TYPE BAPI_MSG,

         BLART_T    TYPE BKPF-BLART,
         LTEXT_B    TYPE T003T-LTEXT, "凭证类型描述
         BUKRS_T    TYPE BKPF-BUKRS,
         BUTXT      TYPE T001-BUTXT, "公司描述
         HKONT_T    TYPE BSEG-HKONT,
         TXT20      TYPE SKAT-TXT20, "总帐科目描述
         ANLN1_T    TYPE BSEG-ANLN1,
         ANLN2_T    TYPE BSEG-ANLN2,
         TXT50      TYPE ANLA-TXT50, "固定资产描述
         KUNNR_T    TYPE BSEG-KUNNR,
         NAME1_K    TYPE KNA1-NAME1, "客户描述
         LIFNR_T    TYPE BSEG-LIFNR,
         NAME1_L    TYPE LFA1-NAME1, "供应商描述
         UMSKZ_T    TYPE BSEG-UMSKZ,
         KTEXT      TYPE T074T-KTEXT, "特别总帐标识
         NEWBW_T    TYPE BSEG-ANBWA,
         BWATXT     TYPE TABWT-BWATXT, "资产交易类型描述
         KOSTL_T    TYPE BSEG-KOSTL,
         KTEXT_K    TYPE CSKT-KTEXT, "成本中心描述
         PRCTR_T    TYPE BSEG-PRCTR,
         KTEXT_P    TYPE CEPCT-KTEXT, "利润中心描述

         PSPNR_T    TYPE PRPS-PSPNR,
         POSID_EDIT TYPE PRPS-POSID_EDIT,
         POST1      TYPE PRPS-POST1, "WBS描述

         AUFNR_T    TYPE BSEG-AUFNR,
         KTEXT_A    TYPE AUFK-KTEXT, "订单描述
         MWSKZ_T    TYPE BSEG-MWSKZ,
         TEXT1      TYPE T007S-TEXT1, "税码描述
         RSTGR_T    TYPE BSEG-RSTGR,
         TXT20_R    TYPE T053S-TXT20, "原因代码描述

       END OF ST_UPLOAD.


DATA: WA_UPLOAD TYPE ST_UPLOAD,
      IT_UPLOAD LIKE TABLE OF WA_UPLOAD.

FIELD-SYMBOLS: <FS_UPLOAD> LIKE WA_UPLOAD.

DATA: G_ZTYPE    TYPE BAPI_MTYPE,
      G_ZMESSAGE TYPE BAPI_MSG.

DATA: G_DO    TYPE CHAR1,
      G_CHECK TYPE CHAR1.
DATA: IS_LAYOUT   TYPE SLIS_LAYOUT_ALV,          "ALV输出样式
      IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,    "ALV输出的头项目(内表)
      WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV,      "ALV输出的头项目(工作区)
      WA_REPID    LIKE SY-REPID. "程序名


SELECTION-SCREEN BEGIN OF BLOCK SCR1 WITH FRAME TITLE TEXT-001.
  PARAMETERS: P_FILE TYPE RLGRAP-FILENAME.
SELECTION-SCREEN END OF BLOCK SCR1.




INITIALIZATION.
  PERFORM FRM_INIT.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
  PERFORM FRM_FILE_F4.

AT SELECTION-SCREEN.
  CASE SY-UCOMM.
    WHEN 'FC01'.
      PERFORM FRM_DOWNLOAD_TEM_XLS.
  ENDCASE.



START-OF-SELECTION.
  PERFORM FRM_UPLOAD_FILE_XLS.
  PERFORM FRM_CHECK_DATA.

END-OF-SELECTION.
  PERFORM FRM_SHOW_DATA.




*&---------------------------------------------------------------------*
*&      Form  FRM_SHOW_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_SHOW_DATA .
  WA_REPID = SY-REPID.                     "得到程序名
  IS_LAYOUT-ZEBRA = 'X'.                   "颜色相间显示
  IS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.       "优化列宽选项
  IS_LAYOUT-BOX_FIELDNAME = 'ZSEL'.

  DATA: DE_POS TYPE I.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'ICON'.
  WA_FIELDCAT-ICON          = 'X'.
  WA_FIELDCAT-SELTEXT_L     = ''.
  WA_FIELDCAT-SELTEXT_M     = ''.
  WA_FIELDCAT-SELTEXT_S     = ''.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'ZID'.
  WA_FIELDCAT-REF_TABNAME   = ''.
  WA_FIELDCAT-REF_FIELDNAME = ''.
  WA_FIELDCAT-SELTEXT_L     = '凭证序号'.
  WA_FIELDCAT-SELTEXT_M     = '凭证序号'.
  WA_FIELDCAT-SELTEXT_S     = '凭证序号'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'XBLNR'.
  WA_FIELDCAT-REF_TABNAME   = ''.
  WA_FIELDCAT-REF_FIELDNAME = ''.
  WA_FIELDCAT-SELTEXT_L     = '参照'.
  WA_FIELDCAT-SELTEXT_M     = '参照'.
  WA_FIELDCAT-SELTEXT_S     = '参照'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'BLART'.
  WA_FIELDCAT-REF_TABNAME   = ''.
  WA_FIELDCAT-REF_FIELDNAME = ''.
  WA_FIELDCAT-SELTEXT_L     = '凭证类型'.
  WA_FIELDCAT-SELTEXT_M     = '凭证类型'.
  WA_FIELDCAT-SELTEXT_S     = '凭证类型'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'LTEXT_B'.
  WA_FIELDCAT-REF_TABNAME   = 'T003T'.
  WA_FIELDCAT-REF_FIELDNAME = 'LTEXT'.
  WA_FIELDCAT-SELTEXT_L     = '凭证类型描述'.
  WA_FIELDCAT-SELTEXT_M     = '凭证类型描述'.
  WA_FIELDCAT-SELTEXT_S     = '凭证类型描述'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'BUKRS'.
  WA_FIELDCAT-REF_TABNAME   = ''.
  WA_FIELDCAT-REF_FIELDNAME = ''.
  WA_FIELDCAT-SELTEXT_L     = '公司代码'.
  WA_FIELDCAT-SELTEXT_M     = '公司代码'.
  WA_FIELDCAT-SELTEXT_S     = '公司代码'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'BUTXT'.
  WA_FIELDCAT-REF_TABNAME   = 'T001'.
  WA_FIELDCAT-REF_FIELDNAME = 'BUTXT'.
  WA_FIELDCAT-SELTEXT_L     = '公司名称'.
  WA_FIELDCAT-SELTEXT_M     = '公司名称'.
  WA_FIELDCAT-SELTEXT_S     = '公司名称'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'BLDAT'.
  WA_FIELDCAT-REF_TABNAME   = ''.
  WA_FIELDCAT-REF_FIELDNAME = ''.
  WA_FIELDCAT-SELTEXT_L     = '凭证日期'.
  WA_FIELDCAT-SELTEXT_M     = '凭证日期'.
  WA_FIELDCAT-SELTEXT_S     = '凭证日期'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'BUDAT'.
  WA_FIELDCAT-REF_TABNAME   = ''.
  WA_FIELDCAT-REF_FIELDNAME = ''.
  WA_FIELDCAT-SELTEXT_L     = '过帐日期'.
  WA_FIELDCAT-SELTEXT_M     = '过帐日期'.
  WA_FIELDCAT-SELTEXT_S     = '过帐日期'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'WAERS'.
  WA_FIELDCAT-REF_TABNAME   = ''.
  WA_FIELDCAT-REF_FIELDNAME = ''.
  WA_FIELDCAT-SELTEXT_L     = '货币码'.
  WA_FIELDCAT-SELTEXT_M     = '货币码'.
  WA_FIELDCAT-SELTEXT_S     = '货币码'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'BKTXT'.
  WA_FIELDCAT-REF_TABNAME   = ''.
  WA_FIELDCAT-REF_FIELDNAME = ''.
  WA_FIELDCAT-SELTEXT_L     = '凭证抬头文本'.
  WA_FIELDCAT-SELTEXT_M     = '凭证抬头文本'.
  WA_FIELDCAT-SELTEXT_S     = '凭证抬头文本'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

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

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'HKONT'.
  WA_FIELDCAT-REF_TABNAME   = ''.
  WA_FIELDCAT-REF_FIELDNAME = ''.
  WA_FIELDCAT-SELTEXT_L     = '总帐科目'.
  WA_FIELDCAT-SELTEXT_M     = '总帐科目'.
  WA_FIELDCAT-SELTEXT_S     = '总帐科目'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'TXT20'.
  WA_FIELDCAT-REF_TABNAME   = 'SKAT'.
  WA_FIELDCAT-REF_FIELDNAME = 'TXT20'.
  WA_FIELDCAT-SELTEXT_L     = '总帐科目名称'.
  WA_FIELDCAT-SELTEXT_M     = '总帐科目名称'.
  WA_FIELDCAT-SELTEXT_S     = '总帐科目名称'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'ANLN1'.
  WA_FIELDCAT-REF_TABNAME   = ''.
  WA_FIELDCAT-REF_FIELDNAME = ''.
  WA_FIELDCAT-SELTEXT_L     = '主资产编码'.
  WA_FIELDCAT-SELTEXT_M     = '主资产编码'.
  WA_FIELDCAT-SELTEXT_S     = '主资产编码'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'ANLN2'.
  WA_FIELDCAT-REF_TABNAME   = ''.
  WA_FIELDCAT-REF_FIELDNAME = ''.
  WA_FIELDCAT-SELTEXT_L     = '子资产编码'.
  WA_FIELDCAT-SELTEXT_M     = '子资产编码'.
  WA_FIELDCAT-SELTEXT_S     = '子资产编码'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'TXT50'.
  WA_FIELDCAT-REF_TABNAME   = 'ANLA'.
  WA_FIELDCAT-REF_FIELDNAME = 'TXT50'.
  WA_FIELDCAT-SELTEXT_L     = '固定资产描述'.
  WA_FIELDCAT-SELTEXT_M     = '固定资产描述'.
  WA_FIELDCAT-SELTEXT_S     = '固定资产描述'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'KUNNR'.
  WA_FIELDCAT-REF_TABNAME   = ''.
  WA_FIELDCAT-REF_FIELDNAME = ''.
  WA_FIELDCAT-SELTEXT_L     = '客户'.
  WA_FIELDCAT-SELTEXT_M     = '客户'.
  WA_FIELDCAT-SELTEXT_S     = '客户'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'NAME1_K'.
  WA_FIELDCAT-REF_TABNAME   = 'KNA1'.
  WA_FIELDCAT-REF_FIELDNAME = 'NAME1'.
  WA_FIELDCAT-SELTEXT_L     = '客户名称'.
  WA_FIELDCAT-SELTEXT_M     = '客户名称'.
  WA_FIELDCAT-SELTEXT_S     = '客户名称'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'LIFNR'.
  WA_FIELDCAT-REF_TABNAME   = ''.
  WA_FIELDCAT-REF_FIELDNAME = ''.
  WA_FIELDCAT-SELTEXT_L     = '供应商'.
  WA_FIELDCAT-SELTEXT_M     = '供应商'.
  WA_FIELDCAT-SELTEXT_S     = '供应商'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'NAME1_L'.
  WA_FIELDCAT-REF_TABNAME   = 'LFA1'.
  WA_FIELDCAT-REF_FIELDNAME = 'NAME1'.
  WA_FIELDCAT-SELTEXT_L     = '供应商名称'.
  WA_FIELDCAT-SELTEXT_M     = '供应商名称'.
  WA_FIELDCAT-SELTEXT_S     = '供应商名称'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'UMSKZ'.
  WA_FIELDCAT-REF_TABNAME   = ''.
  WA_FIELDCAT-REF_FIELDNAME = ''.
  WA_FIELDCAT-SELTEXT_L     = '特别总帐标志'.
  WA_FIELDCAT-SELTEXT_M     = '特别总帐标志'.
  WA_FIELDCAT-SELTEXT_S     = '特别总帐标志'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'KTEXT'.
  WA_FIELDCAT-REF_TABNAME   = 'T074T'.
  WA_FIELDCAT-REF_FIELDNAME = 'KTEXT'.
  WA_FIELDCAT-SELTEXT_L     = '特别总帐标志描述'.
  WA_FIELDCAT-SELTEXT_M     = '特别总帐标志描述'.
  WA_FIELDCAT-SELTEXT_S     = '特别总帐标志描述'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'NEWBW'.
  WA_FIELDCAT-REF_TABNAME   = ''.
  WA_FIELDCAT-REF_FIELDNAME = ''.
  WA_FIELDCAT-SELTEXT_L     = '资产交易类型'.
  WA_FIELDCAT-SELTEXT_M     = '资产交易类型'.
  WA_FIELDCAT-SELTEXT_S     = '资产交易类型'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'BWATXT'.
  WA_FIELDCAT-REF_TABNAME   = 'TABWT'.
  WA_FIELDCAT-REF_FIELDNAME = 'BWATXT'.
  WA_FIELDCAT-SELTEXT_L     = '资产交易类型描述'.
  WA_FIELDCAT-SELTEXT_M     = '资产交易类型描述'.
  WA_FIELDCAT-SELTEXT_S     = '资产交易类型描述'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'WRBTR'.
  WA_FIELDCAT-REF_TABNAME   = ''.
  WA_FIELDCAT-REF_FIELDNAME = ''.
  WA_FIELDCAT-SELTEXT_L     = '金额'.
  WA_FIELDCAT-SELTEXT_M     = '金额'.
  WA_FIELDCAT-SELTEXT_S     = '金额'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'MENGE'.
  WA_FIELDCAT-REF_TABNAME   = ''.
  WA_FIELDCAT-REF_FIELDNAME = ''.
  WA_FIELDCAT-SELTEXT_L     = '数量'.
  WA_FIELDCAT-SELTEXT_M     = '数量'.
  WA_FIELDCAT-SELTEXT_S     = '数量'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'KOSTL'.
  WA_FIELDCAT-REF_TABNAME   = ''.
  WA_FIELDCAT-REF_FIELDNAME = ''.
  WA_FIELDCAT-SELTEXT_L     = '成本中心'.
  WA_FIELDCAT-SELTEXT_M     = '成本中心'.
  WA_FIELDCAT-SELTEXT_S     = '成本中心'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'KTEXT_K'.
  WA_FIELDCAT-REF_TABNAME   = 'CSKT'.
  WA_FIELDCAT-REF_FIELDNAME = 'KTEXT'.
  WA_FIELDCAT-SELTEXT_L     = '成本中心名称'.
  WA_FIELDCAT-SELTEXT_M     = '成本中心名称'.
  WA_FIELDCAT-SELTEXT_S     = '成本中心名称'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'PRCTR'.
  WA_FIELDCAT-REF_TABNAME   = ''.
  WA_FIELDCAT-REF_FIELDNAME = ''.
  WA_FIELDCAT-SELTEXT_L     = '利润中心'.
  WA_FIELDCAT-SELTEXT_M     = '利润中心'.
  WA_FIELDCAT-SELTEXT_S     = '利润中心'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'KTEXT_P'.
  WA_FIELDCAT-REF_TABNAME   = 'CEPCT'.
  WA_FIELDCAT-REF_FIELDNAME = 'KTEXT'.
  WA_FIELDCAT-SELTEXT_L     = '利润中心名称'.
  WA_FIELDCAT-SELTEXT_M     = '利润中心名称'.
  WA_FIELDCAT-SELTEXT_S     = '利润中心名称'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'PSPNR'.
  WA_FIELDCAT-REF_TABNAME   = ''.
  WA_FIELDCAT-REF_FIELDNAME = ''.
  WA_FIELDCAT-SELTEXT_L     = 'WBS'.
  WA_FIELDCAT-SELTEXT_M     = 'WBS'.
  WA_FIELDCAT-SELTEXT_S     = 'WBS'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'POST1'.
  WA_FIELDCAT-REF_TABNAME   = 'PRPS'.
  WA_FIELDCAT-REF_FIELDNAME = 'POST1'.
  WA_FIELDCAT-SELTEXT_L     = 'WBS描述'.
  WA_FIELDCAT-SELTEXT_M     = 'WBS描述'.
  WA_FIELDCAT-SELTEXT_S     = 'WBS描述'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'AUFNR'.
  WA_FIELDCAT-REF_TABNAME   = ''.
  WA_FIELDCAT-REF_FIELDNAME = ''.
  WA_FIELDCAT-SELTEXT_L     = '订单'.
  WA_FIELDCAT-SELTEXT_M     = '订单'.
  WA_FIELDCAT-SELTEXT_S     = '订单'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'KTEXT_A'.
  WA_FIELDCAT-REF_TABNAME   = 'AUFK'.
  WA_FIELDCAT-REF_FIELDNAME = 'KTEXT'.
  WA_FIELDCAT-SELTEXT_L     = '订单描述'.
  WA_FIELDCAT-SELTEXT_M     = '订单描述'.
  WA_FIELDCAT-SELTEXT_S     = '订单描述'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'MWSKZ'.
  WA_FIELDCAT-REF_TABNAME   = ''.
  WA_FIELDCAT-REF_FIELDNAME = ''.
  WA_FIELDCAT-SELTEXT_L     = '税码'.
  WA_FIELDCAT-SELTEXT_M     = '税码'.
  WA_FIELDCAT-SELTEXT_S     = '税码'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'TEXT1'.
  WA_FIELDCAT-REF_TABNAME   = 'T007S'.
  WA_FIELDCAT-REF_FIELDNAME = 'TEXT1'.
  WA_FIELDCAT-SELTEXT_L     = '税码描述'.
  WA_FIELDCAT-SELTEXT_M     = '税码描述'.
  WA_FIELDCAT-SELTEXT_S     = '税码描述'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.



  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'SGTXT'.
  WA_FIELDCAT-REF_TABNAME   = ''.
  WA_FIELDCAT-REF_FIELDNAME = ''.
  WA_FIELDCAT-SELTEXT_L     = '行项目文本'.
  WA_FIELDCAT-SELTEXT_M     = '行项目文本'.
  WA_FIELDCAT-SELTEXT_S     = '行项目文本'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'ZUONR'.
  WA_FIELDCAT-REF_TABNAME   = ''.
  WA_FIELDCAT-REF_FIELDNAME = ''.
  WA_FIELDCAT-SELTEXT_L     = '分配字段'.
  WA_FIELDCAT-SELTEXT_M     = '分配字段'.
  WA_FIELDCAT-SELTEXT_S     = '分配字段'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'RSTGR'.
  WA_FIELDCAT-REF_TABNAME   = ''.
  WA_FIELDCAT-REF_FIELDNAME = ''.
  WA_FIELDCAT-SELTEXT_L     = '原因代码'.
  WA_FIELDCAT-SELTEXT_M     = '原因代码'.
  WA_FIELDCAT-SELTEXT_S     = '原因代码'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'TXT20_R'.
  WA_FIELDCAT-REF_TABNAME   = 'T053S'.
  WA_FIELDCAT-REF_FIELDNAME = 'TXT20'.
  WA_FIELDCAT-SELTEXT_L     = '原因代码描述'.
  WA_FIELDCAT-SELTEXT_M     = '原因代码描述'.
  WA_FIELDCAT-SELTEXT_S     = '原因代码描述'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.




  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'ZTYPE'.
  WA_FIELDCAT-REF_TABNAME   = ''.
  WA_FIELDCAT-REF_FIELDNAME = ''.
  WA_FIELDCAT-SELTEXT_L     = 'S-成功,E-错误'.
  WA_FIELDCAT-SELTEXT_M     = 'S-成功,E-错误'.
  WA_FIELDCAT-SELTEXT_S     = 'S-成功,E-错误'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  DE_POS = DE_POS + 1.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-COL_POS       = DE_POS.
*  WA_FIELDCAT-KEY           = 'X'.
  WA_FIELDCAT-FIELDNAME     = 'ZMESSAGE'.
  WA_FIELDCAT-REF_TABNAME   = ''.
  WA_FIELDCAT-REF_FIELDNAME = ''.
  WA_FIELDCAT-SELTEXT_L     = '消息文本'.
  WA_FIELDCAT-SELTEXT_M     = '消息文本'.
  WA_FIELDCAT-SELTEXT_S     = '消息文本'.
  WA_FIELDCAT-DDICTXT       = 'L'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
*     I_INTERFACE_CHECK        = ' '
*     I_BYPASSING_BUFFER       = ' '
*     I_BUFFER_ACTIVE          = ' '
      I_CALLBACK_PROGRAM       = WA_REPID
      I_CALLBACK_PF_STATUS_SET = 'SET_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                = IS_LAYOUT
      IT_FIELDCAT              = IT_FIELDCAT
*     IT_EXCLUDING             =
*     IT_SPECIAL_GROUPS        =
*     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        =
*   IMPORTING
*     E_EXIT_CAUSED_BY_CALLER  =
*     ES_EXIT_CAUSED_BY_USER   =
    TABLES
      T_OUTTAB                 = IT_UPLOAD
    EXCEPTIONS
      PROGRAM_ERROR            = 1
      OTHERS                   = 2.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
ENDFORM.                    " FRM_SHOW_DATA

*&---------------------------------------------------------------------*
*&      Form  FRM_INIT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_INIT .
  SSCRFIELDS-FUNCTXT_01 = '下载上载模板'.
ENDFORM.                    " FRM_INIT
*&---------------------------------------------------------------------*
*&      Form  FRM_FILE_F4
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_FILE_F4 .
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      MASK             = ' Excel(*.xlsx)|*.xlsx|Excel(*.xls)|*.xls|全部文件 (*.*)|*.*|'
      TITLE            = '选择文件'
    IMPORTING
      FILENAME         = P_FILE
    EXCEPTIONS
      INV_WINSYS       = 1
      NO_BATCH         = 2
      SELECTION_CANCEL = 3
      SELECTION_ERROR  = 4
      OTHERS           = 5.
  IF SY-SUBRC <> 0 AND SY-SUBRC <> 3.
    MESSAGE E015(ZMM) WITH '选择文件出错!'.
  ENDIF.
ENDFORM.                    " FRM_FILE_F4
*&---------------------------------------------------------------------*
*&      Form  FRM_DOWNLOAD_TEM_XLS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_DOWNLOAD_TEM_XLS .

  DATA: FILENAME TYPE STRING VALUE 'ZFIB002.xlsx',
        PATH     TYPE STRING VALUE 'C:\',
        FULLPATH TYPE STRING VALUE 'C:\ZFIB002.xlsx'.

  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
    EXPORTING
*     WINDOW_TITLE         =
*     DEFAULT_EXTENSION    =
      DEFAULT_FILE_NAME    = FILENAME
*     WITH_ENCODING        =
      FILE_FILTER          = 'Excel(*.xlsx)|*.xlsx|Excel(*.xls)|*.xls|全部文件 (*.*)|*.*|'
      INITIAL_DIRECTORY    = PATH
*     PROMPT_ON_OVERWRITE  = 'X'
    CHANGING
      FILENAME             = FILENAME
      PATH                 = PATH
      FULLPATH             = FULLPATH
*     USER_ACTION          =
*     FILE_ENCODING        =
    EXCEPTIONS
      CNTL_ERROR           = 1
      ERROR_NO_GUI         = 2
      NOT_SUPPORTED_BY_GUI = 3
      OTHERS               = 4.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ELSE.
    IF FULLPATH IS INITIAL.

    ELSE.
      PERFORM DOWNLOAD_EXCEL_FROMSERVER USING FULLPATH.
      P_FILE = FULLPATH.
      "MESSAGE '模板导出成功' TYPE 'S'.
    ENDIF.
  ENDIF.
ENDFORM.                    " FRM_DOWNLOAD_TEM_XLS
*&---------------------------------------------------------------------*
*&      Form  DOWNLOAD_EXCEL_FROMSERVER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_FULLPATH  text
*----------------------------------------------------------------------*
FORM DOWNLOAD_EXCEL_FROMSERVER  USING P_DEST.
  DATA: LO_OBJDATA     LIKE WWWDATATAB,
        LS_DESTINATION LIKE RLGRAP-FILENAME.
  LS_DESTINATION = P_DEST.
  LO_OBJDATA-RELID = 'MI'.
  LO_OBJDATA-OBJID = 'ZFIB002'.
  CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
    EXPORTING
      KEY         = LO_OBJDATA
      DESTINATION = LS_DESTINATION
*   IMPORTING
*     RC          =
*   CHANGING
*     TEMP        =
    .
ENDFORM.                    " DOWNLOAD_EXCEL_FROMSERVER
*&---------------------------------------------------------------------*
*&      Form  FRM_UPLOAD_FILE_XLS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_UPLOAD_FILE_XLS .

  DATA: IT_RAW  TYPE TRUXS_T_TEXT_DATA.

  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING
*     I_FIELD_SEPERATOR    =
      I_LINE_HEADER        = 'X'
      I_TAB_RAW_DATA       = IT_RAW       " WORK TABLE
      I_FILENAME           = P_FILE
    TABLES
      I_TAB_CONVERTED_DATA = IT_UPLOAD  "ACTUAL DATA
    EXCEPTIONS
      CONVERSION_FAILED    = 1
      OTHERS               = 2.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  IF IT_UPLOAD IS INITIAL.
    MESSAGE '上载文档空请检查' TYPE 'S' DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ELSE.
*************设置标识的初始状态
    LOOP AT IT_UPLOAD INTO WA_UPLOAD.
      WA_UPLOAD-ZSEL = 'X'.
      WA_UPLOAD-ICON = ICON_YELLOW_LIGHT.
      WA_UPLOAD-ZMESSAGE = ''.
      MODIFY IT_UPLOAD FROM WA_UPLOAD TRANSPORTING ZSEL ICON ZMESSAGE.
    ENDLOOP.
  ENDIF.
ENDFORM.                    " FRM_UPLOAD_FILE_XLS
*&---------------------------------------------------------------------*
*&      Form  FRM_CHECK_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_CHECK_DATA .
  DATA: L_DATE TYPE SY-DATUM.
  DATA: L_COUNT TYPE I.

  CLEAR: G_CHECK.

  LOOP AT IT_UPLOAD INTO WA_UPLOAD.

    CLEAR: G_ZTYPE,
           G_ZMESSAGE.

******************************************************
*    检查
******************************************************


    IF WA_UPLOAD-ZID IS INITIAL.
      G_ZTYPE = 'E'.
      G_ZMESSAGE = '凭证序号不能为空'.
    ENDIF.

    IF WA_UPLOAD-BLART IS INITIAL.
      G_ZTYPE = 'E'.
      G_ZMESSAGE = '凭证类型不能为空'.
    ELSE.
      WA_UPLOAD-BLART_T = WA_UPLOAD-BLART.
      IF WA_UPLOAD-BLART_T = WA_UPLOAD-BLART.
        SELECT SINGLE LTEXT
          FROM T003T
          INTO WA_UPLOAD-LTEXT_B
         WHERE SPRAS EQ '1'
           AND BLART EQ WA_UPLOAD-BLART_T.
        IF SY-SUBRC = 0.

        ELSE.
          G_ZTYPE = 'E'.
          G_ZMESSAGE = '凭证类型不存在'.
        ENDIF.
      ELSE.
        G_ZTYPE = 'E'.
        G_ZMESSAGE = '凭证类型长度超长'.
      ENDIF.
    ENDIF.

    IF WA_UPLOAD-BUKRS IS INITIAL.
      G_ZTYPE = 'E'.
      G_ZMESSAGE = '公司代码不能为空'.
    ELSE.
      WA_UPLOAD-BUKRS_T = WA_UPLOAD-BUKRS.
      IF WA_UPLOAD-BUKRS_T = WA_UPLOAD-BUKRS.
        SELECT SINGLE BUTXT
          FROM T001
          INTO WA_UPLOAD-BUTXT
         WHERE BUKRS EQ WA_UPLOAD-BUKRS_T.
        IF SY-SUBRC = 0.

        ELSE.
          G_ZTYPE = 'E'.
          G_ZMESSAGE = '公司代码不存在'.
        ENDIF.
      ELSE.
        G_ZTYPE = 'E'.
        G_ZMESSAGE = '公司代码长度超长'.
      ENDIF.
      SELECT SINGLE BUTXT
        FROM T001
        INTO WA_UPLOAD-BUTXT
       WHERE BUKRS = WA_UPLOAD-BUKRS_T.
      IF SY-SUBRC = 0.

      ELSE.

      ENDIF.
    ENDIF.

    IF WA_UPLOAD-WAERS IS INITIAL.
      G_ZTYPE = 'E'.
      G_ZMESSAGE = '货币码不能为空'.
    ENDIF.

    IF WA_UPLOAD-BKTXT IS INITIAL.
      G_ZTYPE = 'E'.
      G_ZMESSAGE = '凭证抬头文本不能为空'.
    ENDIF.



    IF WA_UPLOAD-BLDAT IS INITIAL.
      G_ZTYPE = 'E'.
      G_ZMESSAGE = '凭证日期不能为空'.
    ELSE.
      L_DATE = WA_UPLOAD-BLDAT.
      CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
        EXPORTING
          DATE                      = L_DATE
        EXCEPTIONS
          PLAUSIBILITY_CHECK_FAILED = 1
          OTHERS                    = 2.
      IF SY-SUBRC <> 0.
* Implement suitable error handling here
        G_ZTYPE = 'E'.
        G_ZMESSAGE = '日期格式错误,正确格式为:YYYYMMDD'..
      ELSE.

      ENDIF.
    ENDIF.


    IF WA_UPLOAD-BUDAT IS INITIAL.
      G_ZTYPE = 'E'.
      G_ZMESSAGE = '过帐日期不能为空'.
    ELSE.
      L_DATE = WA_UPLOAD-BUDAT.
      CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
        EXPORTING
          DATE                      = L_DATE
        EXCEPTIONS
          PLAUSIBILITY_CHECK_FAILED = 1
          OTHERS                    = 2.
      IF SY-SUBRC <> 0.
* Implement suitable error handling here
        G_ZTYPE = 'E'.
        G_ZMESSAGE = '过帐日期格式错误,正确格式为:YYYYMMDD'..
      ELSE.

      ENDIF.
    ENDIF.

    CLEAR: L_COUNT.
    IF WA_UPLOAD-HKONT IS NOT INITIAL.
      ADD 1 TO L_COUNT.
    ENDIF.
    IF WA_UPLOAD-ANLN1 IS NOT INITIAL.
      ADD 1 TO L_COUNT.
    ENDIF.
    IF WA_UPLOAD-KUNNR IS NOT INITIAL.
      ADD 1 TO L_COUNT.
    ENDIF.
    IF WA_UPLOAD-LIFNR IS NOT INITIAL.
      ADD 1 TO L_COUNT.
    ENDIF.
    IF L_COUNT = 1.
      IF WA_UPLOAD-HKONT IS NOT INITIAL.
        WA_UPLOAD-HKONT_T = WA_UPLOAD-HKONT.
        IF WA_UPLOAD-HKONT_T = WA_UPLOAD-HKONT.
          CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
            EXPORTING
              INPUT  = WA_UPLOAD-HKONT_T
            IMPORTING
              OUTPUT = WA_UPLOAD-HKONT_T.
          SELECT SINGLE A~TXT20
            FROM SKAT AS A INNER JOIN T001 AS B ON B~KTOPL = A~KTOPL
            INTO WA_UPLOAD-TXT20
           WHERE A~SPRAS EQ '1'
             AND A~SAKNR EQ WA_UPLOAD-HKONT_T
             AND B~BUKRS EQ WA_UPLOAD-BUKRS.
          IF SY-SUBRC = 0.

          ELSE.
            G_ZTYPE = 'E'.
            G_ZMESSAGE = '总帐科目不存在'.
          ENDIF.
        ELSE.
          G_ZTYPE = 'E'.
          G_ZMESSAGE = '总帐科目长度超长'.
        ENDIF.
      ENDIF.

      IF WA_UPLOAD-ANLN1 IS NOT INITIAL.
        WA_UPLOAD-ANLN1_T = WA_UPLOAD-ANLN1.
        IF WA_UPLOAD-ANLN1_T = WA_UPLOAD-ANLN1.
          WA_UPLOAD-ANLN2_T = WA_UPLOAD-ANLN2.
          IF WA_UPLOAD-ANLN2_T = WA_UPLOAD-ANLN2 AND G_ZTYPE <> 'E'.
            CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
              EXPORTING
                INPUT  = WA_UPLOAD-ANLN1_T
              IMPORTING
                OUTPUT = WA_UPLOAD-ANLN1_T.
            CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
              EXPORTING
                INPUT  = WA_UPLOAD-ANLN2_T
              IMPORTING
                OUTPUT = WA_UPLOAD-ANLN2_T.
            SELECT SINGLE TXT50
              FROM ANLA
              INTO WA_UPLOAD-TXT50
             WHERE BUKRS EQ WA_UPLOAD-BUKRS_T
               AND ANLN1 EQ WA_UPLOAD-ANLN1_T
               AND ANLN2 EQ WA_UPLOAD-ANLN2_T.
            IF SY-SUBRC = 0.
              IF WA_UPLOAD-NEWBW IS INITIAL.
                G_ZTYPE = 'E'.
                G_ZMESSAGE = '资产交易类型不能为空'.
              ELSE.
                WA_UPLOAD-NEWBW_T = WA_UPLOAD-NEWBW.
                IF WA_UPLOAD-NEWBW_T = WA_UPLOAD-NEWBW.
                  SELECT SINGLE BWATXT
                    FROM TABWT
                    INTO WA_UPLOAD-BWATXT
                   WHERE SPRAS EQ '1'
                     AND BWASL EQ WA_UPLOAD-NEWBW_T.
                  IF SY-SUBRC = 0.

                  ELSE.
                    G_ZTYPE = 'E'.
                    G_ZMESSAGE = '资产交易类型不存在'.
                  ENDIF.
                ELSE.
                  G_ZTYPE = 'E'.
                  G_ZMESSAGE = '资产交易类型长度超长'.
                ENDIF.
              ENDIF.
            ELSE.
              G_ZTYPE = 'E'.
              G_ZMESSAGE = '资产号不存在'.
            ENDIF.
          ELSE.
            G_ZTYPE = 'E'.
            G_ZMESSAGE = '子资产编码长度超长'.
          ENDIF.
        ELSE.
          G_ZTYPE = 'E'.
          G_ZMESSAGE = '主资产编码长度超长'.
        ENDIF.
      ENDIF.

      IF WA_UPLOAD-KUNNR IS NOT INITIAL.
        WA_UPLOAD-KUNNR_T = WA_UPLOAD-KUNNR.
        IF WA_UPLOAD-KUNNR_T = WA_UPLOAD-KUNNR.
          CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
            EXPORTING
              INPUT  = WA_UPLOAD-KUNNR_T
            IMPORTING
              OUTPUT = WA_UPLOAD-KUNNR_T.
          SELECT SINGLE NAME1
            FROM KNA1
            INTO WA_UPLOAD-NAME1_K
           WHERE KUNNR EQ WA_UPLOAD-KUNNR_T.
          IF SY-SUBRC = 0.
            IF WA_UPLOAD-UMSKZ IS NOT INITIAL.
              WA_UPLOAD-UMSKZ_T = WA_UPLOAD-UMSKZ.
              IF WA_UPLOAD-UMSKZ_T = WA_UPLOAD-UMSKZ.
                SELECT SINGLE KTEXT
                  FROM T074T
                  INTO WA_UPLOAD-KTEXT
                 WHERE SPRAS EQ '1'
                   AND KOART EQ 'D'
                   AND SHBKZ EQ WA_UPLOAD-UMSKZ_T.
                IF SY-SUBRC = 0.

                ELSE.
                  G_ZTYPE = 'E'.
                  G_ZMESSAGE = '特别总帐标识不存在'.
                ENDIF.
              ELSE.
                G_ZTYPE = 'E'.
                G_ZMESSAGE = '特别总帐标识长度超长'.
              ENDIF.
            ENDIF.
          ELSE.
            G_ZTYPE = 'E'.
            G_ZMESSAGE = '客户不存在'.
          ENDIF.
        ELSE.
          G_ZTYPE = 'E'.
          G_ZMESSAGE = '客户长度超长'.
        ENDIF.
      ENDIF.

      IF WA_UPLOAD-LIFNR IS NOT INITIAL.
        WA_UPLOAD-LIFNR_T = WA_UPLOAD-LIFNR.
        IF WA_UPLOAD-LIFNR_T = WA_UPLOAD-LIFNR.
          CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
            EXPORTING
              INPUT  = WA_UPLOAD-LIFNR_T
            IMPORTING
              OUTPUT = WA_UPLOAD-LIFNR_T.
          SELECT SINGLE NAME1
            FROM LFA1
            INTO WA_UPLOAD-NAME1_L
           WHERE LIFNR EQ WA_UPLOAD-LIFNR_T.
          IF SY-SUBRC = 0.
            IF WA_UPLOAD-UMSKZ IS NOT INITIAL.
              WA_UPLOAD-UMSKZ_T = WA_UPLOAD-UMSKZ.
              IF WA_UPLOAD-UMSKZ_T = WA_UPLOAD-UMSKZ.
                SELECT SINGLE KTEXT
                  FROM T074T
                  INTO WA_UPLOAD-KTEXT
                 WHERE SPRAS EQ '1'
                   AND KOART EQ 'K'
                   AND SHBKZ EQ WA_UPLOAD-UMSKZ_T.
                IF SY-SUBRC = 0.

                ELSE.
                  G_ZTYPE = 'E'.
                  G_ZMESSAGE = '特别总帐标识不存在'.
                ENDIF.
              ELSE.
                G_ZTYPE = 'E'.
                G_ZMESSAGE = '特别总帐标识长度超长'.
              ENDIF.
            ENDIF.
          ELSE.
            G_ZTYPE = 'E'.
            G_ZMESSAGE = '供应商不存在'.
          ENDIF.
        ELSE.
          G_ZTYPE = 'E'.
          G_ZMESSAGE = '供应商长度超长'.
        ENDIF.
      ENDIF.

    ELSE.
      G_ZTYPE = 'E'.
      G_ZMESSAGE = '总帐科目、主资产编码、客户、供应商必需并且只能输入当中的一个字段'.
    ENDIF.


    IF WA_UPLOAD-KOSTL IS NOT INITIAL.
      WA_UPLOAD-KOSTL_T = WA_UPLOAD-KOSTL.
      IF WA_UPLOAD-KOSTL_T = WA_UPLOAD-KOSTL.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            INPUT  = WA_UPLOAD-KOSTL_T
          IMPORTING
            OUTPUT = WA_UPLOAD-KOSTL_T.
        SELECT SINGLE
               A~KTEXT
          FROM CSKT AS A INNER JOIN TKA02 AS B ON B~KOKRS = A~KOKRS
          INTO WA_UPLOAD-KTEXT_K
         WHERE A~SPRAS EQ '1'
           AND A~KOSTL EQ WA_UPLOAD-KOSTL_T
           AND A~DATBI >= SY-DATUM
           AND B~BUKRS = WA_UPLOAD-BUKRS.
        IF SY-SUBRC = 0.

        ELSE.
          G_ZTYPE = 'E'.
          G_ZMESSAGE = '成本中心不存在'.
        ENDIF.
      ELSE.
        G_ZTYPE = 'E'.
        G_ZMESSAGE = '成本中心长度超长'.
      ENDIF.
    ENDIF.

    IF WA_UPLOAD-PRCTR IS NOT INITIAL.
      WA_UPLOAD-PRCTR_T = WA_UPLOAD-PRCTR.
      IF WA_UPLOAD-PRCTR_T = WA_UPLOAD-PRCTR.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            INPUT  = WA_UPLOAD-PRCTR_T
          IMPORTING
            OUTPUT = WA_UPLOAD-PRCTR_T.
        SELECT SINGLE
               A~KTEXT
          FROM CEPCT AS A INNER JOIN TKA02 AS B ON B~KOKRS = A~KOKRS
          INTO WA_UPLOAD-KTEXT_P
         WHERE A~SPRAS EQ '1'
           AND A~PRCTR EQ WA_UPLOAD-PRCTR_T
           AND A~DATBI >= SY-DATUM
           AND B~BUKRS EQ WA_UPLOAD-BUKRS.
        IF SY-SUBRC = 0.

        ELSE.
          G_ZTYPE = 'E'.
          G_ZMESSAGE = '利润中心不存在'.
        ENDIF.
      ELSE.
        G_ZTYPE = 'E'.
        G_ZMESSAGE = '利润中心长度超长'.
      ENDIF.
    ENDIF.

    IF WA_UPLOAD-PSPNR IS NOT INITIAL.
      WA_UPLOAD-POSID_EDIT = WA_UPLOAD-PSPNR.
      IF WA_UPLOAD-POSID_EDIT = WA_UPLOAD-PSPNR.
        SELECT SINGLE
               PSPNR
               POSID_EDIT
               POST1
          FROM PRPS
          INTO (WA_UPLOAD-PSPNR_T, WA_UPLOAD-POSID_EDIT, WA_UPLOAD-POST1)
         WHERE POSID_EDIT EQ WA_UPLOAD-POSID_EDIT.
        IF SY-SUBRC = 0.

        ELSE.
          G_ZTYPE = 'E'.
          G_ZMESSAGE = 'WBS不存在'.
        ENDIF.
      ELSE.
        CLEAR: WA_UPLOAD-POSID_EDIT.
        G_ZTYPE = 'E'.
        G_ZMESSAGE = 'WBS长度超长'.
      ENDIF.
    ENDIF.

    IF WA_UPLOAD-AUFNR IS NOT INITIAL.
      WA_UPLOAD-AUFNR_T = WA_UPLOAD-AUFNR.
      IF WA_UPLOAD-AUFNR_T = WA_UPLOAD-AUFNR.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            INPUT  = WA_UPLOAD-AUFNR_T
          IMPORTING
            OUTPUT = WA_UPLOAD-AUFNR_T.
        SELECT SINGLE KTEXT
          FROM AUFK
          INTO WA_UPLOAD-KTEXT_A
         WHERE AUFNR EQ WA_UPLOAD-AUFNR_T.
        IF SY-SUBRC = 0.

        ELSE.
          G_ZTYPE = 'E'.
          G_ZMESSAGE = '内部订单不存在'.
        ENDIF.
      ELSE.
        G_ZTYPE = 'E'.
        G_ZMESSAGE = '内部订单长度超长'.
      ENDIF.
    ENDIF.

    IF WA_UPLOAD-MWSKZ IS NOT INITIAL.
      WA_UPLOAD-MWSKZ_T = WA_UPLOAD-MWSKZ.
      IF WA_UPLOAD-MWSKZ_T = WA_UPLOAD-MWSKZ.
        SELECT SINGLE TEXT1
          FROM T007S
          INTO WA_UPLOAD-TEXT1
         WHERE SPRAS EQ '1'
           AND KALSM EQ 'TAXCN'
           AND MWSKZ EQ WA_UPLOAD-MWSKZ_T.
        IF SY-SUBRC = 0.

        ELSE.
          G_ZTYPE = 'E'.
          G_ZMESSAGE = '税码不存在'.
        ENDIF.
      ELSE.
        G_ZTYPE = 'E'.
        G_ZMESSAGE = '税码长度超长'.
      ENDIF.
    ENDIF.


    IF WA_UPLOAD-RSTGR IS NOT INITIAL AND G_ZTYPE <> 'E'.
      WA_UPLOAD-RSTGR_T = WA_UPLOAD-RSTGR.
      IF WA_UPLOAD-RSTGR_T = WA_UPLOAD-RSTGR.
        SELECT SINGLE TXT20
          FROM T053S
          INTO WA_UPLOAD-TXT20_R
         WHERE SPRAS EQ '1'
           AND BUKRS EQ WA_UPLOAD-BUKRS_T
           AND RSTGR EQ WA_UPLOAD-RSTGR_T.
        IF SY-SUBRC = 0.

        ELSE.
          G_ZTYPE = 'E'.
          G_ZMESSAGE = '原因代码不存在'.
        ENDIF.
      ELSE.
        G_ZTYPE = 'E'.
        G_ZMESSAGE = '原因代码长度超长'.
      ENDIF.
    ENDIF.




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

    WA_UPLOAD-ZTYPE = G_ZTYPE.
    WA_UPLOAD-ZMESSAGE = G_ZMESSAGE.
    CASE WA_UPLOAD-ZTYPE.
      WHEN 'E'.
        WA_UPLOAD-ICON = ICON_RED_LIGHT.
      WHEN OTHERS.
        WA_UPLOAD-ICON = ICON_YELLOW_LIGHT.
    ENDCASE.

    IF WA_UPLOAD-ZTYPE = 'E'.
      G_CHECK = 'E'.
    ENDIF.

    MODIFY IT_UPLOAD
           FROM WA_UPLOAD
           TRANSPORTING HKONT_T TXT20 ANLN1_T ANLN2_T TXT50
                        KUNNR_T NAME1_K LIFNR_T NAME1_L
                        UMSKZ_T KTEXT KOSTL_T KTEXT_K
                        PRCTR_T KTEXT_P
                        PSPNR_T POSID_EDIT POST1
                        AUFNR_T KTEXT_A
                        MWSKZ_T TEXT1
                        RSTGR_T TXT20_R
                        BLART_T LTEXT_B BUKRS_T BUTXT
                        NEWBW_T BWATXT
                        ICON ZTYPE ZMESSAGE.
  ENDLOOP.

  SORT IT_UPLOAD BY ZID.
ENDFORM.                    " FRM_CHECK_DATA

*&---------------------------------------------------------------------*
*&      FORM  SET_STATUS
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*      -->RT_EXTAB   TEXT
*----------------------------------------------------------------------*
FORM SET_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
  DATA: LWA_EXTAB LIKE LINE OF RT_EXTAB.
  IF G_CHECK = 'E'.
    LWA_EXTAB-FCODE = 'ZSAVE'.
    APPEND LWA_EXTAB TO RT_EXTAB.
  ENDIF.
  SET PF-STATUS 'ZBAPI004' EXCLUDING RT_EXTAB.
ENDFORM.                    "SET_STATUS


*&---------------------------------------------------------------------*
*&      FORM  USER_COMMAND
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*      -->RF_UCOMM     TEXT
*      -->RS_SELFIELD  TEXT
*----------------------------------------------------------------------*
FORM USER_COMMAND USING RF_UCOMM LIKE SY-UCOMM
                        RS_SELFIELD TYPE SLIS_SELFIELD.
  CASE RF_UCOMM.
    WHEN 'ZSAVE'.
      IF G_CHECK = 'E'.
        MESSAGE '上载数据有错,不能保存' TYPE 'E'.
      ENDIF.
      IF G_DO = 'X'.
        MESSAGE '修改操作已执行' TYPE 'E'.
      ENDIF.
      G_DO = 'X'.
      PERFORM FRM_ZDO.
  ENDCASE.
*如果前面把内表的数据修改了,通过这个就会自到更新数据
  RS_SELFIELD-REFRESH = 'X'.
ENDFORM.                    "USER_COMMAND
*&---------------------------------------------------------------------*
*&      Form  FRM_ZDO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_ZDO .

  DATA: WA_DOCUMENTHEADER    TYPE BAPIACHE09,                    "待传凭证抬头 工作区
        WA_ACCOUNTGL         TYPE BAPIACGL09,                    "总帐科目项 工作区
        IT_ACCOUNTGL         TYPE STANDARD TABLE OF BAPIACGL09,  "总帐科目项 内表
        WA_ACCOUNTRECEIVABLE TYPE BAPIACAR09,                    "客户项目 工作区
        IT_ACCOUNTRECEIVABLE TYPE STANDARD TABLE OF BAPIACAR09,  "客户项目 内表
        WA_ACCOUNTPAYABLE    TYPE BAPIACAP09,                    "供应商项目 工作区
        IT_ACCOUNTPAYABLE    TYPE STANDARD TABLE OF BAPIACAP09,  "供应商项目内表
        WA_CURRENCYAMOUNT    TYPE BAPIACCR09,                    "货币项目 工作区
        IT_CURRENCYAMOUNT    TYPE STANDARD TABLE OF BAPIACCR09,  "货币项目 内表
        WA_EXTENSION2        TYPE BAPIPAREX,                     "参考结构 工作区
        IT_EXTENSION2        TYPE STANDARD TABLE OF BAPIPAREX,   "参考结构 内表
        WA_RETURN            TYPE BAPIRET2,                      "返回参数 工作区
        IT_RETURN            TYPE STANDARD TABLE OF BAPIRET2,    "返回参数 内表
        WA_ACCOUNTTAX        TYPE BAPIACTX09,
        IT_ACCOUNTTAX        LIKE STANDARD TABLE OF WA_ACCOUNTTAX.

  DATA: WA_ZBAPI_ACC_BSEG TYPE ZBAPI_ACC_BSEG.

  DATA: G_OBJ_TYPE TYPE BAPIACHE09-OBJ_TYPE,
        G_OBJ_KEY  TYPE  BAPIACHE09-OBJ_KEY,
        G_OBJ_SYS  TYPE  BAPIACHE09-OBJ_SYS.

  DATA: WA_MWDAT TYPE RTAX1U15,
        IT_MWDAT LIKE STANDARD TABLE OF WA_MWDAT.
  DATA: I_BUKRS TYPE BSEG-BUKRS.
  DATA: I_MWSKZ TYPE MSEG-MWSKZ.
  DATA: I_WRBTR TYPE BSEG-WRBTR.
  DATA: I_WAERS TYPE BKPF-WAERS.

  DATA: L_ITEM TYPE POSNR_ACC.
  DATA: L_KTOGR TYPE ANLA-KTOGR.

  BREAK DGIT01.

  SORT IT_UPLOAD BY ZID.
  LOOP AT IT_UPLOAD INTO WA_UPLOAD.

    AT NEW ZID.
      CLEAR: G_ZTYPE,
             G_ZMESSAGE.

      CLEAR: WA_DOCUMENTHEADER,
             G_OBJ_TYPE,
             G_OBJ_KEY,
             G_OBJ_SYS.

      CLEAR: IT_ACCOUNTGL,
             IT_ACCOUNTRECEIVABLE,
             IT_ACCOUNTPAYABLE,
             IT_CURRENCYAMOUNT.

      CLEAR: L_ITEM.
    ENDAT.

    IF WA_DOCUMENTHEADER IS INITIAL.
* 调用BAPI生产会计凭证*------------------------转换表头------------------------------------
      WA_DOCUMENTHEADER-BUS_ACT    = 'RFBU'."业务事务 RFBU RMWE
      WA_DOCUMENTHEADER-OBJ_TYPE   = 'BKPFF'."参考交易
      WA_DOCUMENTHEADER-USERNAME   = SY-UNAME."创建人
      WA_DOCUMENTHEADER-COMP_CODE  = WA_UPLOAD-BUKRS."公司代码
      WA_DOCUMENTHEADER-DOC_DATE   = WA_UPLOAD-BLDAT."凭证日期
      WA_DOCUMENTHEADER-PSTNG_DATE = WA_UPLOAD-BUDAT."过帐日期
      WA_DOCUMENTHEADER-FISC_YEAR  = WA_UPLOAD-BUDAT+0(4)."会计年度
      WA_DOCUMENTHEADER-FIS_PERIOD = WA_UPLOAD-BUDAT+4(2)."会计期间
      WA_DOCUMENTHEADER-DOC_TYPE   = WA_UPLOAD-BLART."凭证类型
      WA_DOCUMENTHEADER-REF_DOC_NO   = WA_UPLOAD-XBLNR."参照
      WA_DOCUMENTHEADER-HEADER_TXT   = WA_UPLOAD-BKTXT."凭证抬头文本
    ENDIF.

    ADD 1 TO L_ITEM.

    IF WA_UPLOAD-HKONT IS NOT INITIAL.
      CLEAR: WA_ACCOUNTGL.
      WA_ACCOUNTGL-ITEMNO_ACC = L_ITEM.
      WA_ACCOUNTGL-GL_ACCOUNT = WA_UPLOAD-HKONT."科目
      WA_ACCOUNTGL-ACCT_TYPE  = 'S'."帐户类型
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          INPUT  = WA_ACCOUNTGL-GL_ACCOUNT
        IMPORTING
          OUTPUT = WA_ACCOUNTGL-GL_ACCOUNT.
      WA_ACCOUNTGL-ITEM_TEXT = WA_UPLOAD-SGTXT."行项目文本

      IF WA_UPLOAD-KOSTL IS NOT INITIAL.
        WA_ACCOUNTGL-COSTCENTER = WA_UPLOAD-KOSTL."成本中心
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            INPUT  = WA_ACCOUNTGL-COSTCENTER
          IMPORTING
            OUTPUT = WA_ACCOUNTGL-COSTCENTER.
      ENDIF.
      IF WA_UPLOAD-PRCTR IS NOT INITIAL.
        WA_ACCOUNTGL-PROFIT_CTR = WA_UPLOAD-PRCTR."利润中心
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            INPUT  = WA_ACCOUNTGL-PROFIT_CTR
          IMPORTING
            OUTPUT = WA_ACCOUNTGL-PROFIT_CTR.
      ENDIF.
      IF WA_UPLOAD-PSPNR IS NOT INITIAL.
        WA_ACCOUNTGL-WBS_ELEMENT = WA_UPLOAD-PSPNR."WBS
      ENDIF.
      IF WA_UPLOAD-AUFNR IS NOT INITIAL.
        WA_ACCOUNTGL-ORDERID = WA_UPLOAD-AUFNR."订单
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            INPUT  = WA_ACCOUNTGL-ORDERID
          IMPORTING
            OUTPUT = WA_ACCOUNTGL-ORDERID.
      ENDIF.
      WA_ACCOUNTGL-ALLOC_NMBR = WA_UPLOAD-ZUONR."分配号
      WA_ACCOUNTGL-TAX_CODE = WA_UPLOAD-MWSKZ."税码
      APPEND WA_ACCOUNTGL TO IT_ACCOUNTGL.

      CLEAR: WA_EXTENSION2.
      CLEAR: WA_ZBAPI_ACC_BSEG.
      WA_EXTENSION2-STRUCTURE = 'ZBAPI_ACC_BSEG'.
      WA_ZBAPI_ACC_BSEG-POSNR = L_ITEM.
      WA_ZBAPI_ACC_BSEG-RSTGR = WA_UPLOAD-RSTGR.
      WA_EXTENSION2-VALUEPART1 = WA_ZBAPI_ACC_BSEG.
      APPEND WA_EXTENSION2 TO IT_EXTENSION2.

      CLEAR: WA_CURRENCYAMOUNT.
      WA_CURRENCYAMOUNT-ITEMNO_ACC = L_ITEM.
      WA_CURRENCYAMOUNT-CURRENCY = WA_UPLOAD-WAERS."货币码
      WA_CURRENCYAMOUNT-AMT_DOCCUR = WA_UPLOAD-WRBTR."金额
      APPEND WA_CURRENCYAMOUNT TO IT_CURRENCYAMOUNT.


*      IF WA_ACCOUNTGL-TAX_CODE IS NOT INITIAL.
*        CLEAR: IT_MWDAT.
*        I_BUKRS = WA_DOCUMENTHEADER-COMP_CODE.
*        I_MWSKZ = WA_ACCOUNTGL-TAX_CODE.
*        I_WAERS = WA_UPLOAD-WAERS."货币码
*        I_WRBTR = WA_UPLOAD-WRBTR."金额
*        CALL FUNCTION 'CALCULATE_TAX_FROM_GROSSAMOUNT'
*          EXPORTING
*            I_BUKRS                 = I_BUKRS
*            I_MWSKZ                 = I_MWSKZ
**           I_TXJCD                 = ' '
*            I_WAERS                 = I_WAERS
*            I_WRBTR                 = I_WRBTR
**           I_ZBD1P                 = 0
**           I_PRSDT                 =
**           I_PROTOKOLL             =
**           I_TAXPS                 =
**           I_ACCNT_EXT             =
**           IS_ENHANCEMENT          =
**         IMPORTING
**           E_FWNAV                 =
**           E_FWNVV                 =
**           E_FWSTE                 =
**           E_FWAST                 =
*          TABLES
*            T_MWDAT                 = IT_MWDAT
*          EXCEPTIONS
*            BUKRS_NOT_FOUND         = 1
*            COUNTRY_NOT_FOUND       = 2
*            MWSKZ_NOT_DEFINED       = 3
*            MWSKZ_NOT_VALID         = 4
*            ACCOUNT_NOT_FOUND       = 5
*            DIFFERENT_DISCOUNT_BASE = 6
*            DIFFERENT_TAX_BASE      = 7
*            TXJCD_NOT_VALID         = 8
*            NOT_FOUND               = 9
*            KTOSL_NOT_FOUND         = 10
*            KALSM_NOT_FOUND         = 11
*            PARAMETER_ERROR         = 12
*            KNUMH_NOT_FOUND         = 13
*            KSCHL_NOT_FOUND         = 14
*            UNKNOWN_ERROR           = 15
*            OTHERS                  = 16.
*        IF SY-SUBRC <> 0.
**          MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
**                  WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*        ENDIF.
*        IF IT_MWDAT IS NOT INITIAL.
*
*          LOOP AT IT_MWDAT INTO WA_MWDAT.
*            CLEAR: WA_CURRENCYAMOUNT.
*            WA_CURRENCYAMOUNT-ITEMNO_ACC = L_ITEM.
*            WA_CURRENCYAMOUNT-CURRENCY = WA_UPLOAD-WAERS."货币码
*            WA_CURRENCYAMOUNT-AMT_DOCCUR = WA_MWDAT-KAWRT."金额
*            APPEND WA_CURRENCYAMOUNT TO IT_CURRENCYAMOUNT.
*
*            ADD 1 TO L_ITEM.
*            CLEAR WA_ACCOUNTTAX.
*            WA_ACCOUNTTAX-ITEMNO_ACC = L_ITEM.
*            WA_ACCOUNTTAX-GL_ACCOUNT = WA_MWDAT-HKONT.
*            WA_ACCOUNTTAX-TAX_CODE = I_MWSKZ.
*            WA_ACCOUNTTAX-ACCT_KEY   = WA_MWDAT-KTOSL.
*            WA_ACCOUNTTAX-COND_KEY   = WA_MWDAT-KSCHL.
*            WA_ACCOUNTTAX-TAXJURCODE = WA_MWDAT-TXJCD.
*            WA_ACCOUNTTAX-TAXJURCODE_DEEP  = WA_MWDAT-TXJCD_DEEP.
*            WA_ACCOUNTTAX-TAXJURCODE_LEVEL = WA_MWDAT-TXJLV.
**            WA_ACCOUNTTAX-ITEMNO_TAX = L_ITEM.
*            APPEND WA_ACCOUNTTAX TO IT_ACCOUNTTAX.
*
*            CLEAR WA_CURRENCYAMOUNT.
*            WA_CURRENCYAMOUNT-ITEMNO_ACC = L_ITEM.
*            WA_CURRENCYAMOUNT-CURRENCY   = I_WAERS.
*            WA_CURRENCYAMOUNT-AMT_DOCCUR = WA_MWDAT-WMWST.
*            WA_CURRENCYAMOUNT-AMT_BASE = WA_MWDAT-KAWRT."It's not the base, but gross amount
*            APPEND WA_CURRENCYAMOUNT TO IT_CURRENCYAMOUNT.
*
*          ENDLOOP.
*        ELSE.
*          CLEAR: WA_CURRENCYAMOUNT.
*          WA_CURRENCYAMOUNT-ITEMNO_ACC = L_ITEM.
*          WA_CURRENCYAMOUNT-CURRENCY = WA_UPLOAD-WAERS."货币码
*          WA_CURRENCYAMOUNT-AMT_DOCCUR = WA_UPLOAD-WRBTR."金额
*          APPEND WA_CURRENCYAMOUNT TO IT_CURRENCYAMOUNT.
*        ENDIF.
*      ELSE.
*        CLEAR: WA_CURRENCYAMOUNT.
*        WA_CURRENCYAMOUNT-ITEMNO_ACC = L_ITEM.
*        WA_CURRENCYAMOUNT-CURRENCY = WA_UPLOAD-WAERS."货币码
*        WA_CURRENCYAMOUNT-AMT_DOCCUR = WA_UPLOAD-WRBTR."金额
*        APPEND WA_CURRENCYAMOUNT TO IT_CURRENCYAMOUNT.
*      ENDIF.

    ELSEIF WA_UPLOAD-ANLN1 IS NOT INITIAL.
      CLEAR: WA_ACCOUNTGL.
      WA_ACCOUNTGL-ITEMNO_ACC = L_ITEM.
      WA_ACCOUNTGL-ASSET_NO = WA_UPLOAD-ANLN1.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          INPUT  = WA_ACCOUNTGL-ASSET_NO
        IMPORTING
          OUTPUT = WA_ACCOUNTGL-ASSET_NO.
      WA_ACCOUNTGL-SUB_NUMBER = WA_UPLOAD-ANLN2.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          INPUT  = WA_ACCOUNTGL-SUB_NUMBER
        IMPORTING
          OUTPUT = WA_ACCOUNTGL-SUB_NUMBER.
*      WA_ACCOUNTGL-CS_TRANS_T = WA_UPLOAD-NEWBW.
      WA_ACCOUNTGL-ACCT_TYPE  = 'A'."帐户类型
      WA_ACCOUNTGL-QUANTITY   = WA_UPLOAD-MENGE.
      IF WA_ACCOUNTGL-QUANTITY <> 0.
        "保持与资产卡片的单位一致
        SELECT SINGLE MEINS
          FROM ANLA
          INTO WA_ACCOUNTGL-BASE_UOM
         WHERE BUKRS = WA_UPLOAD-BUKRS
           AND ANLN1 = WA_ACCOUNTGL-ASSET_NO
           AND ANLN2 = WA_ACCOUNTGL-SUB_NUMBER.
      ENDIF.
      "保持与资产卡片的科目一致
      CLEAR: L_KTOGR.
      SELECT SINGLE KTOGR
        INTO L_KTOGR
        FROM ANLA
       WHERE BUKRS = WA_UPLOAD-BUKRS
         AND ANLN1 = WA_ACCOUNTGL-ASSET_NO
         AND ANLN2 = WA_ACCOUNTGL-SUB_NUMBER.
      IF SY-SUBRC = 0.
        SELECT SINGLE
               A~KTANSW
          INTO WA_ACCOUNTGL-GL_ACCOUNT
          FROM T095 AS A INNER JOIN T001 AS B ON B~KTOPL = A~KTOPL
         WHERE A~KTOGR = L_KTOGR
           AND B~BUKRS = WA_UPLOAD-BUKRS.
        IF SY-SUBRC = 0.
          CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
            EXPORTING
              INPUT  = WA_ACCOUNTGL-GL_ACCOUNT
            IMPORTING
              OUTPUT = WA_ACCOUNTGL-GL_ACCOUNT.
        ENDIF.
      ENDIF.
      WA_ACCOUNTGL-ITEM_TEXT = WA_UPLOAD-SGTXT."行项目文本
      WA_ACCOUNTGL-ALLOC_NMBR = WA_UPLOAD-ZUONR."分配号
      WA_ACCOUNTGL-TAX_CODE = WA_UPLOAD-MWSKZ."税码
      APPEND WA_ACCOUNTGL TO IT_ACCOUNTGL.

      CLEAR: WA_EXTENSION2.
      CLEAR: WA_ZBAPI_ACC_BSEG.
      WA_EXTENSION2-STRUCTURE = 'ZBAPI_ACC_BSEG'.
      WA_ZBAPI_ACC_BSEG-POSNR = L_ITEM.
      WA_ZBAPI_ACC_BSEG-ANBWA = WA_UPLOAD-NEWBW.
      WA_EXTENSION2-VALUEPART1 = WA_ZBAPI_ACC_BSEG.
      APPEND WA_EXTENSION2 TO IT_EXTENSION2.

      CLEAR: WA_CURRENCYAMOUNT.
      WA_CURRENCYAMOUNT-ITEMNO_ACC = L_ITEM.
      WA_CURRENCYAMOUNT-CURRENCY = WA_UPLOAD-WAERS."货币码
      WA_CURRENCYAMOUNT-AMT_DOCCUR = WA_UPLOAD-WRBTR."金额
      APPEND WA_CURRENCYAMOUNT TO IT_CURRENCYAMOUNT.

*      IF WA_ACCOUNTGL-TAX_CODE IS NOT INITIAL.
*        CLEAR: IT_MWDAT.
*        I_BUKRS = WA_DOCUMENTHEADER-COMP_CODE.
*        I_MWSKZ = WA_ACCOUNTGL-TAX_CODE.
*        I_WAERS = WA_UPLOAD-WAERS."货币码
*        I_WRBTR = WA_UPLOAD-WRBTR."金额
*        CALL FUNCTION 'CALCULATE_TAX_FROM_GROSSAMOUNT'
*          EXPORTING
*            I_BUKRS                 = I_BUKRS
*            I_MWSKZ                 = I_MWSKZ
**           I_TXJCD                 = ' '
*            I_WAERS                 = I_WAERS
*            I_WRBTR                 = I_WRBTR
**           I_ZBD1P                 = 0
**           I_PRSDT                 =
**           I_PROTOKOLL             =
**           I_TAXPS                 =
**           I_ACCNT_EXT             =
**           IS_ENHANCEMENT          =
**         IMPORTING
**           E_FWNAV                 =
**           E_FWNVV                 =
**           E_FWSTE                 =
**           E_FWAST                 =
*          TABLES
*            T_MWDAT                 = IT_MWDAT
*          EXCEPTIONS
*            BUKRS_NOT_FOUND         = 1
*            COUNTRY_NOT_FOUND       = 2
*            MWSKZ_NOT_DEFINED       = 3
*            MWSKZ_NOT_VALID         = 4
*            ACCOUNT_NOT_FOUND       = 5
*            DIFFERENT_DISCOUNT_BASE = 6
*            DIFFERENT_TAX_BASE      = 7
*            TXJCD_NOT_VALID         = 8
*            NOT_FOUND               = 9
*            KTOSL_NOT_FOUND         = 10
*            KALSM_NOT_FOUND         = 11
*            PARAMETER_ERROR         = 12
*            KNUMH_NOT_FOUND         = 13
*            KSCHL_NOT_FOUND         = 14
*            UNKNOWN_ERROR           = 15
*            OTHERS                  = 16.
*        IF SY-SUBRC <> 0.
**          MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
**                  WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*        ENDIF.
*        IF IT_MWDAT IS NOT INITIAL.
*
*          LOOP AT IT_MWDAT INTO WA_MWDAT.
*            CLEAR: WA_CURRENCYAMOUNT.
*            WA_CURRENCYAMOUNT-ITEMNO_ACC = L_ITEM.
*            WA_CURRENCYAMOUNT-CURRENCY = WA_UPLOAD-WAERS."货币码
*            WA_CURRENCYAMOUNT-AMT_DOCCUR = WA_MWDAT-KAWRT."金额
*            APPEND WA_CURRENCYAMOUNT TO IT_CURRENCYAMOUNT.
*
*            ADD 1 TO L_ITEM.
*            CLEAR WA_ACCOUNTTAX.
*            WA_ACCOUNTTAX-ITEMNO_ACC = L_ITEM.
*            WA_ACCOUNTTAX-GL_ACCOUNT = WA_MWDAT-HKONT.
*            WA_ACCOUNTTAX-TAX_CODE = I_MWSKZ.
*            WA_ACCOUNTTAX-ACCT_KEY   = WA_MWDAT-KTOSL.
*            WA_ACCOUNTTAX-COND_KEY   = WA_MWDAT-KSCHL.
*            WA_ACCOUNTTAX-TAXJURCODE = WA_MWDAT-TXJCD.
*            WA_ACCOUNTTAX-TAXJURCODE_DEEP  = WA_MWDAT-TXJCD_DEEP.
*            WA_ACCOUNTTAX-TAXJURCODE_LEVEL = WA_MWDAT-TXJLV.
**            WA_ACCOUNTTAX-ITEMNO_TAX = L_ITEM - 1.
*            APPEND WA_ACCOUNTTAX TO IT_ACCOUNTTAX.
*
*            CLEAR WA_CURRENCYAMOUNT.
*            WA_CURRENCYAMOUNT-ITEMNO_ACC = L_ITEM.
*            WA_CURRENCYAMOUNT-CURRENCY   = I_WAERS.
*            WA_CURRENCYAMOUNT-AMT_DOCCUR = WA_MWDAT-WMWST.
*            WA_CURRENCYAMOUNT-AMT_BASE = WA_MWDAT-KAWRT."It's not the base, but gross amount
*            APPEND WA_CURRENCYAMOUNT TO IT_CURRENCYAMOUNT.
*
*          ENDLOOP.
*        ELSE.
*          CLEAR: WA_CURRENCYAMOUNT.
*          WA_CURRENCYAMOUNT-ITEMNO_ACC = L_ITEM.
*          WA_CURRENCYAMOUNT-CURRENCY = WA_UPLOAD-WAERS."货币码
*          WA_CURRENCYAMOUNT-AMT_DOCCUR = WA_UPLOAD-WRBTR."金额
*          APPEND WA_CURRENCYAMOUNT TO IT_CURRENCYAMOUNT.
*        ENDIF.
*      ELSE.
*        CLEAR: WA_CURRENCYAMOUNT.
*        WA_CURRENCYAMOUNT-ITEMNO_ACC = L_ITEM.
*        WA_CURRENCYAMOUNT-CURRENCY = WA_UPLOAD-WAERS."货币码
*        WA_CURRENCYAMOUNT-AMT_DOCCUR = WA_UPLOAD-WRBTR."金额
*        APPEND WA_CURRENCYAMOUNT TO IT_CURRENCYAMOUNT.
*      ENDIF.
    ELSEIF WA_UPLOAD-KUNNR IS NOT INITIAL.
      CLEAR: WA_ACCOUNTRECEIVABLE.
      WA_ACCOUNTRECEIVABLE-ITEMNO_ACC = L_ITEM.
      WA_ACCOUNTRECEIVABLE-CUSTOMER = WA_UPLOAD-KUNNR."客户
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          INPUT  = WA_ACCOUNTRECEIVABLE-CUSTOMER
        IMPORTING
          OUTPUT = WA_ACCOUNTRECEIVABLE-CUSTOMER.
      WA_ACCOUNTRECEIVABLE-SP_GL_IND = WA_UPLOAD-UMSKZ."特别总帐标识
      WA_ACCOUNTRECEIVABLE-ITEM_TEXT = WA_UPLOAD-SGTXT."行项目文本
      WA_ACCOUNTRECEIVABLE-ALLOC_NMBR = WA_UPLOAD-ZUONR."分配号
      APPEND WA_ACCOUNTRECEIVABLE TO IT_ACCOUNTRECEIVABLE.

      CLEAR: WA_CURRENCYAMOUNT.
      WA_CURRENCYAMOUNT-ITEMNO_ACC = L_ITEM.
      WA_CURRENCYAMOUNT-CURRENCY = WA_UPLOAD-WAERS."货币码
      WA_CURRENCYAMOUNT-AMT_DOCCUR = WA_UPLOAD-WRBTR."金额
      APPEND WA_CURRENCYAMOUNT TO IT_CURRENCYAMOUNT.
    ELSEIF WA_UPLOAD-LIFNR IS NOT INITIAL.
      CLEAR: WA_ACCOUNTPAYABLE.
      WA_ACCOUNTPAYABLE-ITEMNO_ACC = L_ITEM.
      WA_ACCOUNTPAYABLE-VENDOR_NO = WA_UPLOAD-LIFNR."供应商
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          INPUT  = WA_ACCOUNTPAYABLE-VENDOR_NO
        IMPORTING
          OUTPUT = WA_ACCOUNTPAYABLE-VENDOR_NO.
      WA_ACCOUNTPAYABLE-SP_GL_IND = WA_UPLOAD-UMSKZ."特别总帐标识
      WA_ACCOUNTPAYABLE-ITEM_TEXT = WA_UPLOAD-SGTXT."行项目文本
      WA_ACCOUNTPAYABLE-ALLOC_NMBR = WA_UPLOAD-ZUONR."分配号
      APPEND WA_ACCOUNTPAYABLE TO IT_ACCOUNTPAYABLE.

      CLEAR: WA_CURRENCYAMOUNT.
      WA_CURRENCYAMOUNT-ITEMNO_ACC = L_ITEM.
      WA_CURRENCYAMOUNT-CURRENCY = WA_UPLOAD-WAERS."货币码
      WA_CURRENCYAMOUNT-AMT_DOCCUR = WA_UPLOAD-WRBTR."金额
      APPEND WA_CURRENCYAMOUNT TO IT_CURRENCYAMOUNT.
    ENDIF.

    AT END OF ZID.
      CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
        EXPORTING
          DOCUMENTHEADER    = WA_DOCUMENTHEADER
*         CUSTOMERCPD       =
*         CONTRACTHEADER    =
        IMPORTING
          OBJ_TYPE          = G_OBJ_TYPE
          OBJ_KEY           = G_OBJ_KEY
          OBJ_SYS           = G_OBJ_SYS
        TABLES
          ACCOUNTGL         = IT_ACCOUNTGL
          ACCOUNTRECEIVABLE = IT_ACCOUNTRECEIVABLE
          ACCOUNTPAYABLE    = IT_ACCOUNTPAYABLE
          ACCOUNTTAX        = IT_ACCOUNTTAX
          CURRENCYAMOUNT    = IT_CURRENCYAMOUNT
*         CRITERIA          =
*         VALUEFIELD        =
*         EXTENSION1        =
          RETURN            = IT_RETURN
*         PAYMENTCARD       =
*         CONTRACTITEM      =
          EXTENSION2        = IT_EXTENSION2
*         REALESTATE        =
*         ACCOUNTWT         =
        .
      READ TABLE IT_RETURN INTO WA_RETURN
                       WITH KEY TYPE = 'S'
                                ID = 'RW'
                                NUMBER = '605'.
      IF SY-SUBRC = 0.
        G_ZTYPE = 'S'.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            WAIT = 'X'
*         IMPORTING
*           RETURN        =
          .
      ELSE.
        G_ZTYPE = 'E'.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
*         IMPORTING
*           RETURN        =
          .
      ENDIF.

      LOOP AT IT_RETURN INTO WA_RETURN.
        IF G_ZMESSAGE IS INITIAL.
          G_ZMESSAGE = WA_RETURN-MESSAGE.
        ELSE.
          CONCATENATE G_ZMESSAGE
                      '|-|'
                      WA_RETURN-MESSAGE
                      INTO
                      G_ZMESSAGE.
        ENDIF.
      ENDLOOP.

      LOOP AT IT_UPLOAD ASSIGNING <FS_UPLOAD>
                             WHERE ZID = WA_UPLOAD-ZID.
        <FS_UPLOAD>-ZTYPE = G_ZTYPE.
        <FS_UPLOAD>-ZMESSAGE = G_ZMESSAGE.
        CASE G_ZTYPE.
          WHEN 'S'.
            <FS_UPLOAD>-ICON = ICON_GREEN_LIGHT.
          WHEN 'E'.
            <FS_UPLOAD>-ICON = ICON_RED_LIGHT.
          WHEN OTHERS.
            <FS_UPLOAD>-ICON = ICON_RED_LIGHT.
        ENDCASE.
      ENDLOOP.
    ENDAT.

  ENDLOOP.
ENDFORM.                    " FRM_ZDO

二、非BAPI字段付值增强

BADI:ACC_DOCUMENT        METHOD:CHANGE

  METHOD IF_EX_ACC_DOCUMENT~CHANGE.
    DATA:
      LS_EXTENSION      TYPE BAPIPAREX,
      LV_EXT_VALUE(960) TYPE C,
      LS_ACCIT          TYPE ACCIT,
      L_REF             TYPE REF TO DATA.

    FIELD-SYMBOLS:
      <FS_STRUC> TYPE ANY,
      <FS_FIELD> TYPE ANY.

    SORT C_EXTENSION2 BY STRUCTURE.

    LOOP AT C_EXTENSION2 INTO LS_EXTENSION.
      AT NEW STRUCTURE.
        CREATE DATA L_REF TYPE (LS_EXTENSION-STRUCTURE).
        ASSIGN L_REF->* TO <FS_STRUC>.
      ENDAT.

      CONCATENATE LS_EXTENSION-VALUEPART1 LS_EXTENSION-VALUEPART2
      LS_EXTENSION-VALUEPART3 LS_EXTENSION-VALUEPART4
      INTO LV_EXT_VALUE.

      MOVE LV_EXT_VALUE TO <FS_STRUC>.

      CASE LS_EXTENSION-STRUCTURE.
        WHEN 'ZBAPI_ACC_BKPF'.
          LOOP AT C_ACCIT INTO LS_ACCIT.
            MOVE-CORRESPONDING <FS_STRUC> TO LS_ACCIT.
            MODIFY C_ACCIT FROM LS_ACCIT.
          ENDLOOP.
        WHEN OTHERS.
          ASSIGN COMPONENT 'POSNR' OF STRUCTURE <FS_STRUC> TO <FS_FIELD>.

          READ TABLE C_ACCIT INTO LS_ACCIT WITH KEY POSNR = <FS_FIELD>.
          IF SY-SUBRC IS INITIAL.
            MOVE-CORRESPONDING <FS_STRUC> TO LS_ACCIT.
            MODIFY C_ACCIT FROM LS_ACCIT INDEX SY-TABIX.
          ENDIF.
      ENDCASE.
    ENDLOOP.


  ENDMETHOD.

三、数据模版

凭证序号1111
参照制费录入制费录入制费录入制费录入
凭证类型SASASASA
公司代码CHENCHENCHENCHEN
凭证日期20230530202305302023053020230530
过帐日期20230530202305302023053020230530
货币码CNYCNYCNYCNY
凭证抬头文本制费录入制费录入制费录入制费录入
总帐科目1001010000660902000166090200036609020004
主资产编码    
子资产编码    
客户    
供应商    
特别总帐标志    
资产交易类型    
金额-240001000080006000
数量    
成本中心 CHEN1003CHEN1003CHEN1003
利润中心    
WBS    
订单    
税码    
行项目文本制费录入制费录入制费录入制费录入
分配字段    
原因代码    

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈送平er

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值