SAP 会计凭证带税码过账

使用函数BAPI_ACC_DOCUMENT_POST带税码过账时,该函数本身不支持计算税额,与 FB01 手工过账不同,BAPI 不包括 “Automatically Calculate Tax” 功能,税的科目和金额要提前确定好。注意,税行 ACCOUNTTAX 表参数的每一行,要与 CURRENCYAMOUNT参数进行关联。

1.手动传入税额
DATA:DOCUMENTHEADER TYPE BAPIACHE09.
DATA:OBJ_KEY TYPE BAPIACHE09-OBJ_KEY.
DATA:
ACCOUNTGL TYPE TABLE OF BAPIACGL09 WITH HEADER LINE, "BAPI接口凭证行项目参数(内表)
ACCOUNTGL_TMP TYPE TABLE OF BAPIACGL09 WITH HEADER LINE, "BAPI接口凭证行项目参数(内表)
CURRENCYAMOUNT TYPE TABLE OF BAPIACCR09 WITH HEADER LINE, "BAPI接口凭证行项目数值(内表)
ACCOUNTRECEIVABLE TYPE TABLE OF BAPIACAR09 WITH HEADER LINE, "BAPI接口凭证行项目应收科目数据(客户内表)
ACCOUNTTAX TYPE TABLE OF BAPIACTX09 WITH HEADER LINE,
CRITERIA TYPE TABLE OF BAPIACKEC9 WITH HEADER LINE, "BAPI接口凭证行项目获利段数据(内表)
RETURN TYPE TABLE OF BAPIRET2 WITH HEADER LINE, "BAPI接口凭证日志数据(内表)
EXTENSION1 TYPE TABLE OF BAPIACEXTC WITH HEADER LINE, "BAPI接口凭证扩展字段数据(内表)
EXTENSION2 TYPE TABLE OF BAPIPAREX WITH HEADER LINE, "BAPI接口凭证扩展2字段数据(内表)
ACCOUNTPAYABLE TYPE TABLE OF BAPIACAP09 WITH HEADER LINE, "BAPI接口凭证行凭证行项目应付科目数据(供应商内表)
ACCOUNTPAYABLE_TMP TYPE TABLE OF BAPIACAP09 WITH HEADER LINE. "BAPI接口凭证行凭证行项目应付科目数

DOCUMENTHEADER-BUS_ACT = ‘RFBU’.

  • DOCUMENTHEADER-OBJ_TYPE = ‘BKPFF’.
    DOCUMENTHEADER-USERNAME = SY-UNAME.
    DOCUMENTHEADER-DOC_DATE = SY-DATUM.
    DOCUMENTHEADER-PSTNG_DATE = SY-DATUM.
    DOCUMENTHEADER-DOC_TYPE = ‘SA’.
    DOCUMENTHEADER-COMP_CODE = ‘5101’.
    *DOCUMENTHEADER-HEADER_TXT = ‘OA’&& <FS_LOG_H>-ZNUM.

"1 总额

ACCOUNTPAYABLE-ITEMNO_ACC = 1." * 10.
ACCOUNTPAYABLE-VENDOR_NO = ‘0099000273’."FU_LINE-LIFNR. "供应商
*ACCOUNTPAYABLE-GL_ACCOUNT = ‘2241090101’."FU_LINE-HKONT. "总账科目
*ACCOUNTPAYABLE-TAX_CODE = ‘J1’. "税码
ACCOUNTPAYABLE-COMP_CODE = ‘5101’.
ACCOUNTPAYABLE-PROFIT_CTR = ‘P500000001’.
APPEND ACCOUNTPAYABLE.
CLEAR ACCOUNTPAYABLE.
CURRENCYAMOUNT-ITEMNO_ACC = ‘0000000001’.
CURRENCYAMOUNT-CURR_TYPE = ‘00’.
CURRENCYAMOUNT-CURRENCY = ‘CNY’.
CURRENCYAMOUNT-AMT_DOCCUR = ‘117-’.
APPEND CURRENCYAMOUNT.
CLEAR:CURRENCYAMOUNT.

"税后行
ACCOUNTGL-ITEMNO_ACC = ‘0000000002’.
ACCOUNTGL-GL_ACCOUNT = ‘6600070402’.
ACCOUNTGL-TAX_CODE = ‘J1’.
ACCOUNTGL-COSTCENTER = ‘5101990010’.
ACCOUNTGL-PROFIT_CTR = ‘P500000001’.
*ACCOUNTGL-ITEMNO_TAX = 1.
APPEND ACCOUNTGL.
CLEAR:ACCOUNTGL.
*ACCOUNTGL-TAXJURCODE = ‘PA0011000’.
CURRENCYAMOUNT-ITEMNO_ACC = ‘0000000002’.
CURRENCYAMOUNT-CURR_TYPE = ‘00’.
CURRENCYAMOUNT-CURRENCY = ‘CNY’.
CURRENCYAMOUNT-AMT_DOCCUR = ‘100’. "税后行金额
APPEND CURRENCYAMOUNT.
CLEAR:CURRENCYAMOUNT.

*税 在复杂的情况下,还需要指定条件码 (condition key)
ACCOUNTTAX-ITEMNO_ACC = ‘0000000003’.
ACCOUNTTAX-TAX_CODE = ‘J1’.
*ACCOUNTTAX-ACCT_KEY = ‘VST’.
*ACCOUNTTAX-COND_KEY = ‘MWVS’.
*ACCOUNTTAX-TAXJURCODE = ‘PA0000000’.
*ACCOUNTTAX-TAXJURCODE_DEEP = ‘PA0011000’.
*ACCOUNTTAX-TAXJURCODE_LEVEL = ‘1’.
*ACCOUNTTAX-ITEMNO_TAX = 1.
APPEND ACCOUNTTAX.
CLEAR:ACCOUNTTAX.
CURRENCYAMOUNT-ITEMNO_ACC = ‘0000000003’.
CURRENCYAMOUNT-CURR_TYPE = ‘00’.
CURRENCYAMOUNT-CURRENCY = ‘CNY’.
CURRENCYAMOUNT-AMT_DOCCUR = ‘17’.
CURRENCYAMOUNT-AMT_BASE = ‘100’. ""税后行金额
APPEND CURRENCYAMOUNT.
CLEAR:CURRENCYAMOUNT.

CALL FUNCTION ‘BAPI_ACC_DOCUMENT_POST’
EXPORTING
DOCUMENTHEADER = DOCUMENTHEADER

  • CUSTOMERCPD =
  • CONTRACTHEADER =
    IMPORTING
  • OBJ_TYPE =
    OBJ_KEY = OBJ_KEY
  • OBJ_SYS =
    TABLES
    ACCOUNTGL = ACCOUNTGL
    ACCOUNTRECEIVABLE = ACCOUNTRECEIVABLE
    ACCOUNTPAYABLE = ACCOUNTPAYABLE
    ACCOUNTTAX = ACCOUNTTAX
    EXTENSION2 = EXTENSION2
    CURRENCYAMOUNT = CURRENCYAMOUNT
    CRITERIA = CRITERIA
    EXTENSION1 = EXTENSION1
    RETURN = RETURN.

COMMIT WORK.

凭证如下:
SAP 会计凭证带税码过账
注意:当有外币的时候,税行只有一行,但是金额有二行
FU_ITEMNO = FU_ITEMNO + 1.
“TAX
TAX-ITEMNO_ACC = FU_ITEMNO.” * 10.

  • TAX-GL_ACCOUNT = FU_LINE-HKONT.
    TAX-TAX_CODE = FU_LINE-MWSKZ.
    APPEND TAX.
    CLEAR TAX.

*-----> 外币
CURRENCYAMOUNT-ITEMNO_ACC = FU_ITEMNO." * 10.
CURRENCYAMOUNT-AMT_DOCCUR = LV_WRBTR.
CURRENCYAMOUNT-CURRENCY = FU_LINE-WAERS.

CURRENCYAMOUNT-CURR_TYPE = ‘00’.
IF NOT FU_LINE-KURSF IS INITIAL.
CURRENCYAMOUNT-EXCH_RATE = FU_LINE-KURSF.
ENDIF.

APPEND CURRENCYAMOUNT.
CLEAR CURRENCYAMOUNT.

*-----> 本位币
CURRENCYAMOUNT-ITEMNO_ACC = FU_ITEMNO." * 10.
CURRENCYAMOUNT-AMT_DOCCUR = LV_DMBTR.
CURRENCYAMOUNT-CURRENCY = LV_WAERS ."‘CNY’.
CURRENCYAMOUNT-CURR_TYPE = ‘10’.

IF NOT FU_LINE-KURSF IS INITIAL.
CURRENCYAMOUNT-EXCH_RATE = FU_LINE-KURSF.
ENDIF.

APPEND CURRENCYAMOUNT.
CLEAR CURRENCYAMOUNT.

2.函数计算税额

CALL FUNCTION ‘CALCULATE_TAX_FROM_GROSSAMOUNT’
EXPORTING
i_bukrs = ‘1000’  "公司代码
i_mwskz = ‘X1’ "税码
i_waers = ‘CNY’ "币种
i_wrbtr = amount "金额
TABLES
T_MWDAT = t_tax_info.

  • Now I loop the t_tax_info table in order to fill the ACCOUNTTAX and CURRENCYAMOUNT tables:LOOP AT t_tax_info.
    LOOP AT t_tax_info.
    CLEAR ls_accounttax.
    ls_accounttax-itemno_acc = sy-tabix + 1.
    ls_accounttax-tax_code = ‘X1’.
    ls_ACCOUNTTAX-ACCT_KEY = t_tax_info-KTOSL.
    ls_ACCOUNTTAX-COND_KEY = t_tax_info-KSCHL.
    ls_ACCOUNTTAX-TAXJURCODE = t_tax_info-TXJCD.
    ls_ACCOUNTTAX-TAXJURCODE_DEEP = t_tax_info-TXJCD_DEEP.
    ls_ACCOUNTTAX-TAXJURCODE_LEVEL = t_tax_info-TXJLV.
    APPEND ls_accounttax TO accounttax.

    CLEAR ls_currencyamount.
    ls_currencyamount-itemno_acc = ls_accounttax-itemno_acc.
    ls_currencyamount-currency = ‘CNY’.
    ls_currencyamount-amt_doccur = t_tax_info-wmwst.
    ls_currencyamount-amt_base = t_tax_info-KAWRT.  "<-----------It’s not the base, but gross amount
    APPEND ls_currencyamount TO currencyamount.

ENDLOOP.

参考资料:
SAP note: 2083799
SAP note: 626235
https://wiki.scn.sap.com/wiki/display/ERPFI/Tax+postings+with+accounting+BAPI