FICO 创建会计凭证并自动计算税率

13 篇文章 9 订阅
这篇博客展示了如何使用SAP编程语言创建会计凭证,并通过函数调用自动计算税率。示例代码详细解释了如何设置凭证头信息、处理应收项、货币和扩展信息,以及如何根据输入数据计算税额。最后,使用BAPI_ACC_DOCUMENT_POST函数调用进行凭证过账。
摘要由CSDN通过智能技术生成

自动计算税率:CALCULATE_TAX_FROM_GROSSAMOUNT

创建会计凭证:BAPI_ACC_DOCUMENT_POST

示例代码如下:

  DATA: LS_HEADER     TYPE BAPIACHE09.
  DATA: LV_KEY        TYPE BAPIACHE09-OBJ_KEY.
  DATA: LT_ACCOUNTGL  TYPE STANDARD TABLE OF BAPIACGL09.
  DATA: LS_ACCOUNTGL  TYPE BAPIACGL09.
  DATA: LT_RECEIVABLE TYPE STANDARD TABLE OF BAPIACAR09.
  DATA: LS_RECEIVABLE TYPE BAPIACAR09.
  DATA: LT_CURRENCY   TYPE STANDARD TABLE OF BAPIACCR09.
  DATA: LS_CURRENCY   TYPE BAPIACCR09.
  DATA: LT_EXTENSION  TYPE STANDARD TABLE OF BAPIPAREX.
  DATA: LS_EXTENSION  TYPE BAPIPAREX.
  DATA: LS_ACCOUNTTAX TYPE BAPIACTX09.
  DATA: LT_ACCOUNTTAX TYPE STANDARD TABLE OF BAPIACTX09.
  DATA: LT_RETURN     TYPE STANDARD TABLE OF BAPIRET2.
  DATA: LS_RETURN     TYPE BAPIRET2.
  DATA: LS_EXTEN      TYPE ZACCIT.
  DATA: LV_NUM        TYPE POSNR_ACC.
  DATA: LV_WRBTR      TYPE WRBTR.
  DATA: LV_TAX        TYPE WRBTR.
  DATA: LV_MESSAGE    TYPE STRING.

*head
    LS_HEADER-DOC_TYPE   =  LS_SELECT-BLART.
    LS_HEADER-USERNAME   =  SY-UNAME.
    LS_HEADER-REF_DOC_NO =  LS_SELECT-XBLNR.
    LS_HEADER-COMP_CODE  =  LS_SELECT-BUKRS.
    LS_HEADER-DOC_DATE   =  SY-DATUM.
    LS_HEADER-PSTNG_DATE =  SY-DATUM.
    LS_HEADER-FISC_YEAR  =  SY-DATUM+0(4).       "会会计年度
    LS_HEADER-FIS_PERIOD =  SY-DATUM+4(2).       "会计期间

*应收
      LV_NUM = LV_NUM + 1.
      LV_WRBTR = LV_WRBTR + GS_INVOICE-WRBTR.
      CLEAR:LS_RECEIVABLE.
      LS_RECEIVABLE-ITEMNO_ACC = LV_NUM.
      IF GS_INVOICE-HKONT IS NOT INITIAL.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            INPUT  = GS_INVOICE-HKONT
          IMPORTING
            OUTPUT = LS_RECEIVABLE-GL_ACCOUNT.
      ENDIF.
      IF GS_INVOICE-PRCTR IS NOT INITIAL .
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            INPUT  = GS_INVOICE-PRCTR
          IMPORTING
            OUTPUT = LS_RECEIVABLE-PROFIT_CTR.
      ENDIF.
      LS_RECEIVABLE-TAX_CODE   = GS_INVOICE-MWSKZ.
      APPEND LS_RECEIVABLE TO LT_RECEIVABLE.


      CLEAR:LS_CURRENCY.
      LS_CURRENCY-ITEMNO_ACC = LV_NUM.
      LS_CURRENCY-CURRENCY   =  GS_INVOICE-WAERS.
      LS_CURRENCY-AMT_DOCCUR = - GS_INVOICE-WRBTR.
      APPEND LS_CURRENCY TO LT_CURRENCY.

      CLEAR:LS_EXTENSION,LS_EXTEN.
      LS_EXTEN-POSNR             = LV_NUM.                           "凭证行项目
      LS_EXTEN-BSCHL             = GS_INVOICE-BSCHL.                    "凭证行项目过账码
      LS_EXTENSION-STRUCTURE    = 'ZACCIT'.
      LS_EXTENSION-VALUEPART1   = LS_EXTEN.
      APPEND LS_EXTENSION TO LT_EXTENSION.
*税
      IF GS_INVOICE-MWSKZ IS NOT INITIAL .
        CLEAR:LT_TAX_INFO.
        CALL FUNCTION 'CALCULATE_TAX_FROM_GROSSAMOUNT'
          EXPORTING
            I_BUKRS = GS_INVOICE-BUKRS
            I_MWSKZ = GS_INVOICE-MWSKZ
            I_WAERS = GS_INVOICE-WAERS
            I_WRBTR = GS_INVOICE-WRBTR
          TABLES
            T_MWDAT = LT_TAX_INFO.

        IF LT_TAX_INFO IS NOT INITIAL .
          LOOP AT LT_TAX_INFO INTO LS_TAX_INFO.
            CLEAR:LV_TAX.
            CLEAR:LS_ACCOUNTTAX.
            LV_NUM = LV_NUM + 1.
            LS_ACCOUNTTAX-ITEMNO_ACC  = LV_NUM.
            LS_ACCOUNTTAX-TAX_CODE     = GS_INVOICE-MWSKZ.
            LS_ACCOUNTTAX-ACCT_KEY   = LS_TAX_INFO-KTOSL.
            LS_ACCOUNTTAX-COND_KEY   = LS_TAX_INFO-KSCHL.
            LS_ACCOUNTTAX-TAXJURCODE = LS_TAX_INFO-TXJCD.
            LS_ACCOUNTTAX-TAXJURCODE_DEEP  = LS_TAX_INFO-TXJCD_DEEP.
            LS_ACCOUNTTAX-TAXJURCODE_LEVEL = LS_TAX_INFO-TXJLV.
            APPEND LS_ACCOUNTTAX TO LT_ACCOUNTTAX.

            CLEAR:LS_CURRENCY.
            LS_CURRENCY-ITEMNO_ACC = LV_NUM.
            LS_CURRENCY-CURRENCY   =  GS_INVOICE-WAERS.
            LV_TAX =   GS_INVOICE-WRBTR * ( LS_TAX_INFO-MSATZ / 100 ) .
            LS_CURRENCY-AMT_DOCCUR =  - LV_TAX.
            LS_CURRENCY-AMT_BASE   =  LS_TAX_INFO-KAWRT.
            APPEND LS_CURRENCY TO LT_CURRENCY.
            LV_WRBTR = LV_WRBTR + LV_TAX.
          ENDLOOP.



        ENDIF.
      ENDIF.
*合计
*all
    LV_NUM = LV_NUM + 1.
    CLEAR: LS_ACCOUNTGL.
    LS_ACCOUNTGL-ITEMNO_ACC = LV_NUM.
    IF LS_SELECT-KUNNR IS NOT INITIAL .
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          INPUT  = LS_SELECT-KUNNR
        IMPORTING
          OUTPUT = LS_ACCOUNTGL-CUSTOMER.
    ENDIF.

    LS_ACCOUNTGL-GL_ACCOUNT = '0000012000'.
    APPEND LS_ACCOUNTGL TO LT_ACCOUNTGL.

    CLEAR:LS_CURRENCY.
    LS_CURRENCY-ITEMNO_ACC =  LV_NUM.
    LS_CURRENCY-CURRENCY   =  LS_SELECT-WAERS.
    LS_CURRENCY-AMT_DOCCUR =  LV_WRBTR.
    APPEND LS_CURRENCY TO LT_CURRENCY.

    CLEAR:LS_EXTENSION,LS_EXTEN.
    LS_EXTEN-POSNR            = LV_NUM.                           "凭证行项目
    LS_EXTEN-BSCHL            = '01'.                    "凭证行项目过账码
    LS_EXTENSION-STRUCTURE    = 'ZACCIT'.
    LS_EXTENSION-VALUEPART1   = LS_EXTEN.
    APPEND LS_EXTENSION TO LT_EXTENSION.

    CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
      EXPORTING
        DOCUMENTHEADER    = LS_HEADER
*       CUSTOMERCPD       =
*       CONTRACTHEADER    =
      IMPORTING
        OBJ_KEY           = LV_KEY
      TABLES
        ACCOUNTGL         = LT_ACCOUNTGL
        ACCOUNTRECEIVABLE = LT_RECEIVABLE
*       ACCOUNTPAYABLE    = LT_PAY
        ACCOUNTTAX        = LT_ACCOUNTTAX
        CURRENCYAMOUNT    = LT_CURRENCY
*       CRITERIA          =
*       VALUEFIELD        =
*       EXTENSION1        =
        RETURN            = LT_RETURN
        EXTENSION2        = LT_EXTENSION.
    READ TABLE LT_RETURN INTO LS_RETURN WITH KEY TYPE = 'E'.
    IF SY-SUBRC = 0.
      LOOP AT LT_RETURN INTO LS_RETURN WHERE TYPE = 'E'.
        CONCATENATE LV_MESSAGE LS_RETURN-MESSAGE INTO LV_MESSAGE." 错误消息
      ENDLOOP.

     ENDIF.

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值