目录
一、程序原代码
*&---------------------------------------------------------------------*
*& 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.
三、数据模版
凭证序号 | 1 | 1 | 1 | 1 |
参照 | 制费录入 | 制费录入 | 制费录入 | 制费录入 |
凭证类型 | SA | SA | SA | SA |
公司代码 | CHEN | CHEN | CHEN | CHEN |
凭证日期 | 20230530 | 20230530 | 20230530 | 20230530 |
过帐日期 | 20230530 | 20230530 | 20230530 | 20230530 |
货币码 | CNY | CNY | CNY | CNY |
凭证抬头文本 | 制费录入 | 制费录入 | 制费录入 | 制费录入 |
总帐科目 | 1001010000 | 6609020001 | 6609020003 | 6609020004 |
主资产编码 | ||||
子资产编码 | ||||
客户 | ||||
供应商 | ||||
特别总帐标志 | ||||
资产交易类型 | ||||
金额 | -24000 | 10000 | 8000 | 6000 |
数量 | ||||
成本中心 | CHEN1003 | CHEN1003 | CHEN1003 | |
利润中心 | ||||
WBS | ||||
订单 | ||||
税码 | ||||
行项目文本 | 制费录入 | 制费录入 | 制费录入 | 制费录入 |
分配字段 | ||||
原因代码 |