Skip to Content
Technical Articles
Author's profile photo Srikanth Kamparaju

Document posting using BAPI_ACC_DOCUMENT_POST with tax and updating payment terms after posting


BDC (Batch Data Communication) call transactions are used to post and update the documents as a background jobs. In SAP S4HANA some transactions are obsolete, and some are not. The obsolete BDC transactions needs to be replaced with BAPI’s or Function modules. 

In this blog, without using BDC’s we will try to post a vendor document through BAPI_ACC_DOCUMENT_POST along with TAX amount. Right after posting we will add a piece of code to update the payment terms of vendor.


The BAPI which we are going to use is used for posting invoices of customer and Vendor. We will use the below.

Vendor transaction details for posting.

Header Data
Document Date Document Type Company Code Posting Date Reference Fiscal Year Fiscal Period
20230814 DT 1000 20230814 Reference 2023 5
Item Data
Posting Key Account Amount Tax Amount Cost Center Tax Code Currency
31 859634 192 CCC
40 6783521 160 32 576924 VT CCC

The transaction with posting key 31 indictees credit for vendor and 40 indicates debit to general ledger(G/L). We have to make sure that we maintain relevant sign for amount according to its posting key.


Program to post the vendor document:

DATA: it_item_gl       TYPE TABLE OF bapiacgl09,   "G/L Items
      it_item_vi       TYPE TABLE OF bapiacap09,   "Vendor Items
      it_item_currency TYPE TABLE OF bapiaccr09,   "Currency items
      it_item_tax      TYPE TABLE OF bapiactx09,   "TAX account items
      it_return        TYPE TABLE OF bapiret2.     "Return messages

DATA: wa_item_gl       TYPE bapiacgl09,
      wa_item_vi       TYPE bapiacap09,
      wa_item_currency TYPE bapiaccr09,
      wa_header        TYPE bapiache09,
      wa_item_tax      TYPE bapiactx09.

DATA: d_belnr   TYPE bseg-belnr,
      wa_accchg TYPE accchg,
      it_accchg TYPE fdm_t_accchg.

wa_header-username = sy-uname.
wa_header-doc_date = '20230814'.
wa_header-doc_type     = 'DT'.    " Document Type
wa_header-comp_code    = '1000'.  " Company code
wa_header-pstng_date = '20230814'.
wa_header-fisc_year    = '2023' .
wa_header-fis_period   = '05'.
wa_header-ref_doc_no = 'Reference'.

wa_item_vi-itemno_acc   = 1.
wa_item_currency-itemno_acc = 1.
wa_item_currency-amt_doccur = '-192.00'.   " Posting key 31
wa_item_vi-vendor_no = '0000859634'.       " Vendor Account
wa_item_vi-pmnttrms = '*'.                 " Payment terms
wa_item_currency-currency_iso  = 'CCC'.

APPEND:   wa_item_vi TO it_item_vi,
          wa_item_currency TO it_item_currency.
CLEAR wa_item_currency.

wa_item_gl-itemno_acc   = 2.
wa_item_currency-itemno_acc = 2.
wa_item_gl-tax_code    = 'VT'.
wa_item_gl-fisc_year    = '2023' .
wa_item_gl-gl_account = '0000083521'.      "G/L Account
wa_item_gl-costcenter  = '0000576924'.     "Cost Center
wa_item_currency-amt_doccur = '160.00'.    "Posting Key  40
wa_item_currency-currency_iso  = 'CCC'. 
APPEND:   wa_item_gl TO it_item_gl,
          wa_item_currency TO it_item_currency.
CLEAR wa_item_currency.

wa_item_tax-tax_code  = 'VT'.
wa_item_tax-itemno_acc  = 3.
wa_item_currency-itemno_acc = 3.
wa_item_currency-amt_doccur = '32.00'.   " Posting key 40
wa_item_currency-currency_iso  = 'CCC'.
wa_item_currency-amt_base  = '160'.
APPEND wa_item_tax  TO it_item_tax.
APPEND  wa_item_currency TO it_item_currency.

    documentheader = wa_header
    accountgl      = it_item_gl
    accountpayable = it_item_vi
    currencyamount = it_item_currency
    accounttax     = it_item_tax
    return         = it_return.

IF sy-subrc = 0.
      wait = 'X'.
  IF sy-msgno = 605.
    WRITE: 'Document ',sy-msgv2.

Let’s have a look how CURRENCYAMOUNT is getting filed. In a normal scenario it will have two line-items one for vendor and another for G/L entries. In this case it will have 3 line-times to post the invoice with tax amount.

The return table from BAPI will holds the details of successful posted and failure documents as
shown in below screenshot. the successful positing details will be saved in IT_RETURN table with message number 605.

After the Invoice got posted form BAPI, we can verify the same the posted invoice details form T-code FB03.

While filling the vendor details, we have given ” * ” for its payment terms values. By this the BAPI will read the payment term which is associated with the vendor used for posting. Below details are for vendor line-item for this posted document.

Now we will add the below piece of code to our existing code in after BAPI COMMIT section to update the payment terms of this posted document. For this we will be using the function module FI_DOCUMENT_CHANGE. This FM will need few input parameters such as document number, vendor account, fiscal year and company code. It is also required to pass a table which has the details of the field which we are updating.

DATA: d_belnr   TYPE bseg-belnr,
      wa_accchg TYPE accchg,
      it_accchg TYPE fdm_t_accchg.

IF sy-subrc = 0.
      wait = 'X'.
  IF sy-msgno = 605.
    MOVE sy-msgv2 TO d_belnr.
    WRITE: 'Document ',sy-msgv2.

    SELECT bukrs, belnr, gjahr, lifnr , zterm FROM bseg INTO @DATA(wa_bseg)
                           WHERE bukrs = @wa_header-comp_code
                             AND belnr = @d_belnr
                             AND gjahr = @wa_header-fisc_year
                             AND koart = 'K'.
    wa_accchg-fdname = 'ZTERM'.
    wa_accchg-oldval = wa_bseg-zterm.
    wa_accchg-newval = 'Z098'.
    APPEND wa_accchg TO it_accchg.

        i_lifnr              = wa_bseg-lifnr
        i_bukrs              = wa_bseg-bukrs
        i_belnr              = wa_bseg-belnr
        i_gjahr              = wa_bseg-gjahr
        t_accchg             = it_accchg
        no_reference         = 1
        no_document          = 2
        many_documents       = 3
        wrong_input          = 4
        overwrite_creditcard = 5
        OTHERS               = 6.
    IF sy-subrc = 0.
      MESSAGE 'Document payment term is updated' TYPE 'I'.
      MESSAGE 'Document payment is not updated' TYPE 'I'.

After the execution of program, we can verify the payment term of document form the same T-code FB03 for vender line item. Payment term of our document is updated as below.


We have successfully posted a vendor invoice along with tax amount without using the BDC. Right after posting the Payment terms of the invoice is updated to new one. Along with Vendor invoices, this BAPI can be used to post general Ledger Financial transactions and Customer Invoices.

Assigned Tags

      1 Comment
      You must be Logged on to comment or reply to a post.
      Author's profile photo Gaurav Sharma
      Gaurav Sharma

      good one.