DATA: ls_documentheader TYPE bapiache09,
lv_key TYPE bapiache09-obj_key,
ls_accountgl TYPE bapiacgl09,
lt_accountgl TYPE TABLE OF bapiacgl09 WITH HEADER LINE,
ls_currencyamount TYPE bapiaccr09,
lt_currencyamount TYPE TABLE OF bapiaccr09 WITH HEADER LINE,
-
ls_accountreceivable TYPE BAPIACAR09 ,
-
lt_accountreceivable TYPE TABLE OF BAPIACAR09 WITH HEADER LINE, ls_accountpayable TYPE bapiacap09, lt_accountpayable TYPE TABLE OF bapiacap09 WITH HEADER LINE,
-
ls_accounttax TYPE BAPIACTX09 ,
-
lt_accounttax TYPE TABLE OF BAPIACTX09 WITH HEADER LINE, lt_return TYPE TABLE OF bapiret2 WITH HEADER LINE, lw_return TYPE bapiret2,
-
LS_EXTENSION2 TYPE BAPIPAREX, lt_extension2 TYPE TABLE OF bapiparex WITH HEADER LINE .
*&—WORKAREA FOR ZEXTEN
DATA: wa_zexten LIKE zsfi6900001.
DATA:BEGIN OF ls_msg,
type TYPE bapi_mtype, "
message TYPE bapi_msg, "
END OF ls_msg.
DATA:lt_msg LIKE TABLE OF ls_msg,
ls_bseg TYPE bseg,
ls_bkpf TYPE bkpf,
lv_mitkz TYPE skb1-mitkz,
lv_mndid TYPE sepa_mndid,
lv_wrbtr TYPE zfit00090-wrbtr,
lv_lines TYPE buzei .
READ TABLE it_bseg INTO ls_bseg INDEX 1.
*验证是否已创建过会计凭证
CLEAR: ls_msg,ls_bkpf.
SELECT SINGLE bukrs belnr gjahr FROM bkpf INTO CORRESPONDING FIELDS OF ls_bkpf
WHERE xref1_hd = iw_bkpf-xref1_hd
AND xblnr = iw_bkpf-xblnr
AND stblg = ‘’.
IF sy-subrc = 0.
CLEAR ls_msg.
ls_msg-type = ‘S’.
CONCATENATE ls_bkpf-belnr ls_bkpf-bukrs ls_bkpf-gjahr INTO ls_msg-message.
APPEND ls_msg TO lt_msg.
e_json = /ui2/cl_json=>serialize( data = lt_msg ).
RETURN.
ENDIF.
*财务凭证抬头结构,存放凭证类型、日期等
-
抬头
ls_documentheader-header_txt = iw_bkpf-bktxt. "抬头文本
ls_documentheader-username = sy-uname."接口账号 -
ls_documentheader-doc_type = IW_BKPF-BLART. "凭证类型
ls_documentheader-doc_type = ‘KZ’. "凭证类型
ls_documentheader-comp_code = iw_bkpf-bukrs."公司
ls_documentheader-doc_date = iw_bkpf-bldat ."凭证日期
ls_documentheader-pstng_date = iw_bkpf-budat ."过账日期 -
ls_documentheader-fisc_year = IW_BKPF-GJAHR."年度
ls_documentheader-fisc_year = iw_bkpf-budat+0(4)."年度
-
ls_documentheader-fis_period = IW_BKPF-MONAT."期间
ls_documentheader-fis_period = iw_bkpf-budat+4(2)."期间
ls_documentheader-ref_doc_no = iw_bkpf-xblnr . "付款单号IF iw_bkpf-waers = ‘CNY’.
iw_bkpf-waers = ‘RMB’.
ENDIF.CLEAR ls_bseg.
-
存放与总账相关的行项目信息。
READ TABLE it_bseg INTO ls_bseg INDEX 1.
ls_accountgl-itemno_acc = ls_bseg-buzei. "行项目号
SELECT SINGLE hkont hbkid hktid
FROM t012k
INTO (ls_accountgl-gl_account,ls_accountgl-housebankid,ls_accountgl-housebankacctid)
WHERE bnkn2 = ls_bseg-mndid.
*原因代码根据款项用途
SELECT SINGLE banka
FROM ztrt00020 INTO ls_bseg-rstgr
WHERE bnkn2 = ls_bseg-grant_nbr.
*利润中心取值
CONCATENATE ‘9’ iw_bkpf-bukrs ‘00001’ INTO ls_bseg-prctr.
ls_accountgl-profit_ctr = ls_bseg-prctr . "利润中心
ls_accountgl-value_date = ls_bseg-valut . "起息日 起息日=收款日期
ls_accountgl-alloc_nmbr = ls_bseg-zuonr . "付款日期或票据号
ls_accountgl-item_text = ls_bseg-sgtxt . "文本=
ls_accountgl-bus_area = ‘1000’. "业务范围 改为固定值
ls_accountgl-ref_key_3 = ls_bseg-xref3. "备用
APPEND ls_accountgl TO lt_accountgl .
CLEAR ls_accountgl .
-
总账
ls_currencyamount-itemno_acc = ls_bseg-buzei . "行项目号
ls_currencyamount-currency = iw_bkpf-waers. "货币单位
ls_currencyamount-amt_doccur = ls_bseg-wrbtr * ( -1 ). "合计金额
APPEND ls_currencyamount TO lt_currencyamount .
CLEAR ls_currencyamount . -
& EXTENSION2 扩展字段增强部分
wa_zexten-posnr = ls_bseg-buzei. "凭证行项目
wa_zexten-rstgr = ls_bseg-rstgr. "凭证行项目原因代码
wa_zexten-xref1_hd = iw_bkpf-xref1_hd. "流水号
lt_extension2-structure = ‘ZSFI6900001’.
lt_extension2-valuepart1 = wa_zexten.
APPEND lt_extension2.
CLEAR ls_bseg.
-
存放与供应商相关的行项目信息,可设定特殊总账标识。
LOOP AT it_bseg INTO ls_bseg WHERE buzei > 1.CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT’
EXPORTING
input = ls_bseg-lifnr
IMPORTING
output = ls_bseg-lifnr.
*利润中心取值
CONCATENATE ‘9’ iw_bkpf-bukrs ‘00001’ INTO ls_bseg-prctr.
CLEAR lv_mitkz.
SELECT SINGLE mitkz INTO lv_mitkz
FROM skb1
WHERE bukrs = iw_bkpf-bukrs
AND saknr = ls_bseg-hkont.
IF lv_mitkz IS INITIAL.
ls_accountgl-itemno_acc = ls_bseg-buzei. "行项目号
ls_accountgl-gl_account = ls_bseg-hkont . "总账科目
ls_accountgl-profit_ctr = ls_bseg-prctr . "利润中心
ls_accountgl-value_date = ls_bseg-valut . "起息日 起息日=收款日期
ls_accountgl-alloc_nmbr = ls_bseg-zuonr . "付款日期或票据号
ls_accountgl-item_text = ls_bseg-sgtxt . "文本=
" ls_accountgl-bus_area = ‘1000’. "业务范围 改为固定值 20220425 WeiZB
ls_accountgl-bus_area = lv_gsber. "业务范围 20230130 WeiZB
ls_accountgl-ref_key_3 = ls_bseg-xref3. "备用
APPEND ls_accountgl TO lt_accountgl .
CLEAR ls_accountgl .
ELSE.
ls_accountpayable-itemno_acc = ls_bseg-buzei. "行项目号
ls_accountpayable-vendor_no = ls_bseg-lifnr . "供应商编码
ls_accountpayable-sp_gl_ind = ls_bseg-umskz."特殊总账标识 A标识预付款,空是应付款 5标识供应商质保金
ls_accountpayable-gl_account = ls_bseg-hkont . "总账科目
ls_accountpayable-bus_area = ‘1000’. "业务范围 改为固定值
ls_accountpayable-bline_date = ls_bseg-zfbdt."付款基准日前=
ls_accountpayable-profit_ctr = ls_bseg-prctr."利润中心
ls_accountpayable-item_text = ls_bseg-sgtxt. "付款单文本
ls_accountpayable-alloc_nmbr = ls_bseg-zuonr ."合同号
ls_accountpayable-ref_key_3 = ls_bseg-xref3. "备用
APPEND ls_accountpayable TO lt_accountpayable .
CLEAR ls_accountpayable .
ENDIF. -
供应商
ls_currencyamount-itemno_acc = ls_bseg-buzei . "行项目号
ls_currencyamount-currency = iw_bkpf-waers. "货币单位
ls_currencyamount-amt_doccur = ls_bseg-wrbtr. "合计金额
APPEND ls_currencyamount TO lt_currencyamount .
CLEAR ls_currencyamount .
ENDLOOP.
CALL FUNCTION ‘BAPI_ACC_DOCUMENT_POST’
EXPORTING
documentheader = ls_documentheader
IMPORTING
-
OBJ_TYPE = obj_key = lv_key
-
OBJ_SYS =
TABLES
accountgl = lt_accountgl -
ACCOUNTRECEIVABLE = lt_accountreceivable accountpayable = lt_accountpayable currencyamount = lt_currencyamount return = lt_return extension2 = lt_extension2.
-
S 成功,E 错误,W 警告,I 信息,A 中断
LOOP AT lt_return INTO lw_return WHERE type = ‘E’
OR type = ‘A’.
EXIT.
ENDLOOP. -
创建成功
IF sy-subrc <> 0.
CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
EXPORTING
wait = ‘X’.CLEAR ls_msg.
ls_msg-type = ‘S’.
ls_msg-message = lv_key.
APPEND ls_msg TO lt_msg.
ELSE.
CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.
LOOP AT lt_return INTO lw_return WHERE type = 'E'.
CLEAR ls_msg.
ls_msg-type = 'E'.
ls_msg-message = lw_return-message.
APPEND ls_msg TO lt_msg.
ENDLOOP.
ENDIF.
****测试数据
*IW_BKPF-FRATH = ‘30.00’.
*IW_BKPF-BKTXT = ‘人工测试G6数据’.
*IW_BKPF-BLART = ‘KZ’.
*IW_BKPF-BUKRS = ‘5100’.
*IW_BKPF-BLDAT = ‘20200820’.
*IW_BKPF-BUDAT = ‘20200820’.
*IW_BKPF-GJAHR = ‘2020’.
*IW_BKPF-MONAT = ‘08’.
*IW_BKPF-XBLNR = ‘SQ5100200820003’."G6付款申请单号
*IW_BKPF-XREF1_HD = ‘2020082008’."G6付款流水号
*IW_BKPF-WAERS = ‘RMB’.
*
*
*LS_BSEG-BUZEI = ‘001’.
*LS_BSEG-PRZNR = ‘P1’.
*LS_BSEG-MNDID = ‘AP’.
*LS_BSEG-GRANT_NBR = ‘001001002’.
*LS_BSEG-VALUT = ‘20200820’.
*LS_BSEG-ZUONR = ‘748399207372782829’.
*LS_BSEG-SGTXT = ‘测试项目文本’ .
*LS_BSEG-GSBER = ‘1000’ .
*LS_BSEG-XREF3 = ‘总备用’.
*
*LS_BSEG-WRBTR = ‘10.00’.
**LS_BSEG-RSTGR = ‘1A1’.
*APPEND LS_BSEG TO IT_BSEG.
*
*LS_BSEG-BUZEI = ‘002’.
*LS_BSEG-GRANT_NBR = ‘001001002’.
*LS_BSEG-LIFNR = ‘0040007214’.
*LS_BSEG-GSBER = ‘1000’.
*LS_BSEG-ZUONR = ‘’ .
*LS_BSEG-ZFBDT = ‘20200820’ .
**LS_BSEG-PRCTR = ‘9520000005’ .
*LS_BSEG-SGTXT = ‘测试项目文本’ .
*LS_BSEG-XREF3 = ‘备用’ .
*
*LS_BSEG-WRBTR = ‘10.00’.
*APPEND LS_BSEG TO IT_BSEG.