SAP 会计凭证带税码过账

使用函数BAPI_ACC_DOCUMENT_POST带税码过账时,该函数本身不支持计算税额,与 FB01 手工过账不同,BAPI 不包括 “Automatically Calculate Tax” 功能,税的科目和金额要提前确定好。注意,税行 ACCOUNTTAX 表参数的每一行,要与 CURRENCYAMOUNT参数进行关联。还有种情况是每一行包括税和税后行之间没有关联关系,可能会报错message FF 711,具体错误为:系统不能计算现金折扣基本金额;请输入它。这种情况请看下文第三种情况。

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.

凭证如下:
在这里插入图片描述
注意:当有外币的时候,税行只有一行,但是金额有二行
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

3.只写入税码,不计算税额
当仅仅在凭证上写入税码,税后行和税行没有关联关系。有可能会报错FF 711
系统不能计算现金折扣基本金额;请输入它。
采用手工输入税额的方式在税行上输入税后行金额,也依然报FF711错误
CURRENCYAMOUNT-AMT_BASE = ‘100’. ""税后行金额。
此时需要在输入税码的行加上cshdis_ind为X。
代码如下:
本例只需要在税后行和税行加上税码
"税后行(不含税收入)
ls_accountgl-itemno_acc = lv_buzei."会计凭证行项目编号
ls_accountgl-gl_account = ‘6051010999’ ."总账科目
ls_accountgl-fisc_year = gv_budat+0(4)."会计年度
"A资产D客户K供应商M物料S总分类帐科目
ls_accountgl-acct_type = ‘S’."帐户类型

  • LS_ACCOUNTGL-VENDOR_NO = LS_ALV-LIFNR."供应商或债权人的帐号
    ls_accountgl-customer = ls_alv-kunnr."客户编号
    ls_accountgl-material_long = ls_alv-matnr."物料编号

  • LS_ACCOUNTGL-PROFIT_CTR = LS_ALV-KOSTL."利润中心
    ls_accountgl-profit_ctr = ‘F9SJ1’."利润中心
    ls_accountgl-comp_code = ls_alv-vkorg."公司代码
    ls_accountgl-tax_code = ‘X2’.
    ls_accountgl-cshdis_ind = ‘X’. "不参与计算税
    ls_accountgl-quantity = ls_alv-kwmeng.
    SELECT SINGLE meins INTO ls_accountgl-base_uom FROM mara WHERE matnr = ls_alv-matnr.
    APPEND ls_accountgl TO ct_accountgl.

  • 金额数据
    ls_amount-itemno_acc = lv_buzei."会计凭证行项目编号
    ls_amount-curr_type = ‘00’."货币和评估视图
    ls_amount-currency = ‘CNY’."货币码

  • ls_amount-amt_doccur = ‘88.96’
    APPEND ls_amount TO ct_amount.

    "销项税行
    ls_accountgl-itemno_acc = lv_buzei."会计凭证行项目编号
    ls_accountgl-gl_account = ‘2221010007’ ."总账科目
    ls_accountgl-fisc_year = gv_budat+0(4)."会计年度
    "A资产D客户K供应商M物料S总分类帐科目
    ls_accountgl-acct_type = ‘S’."帐户类型

  • LS_ACCOUNTGL-VENDOR_NO = LS_ALV-LIFNR."供应商或债权人的帐号

  • LS_ACCOUNTGL-CUSTOMER = LS_ALV-KUNNR."客户编号
    ls_accountgl-material_long = ls_alv-matnr."物料编号

  • LS_ACCOUNTGL-PROFIT_CTR = LS_ALV-KOSTL."利润中心
    ls_accountgl-comp_code = ls_alv-vkorg."公司代码
    ls_accountgl-tax_code = ‘X2’.
    ls_accountgl-cshdis_ind = ‘X’. "不参与计算税
    APPEND ls_accountgl TO ct_accountgl.

  • 金额数据
    ls_amount-itemno_acc = lv_buzei."会计凭证行项目编号
    ls_amount-curr_type = ‘00’."货币和评估视图
    ls_amount-currency = ‘CNY’."货币码
    ls_amount-amt_doccur = ‘5.34’.
    APPEND ls_amount TO ct_amount.

生成的凭证如下:
在这里插入图片描述
可参考NOTE 2462993 - FF711 error in BAPI_ACC_DOCUMENT_POST

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值