Enterprise Resource Planning Blogs by Members
Gain new perspectives and knowledge about enterprise resource planning in blog posts from community members. Share your own comments and ERP insights today!
cancel
Showing results for 
Search instead for 
Did you mean: 
coleti
Active Contributor
Dear SCN Friends,

I would like to share some tips related to the use of BAPI_ACC_DOCUMENT_POST and how to enlarge the use of this powerfull BAPI for Accounting Post.

For a long time, I've been using the BAPI_ACC_DOCUMENT_POST in my solutions. It is much better than the Transaction Call Technique (CALL_TRANSACTION of FB01 for example) for many reasons listed below:

  • You can simulate the document creation usine BAPI_ACC_DOCUMENT_CHECK before commit.



  • The Z Transaction Code is recorded in the BKPF table (Field TCODE) where you can see in the document display (FB03). So, you can track where the posting came from.



  • You don't have Screen Layout/Field Status errors like in Transaction Call.


Because of these reasons and many others I prefer to use the BAPI_ACC_DOCUMENT_POST.

In the previous months I've been researching about this BAPI to find some answers to the following questions that I have in mind:

 

  • Why is not possible to use the BAPI_ACC_DOCUMENT_POST to posting Noted Items and/or Special G/L Transactions ? There is no input parameter to determine the Special GL Indicators.



  • Why we can't change the Posting Key of the BAPI_ACC_DOCUMENT_POST ? We don´t have the posting key in the Parameter Tables to use. It determines automatically (40/50 for G/L Accounts, 31/21 for vendor sub-ledger, etc.)



  • Ledger Specific Posting


So, I found out some improvements to be done to enlarge the use of the BAPI_ACC_DOCUMENT_POST that I would like to share to you.

Let's get straight to the point, technical SAP allow us to Change the Accounting Document thru BAdI BADI_ACC_DOCUMENT (Interface IF_EX_ACC_DOCUMENT). In this BAdI there is a CHANGE Method. Check the parameters bellow:

 



 

As we can see, Header, Item, Currency and WHT tables are available there to be changed. These structures are much more complete than the input parameters of BAPI*.

* Note that the structure C_EXTENSION2 appears at this point.

 

I've been researching about the use of EXTENSION2 table, and I could not find an specific use of this structure in the FI accounting post. Many posts in the internet mention only the EXTENSION1.

 

In the processing of BAPI_ACC_DOCUMENT_POST table EXTENSION2 is not used, the Method Change of BAdI is called with the information in EXTENSION2 change the structures of the accounting document ACCHD, ACCIT, ACCCR, ACCWT, etc:

 



 

So, the idea here is to use the EXTENSION2 table in BAPI_ACC_DOCUMENT_POST and create some dynaimc ABAP code in the BAdI to add the additional information in the accounting tables.

 

We have set the logic of the EXTENSION2 as below:

 



 

STRUCTURE: The structure to be changed or added (ACCOUNTGL, ACCOUNTRECEIVABLE, ACCOUNTPAYABLE or DOCUMENTHEADER)

VALUEPART1: Line Item ID (ITEMNO_ACC)

VALUEPART2: The Structure/Table to be modified in the BADI (C_ACCHD, C_ACCIT, C_ACCCR, C_ACCWT)

VALUEPART3: The field of the Structure/Table to be modified in the BADI (C_ACCHD, C_ACCIT, C_ACCCR, C_ACCWT)

VALUEPART4: The value to be endered or change in the the Structure/Table to be modified in the BADI.

 

EXAMPLE


The example below, I will post an Customer Down Payment Request.

 

The following information/data should be informed in EXTENSION2 table to have the down payment request working:

 

C_ACCIT-BSTAT Document Status: 'S' for noted items

C_ACCIT-ZUMSK Target Special G/L Indicator: 'A' for Down Payment Request

C_ACCHD-GLVOR Business Transaction: 'RFST' FI: Statistical postings

 

The standards of BAPI_ACC_DOCUMENT_POST does not allow the modification on these parameters, so the BAdI changind the accounting data with the information in EXTENSION2 will help us. Check the parameters:

 



 

Check how the structure EXTENSION2 is filled:

 



 

Note that the DOCUMENTHEADER there is no VALUEPART1, the line item because is a change in the header of the document C_ACCHD table.

 

Let´s see how the BAdI source code is being designed to interpret that and change the tables.

 



 

Check the ABAP source code below that we developed to dynamicly interpret the EXTENSION2 and change the structures:

 
METHOD if_ex_acc_document~change.

*** Local variable
DATA: lt_extension2 TYPE STANDARD TABLE OF bapiparex.

*** Pointers
FIELD-SYMBOLS: <fs_table> TYPE STANDARD TABLE,
<fs_header> TYPE any,
<fs_field> TYPE any,
<fs_ext> TYPE bapiparex,
<fs_ext2> TYPE bapiparex.

*** Delete duplicate records
lt_extension2[] = c_extension2[].
SORT lt_extension2 BY structure ASCENDING
valuepart1 ASCENDING
valuepart2 ASCENDING.
DELETE ADJACENT DUPLICATES FROM lt_extension2 COMPARING structure
valuepart1
valuepart2.

*** Read all values to update
LOOP AT lt_extension2 ASSIGNING <fs_ext>.

*** Search inside a internal table
IF NOT <fs_ext>-valuepart1 IS INITIAL.

*** Get Table value
UNASSIGN <fs_table>.
ASSIGN (<fs_ext>-valuepart2) TO <fs_table>.

*** Found data
CHECK sy-subrc = 0.

*** Try get values
TRY.

*** Get table
READ TABLE <fs_table> WITH KEY
('BAPI_PARAM') = <fs_ext>-structure
('BAPI_TABIX') = <fs_ext>-valuepart1
ASSIGNING <fs_header>.

*** Found record - Update Fields
CHECK sy-subrc = 0.

*** Get all fields of same position
LOOP AT c_extension2 ASSIGNING <fs_ext2>
WHERE structure = <fs_ext>-structure
AND valuepart1 = <fs_ext>-valuepart1
AND valuepart2 = <fs_ext>-valuepart2.

*** Get field
UNASSIGN <fs_field>.
ASSIGN COMPONENT <fs_ext2>-valuepart3 OF STRUCTURE <fs_header>
TO <fs_field>.

*** Update new value
CHECK sy-subrc = 0.

<fs_field> = <fs_ext2>-valuepart4.

ENDLOOP.

*** Error at read table
CATCH cx_root.
UNASSIGN <fs_table>.
ENDTRY.

*** Header Case
ELSE.

*** Get Header
UNASSIGN <fs_header>.
ASSIGN (<fs_ext>-valuepart2) TO <fs_header>.

*** Found data
CHECK sy-subrc = 0.

*** Get all fields of same position
LOOP AT c_extension2 ASSIGNING <fs_ext2>
WHERE structure = <fs_ext>-structure
AND valuepart1 = <fs_ext>-valuepart1
AND valuepart2 = <fs_ext>-valuepart2.

*** Get field
UNASSIGN <fs_field>.
ASSIGN COMPONENT <fs_ext2>-valuepart3 OF STRUCTURE <fs_header>
TO <fs_field>.

*** Update new value
CHECK sy-subrc = 0.

<fs_field> = <fs_ext2>-valuepart4.

ENDLOOP.

ENDIF.

ENDLOOP.

ENDMETHOD.

 

In the end, the document is posted

 



 

This can be done with another fields or purpose, not only for Down Payment or Special G/L documents.

 

I never saw this kind of solution to enlarge the use of the BAPI_ACC_DOCUMENT_POST in other customers. So I hope I could share some help for you guys that is looking for something related to this post.

 

Please, if you will do something like this solutton, pay attention in the fields that you change in the accounting posting to not generate inconsistence postings. For example, in the special g/l transactions you must define Business Transaction as 'RFST' otherwise FAGLFLEXA and FAGLFLEXT will be filled when should not.

 

Test the scenarios carefully and enjoy it !

 

Best regards,

 

Gabriel Coleti

 

 

 

 

 

 
20 Comments
Former Member
0 Kudos
Hi Gabriel, looks very valuable, thanks for sharing!
mmcisme1
Active Contributor
0 Kudos
Very nice - I learned some more about a function module that I use.

Could you add the tag ABAP Development? I know more people than just me would like to read this!

Michelle
coleti
Active Contributor
0 Kudos
Thanks you Bastiaan 🙂
coleti
Active Contributor
Thanks you Michelle, I will do it. I should be useful for ABAP community as well.
former_member557751
Participant
Nice and useful blog. Just would like to let you know, that you can do ledger specific postings with passing acccounting principle in header structure of BAPI_ACC_DOCUMENT_POST.

Best regards, Tapio

 
coleti
Active Contributor
0 Kudos
Thanks Tapio, yes, you can do specific ledger posting as well. Another use that we do here is posting using the FM - Emarked Funds Object, since in the ACCOUNTGL parameter table doesn´t have the Emarked Funds/Item to post. This solutions has helped us a lot.
willianbozzi
Explorer
0 Kudos
Hi coleti, I have a requirement to create documents through this BAPI and the user wants it to also carry the "freely defined currencies" (at least one of them, fields ROCUR/OSL from ACDOCA). I found out that this BAPI supports freely definable currencies, and was just wondering if you have already implemented this before, or know how achieve this?

Many thanks!
0 Kudos
Hi Willian,

Were you able to find a solution to this ? i have the same requirement... I need to populate ACDOCA-QUANT1 field but, i am not able to find this field in ACCIT or any structure where i can transfer the value.
former_member555629
Discoverer
0 Kudos
Hi,

Very interesting, thank you for sharing it. I'm trying to figure out how to post recurring entries (FBD1)with the BAPI, I'm stuck how to populate the table BKDF. Any clue how to achieve this ? thx
cabral
Discoverer
0 Kudos
Good job my dear ! Top !!
former_member201275
Active Contributor
0 Kudos
Hi Gabriel,

Thank you for your post it was very helpful.

I really this post is some years old now, but I was hoping you might be able to advise me. I am using this BAPI however it is posting individual items instead of posting per document.

As i am Posting from the HR System to the FI System it should post at document Level and not per item because otherwise in FI we end up with thousands of entries!

Kind regards
Madjid
Participant
0 Kudos

thanks  coleti

Very good and very clear

 

Attention: if this do not update filed's of sap table ,

run report SAPFACCG to update the structure P_ACC (the report only runs the function FI_DOCUMENT_INIT and will not raise any messages or execution log).

 

Best Regards

carlostol
Explorer
Hi all,

I've added a ZZ field by creating APPEND structures to BKPF and ACCIT also.

Then I'm trying to update that field by using the same code snippet provided here fo BADI BADI_ACC_DOCUMENT but the field is not getting updated.

I'm able to update any standard field on BKPF using EXTENSION2 but it is not working for the ZZ field in append structure.

I've been debugging BAPI_ACC_DOCUMENT_POST all day but there is so many code and I'm not been able to find anything. I've also searched in all SCN and Gogle for this but found nothing. 😕

I've done this in the past in ECC with EXTENSION1 and BTE but now in S4HANA 1809 it doesn't work with the BADI or the BTE.

What am I missing here? Any help would be useful.

Thanks in advanced.

Regards.

Carlos
former_member316385
Discoverer
Disculpa, lo resolviste?.. de ser así como lo hiciste... saludos.
RahulKeshav
Active Contributor
Hi Gabriel,

 

Nice blog. Very helpful.

 

Thanks
densilgreen
Explorer
0 Kudos
Did you manage to use BAPI_ACC_DOCUMENT_POST to post recurring entries (FBD1)?
I have a similar requirement and I am looking a solution
0 Kudos
Please appending the same customer structure for  COBL_FI as well.

I solved my requirement in this way.
Wow dude this is so good!
tadeogaleano
Discoverer
0 Kudos
Thank you very much for the well explained information, I searched a lot how to use this efficiently and with your post I achieved it
maria_merino
Active Participant
0 Kudos
Hi, I know it's an old post, but I'm facing a similar issue triing to use this bapi for F-59 but I'm getting  some errors even though I have implemented the badi.

I think I'm filling wrong ACCOUNTRECEIVABLE structure, and getting this error: E RW 033 Interfaz RW: Saldo en moneda de transacción

Is this the structure I have to fill ? thnks!
Labels in this area