‎2008 Dec 22 9:43 AM
Hi,
How to use BAPI_ACC_DOCUMENT_POST FM with multiple posting keys with Duplicate posting keys for Accounts Receivables and Account payable.Any body please provide some sample code.
Best Regards,
Surendar Reddy.
‎2008 Dec 22 11:19 AM
LOOP AT IST_ITEM INTO WA_ITEM.
*---read header data
CLEAR WA_HEADER.
READ TABLE IST_HEADER INTO WA_HEADER INDEX SY-TABIX.
WA_BAPI_HEADER-BUS_ACT = 'RFBU'.
WA_BAPI_HEADER-USERNAME = SY-UNAME.
WA_BAPI_HEADER-HEADER_TXT = WA_HEADER-BKTXT.
WA_BAPI_HEADER-COMP_CODE = WA_HEADER-BUKRS.
CONCATENATE WA_HEADER-BLDAT6(4) WA_HEADER-BLDAT3(2) WA_HEADER-BLDAT+0(2)
INTO WA_BAPI_HEADER-DOC_DATE.
CONCATENATE WA_HEADER-BUDAT6(4) WA_HEADER-BUDAT3(2) WA_HEADER-BUDAT+0(2)
INTO WA_BAPI_HEADER-PSTNG_DATE.
WA_BAPI_HEADER-DOC_TYPE = WA_HEADER-BLART.
WA_BAPI_HEADER-REF_DOC_NO = WA_HEADER-XBLNR.
L_ITEMNO = L_ITEMNO + 1.
L_TABIX = SY-TABIX + 1.
L_PERCT = ( SY-TABIX / L_LINE ) * 100.
*---read the posting key data
CLEAR WA_TBSL.
READ TABLE IST_TBSL INTO WA_TBSL WITH KEY BSCHL = WA_ITEM-NEWBS.
IF SY-SUBRC NE 0.
MESSAGE E398(00) WITH TEXT-N01 WA_ITEM-NEWBS TEXT-N05 ''.
ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_ITEM-HKONT
IMPORTING
OUTPUT = WA_ITEM-HKONT.
CASE WA_TBSL-KOART.
WHEN 'D'. " Customer
MOVE L_ITEMNO TO WA_CUST-ITEMNO_ACC.
MOVE WA_ITEM-HKONT TO WA_CUST-CUSTOMER.
CONCATENATE WA_ITEM-ZFBDT6(4) WA_ITEM-ZFBDT3(2) WA_ITEM-ZFBDT+0(2)
INTO WA_CUST-BLINE_DATE.
MOVE WA_ITEM-ZUONR TO WA_CUST-ALLOC_NMBR.
MOVE WA_ITEM-SGTXT TO WA_CUST-ITEM_TEXT.
MOVE WA_ITEM-BUPLA TO WA_CUST-BUSINESSPLACE.
MOVE WA_ITEM-SECCO TO WA_CUST-SECTIONCODE.
MOVE WA_ITEM-MWSKZ TO WA_CUST-TAX_CODE.
IF WA_ITEM-NEWUM NE SPACE.
MOVE WA_ITEM-NEWUM TO WA_CUST-SP_GL_IND.
ENDIF.
MOVE WA_ITEM-PRCTR TO WA_CUST-PROFIT_CTR.
move WA_ITEM-NEWBS to WA_CUST-BSCHL.
MOVE '2MPL' TO WA_CUST-BUS_AREA.
APPEND WA_CUST TO IST_CUST.
CLEAR WA_CUST.
WHEN 'K'. " Vendor
MOVE L_ITEMNO TO WA_VEND-ITEMNO_ACC.
MOVE WA_ITEM-HKONT TO WA_VEND-VENDOR_NO.
CONCATENATE WA_ITEM-ZFBDT6(4) WA_ITEM-ZFBDT3(2) WA_ITEM-ZFBDT+0(2)
INTO WA_CUST-BLINE_DATE.
MOVE WA_ITEM-ZUONR TO WA_VEND-ALLOC_NMBR.
MOVE WA_ITEM-SGTXT TO WA_VEND-ITEM_TEXT.
MOVE WA_ITEM-BUPLA TO WA_VEND-BUSINESSPLACE.
MOVE WA_ITEM-SECCO TO WA_VEND-SECTIONCODE.
MOVE WA_ITEM-MWSKZ TO WA_VEND-TAX_CODE.
IF WA_ITEM-NEWUM NE SPACE.
MOVE WA_ITEM-NEWUM TO WA_VEND-SP_GL_IND.
ENDIF.
MOVE WA_ITEM-PRCTR TO WA_VEND-PROFIT_CTR.
move WA_ITEM-NEWBS to WA_VEND-BSCHL.
MOVE '2MPL' TO WA_VEND-BUS_AREA.
APPEND WA_VEND TO IST_VEND.
CLEAR WA_VEND.
WHEN 'S'. " G/L
MOVE L_ITEMNO TO WA_GL-ITEMNO_ACC.
MOVE WA_ITEM-HKONT TO WA_GL-GL_ACCOUNT.
MOVE WA_ITEM-SGTXT TO WA_GL-ITEM_TEXT.
CONCATENATE WA_ITEM-VALUT6(4) WA_ITEM-VALUT3(2) WA_ITEM-VALUT+0(2)
INTO WA_GL-VALUE_DATE.
MOVE WA_ITEM-ZUONR TO WA_GL-ALLOC_NMBR.
MOVE WA_ITEM-MWSKZ TO WA_GL-TAX_CODE.
MOVE WA_ITEM-KOSTL TO WA_GL-COSTCENTER.
MOVE WA_ITEM-PRCTR TO WA_GL-PROFIT_CTR.
move WA_ITEM-NEWBS to WA_GL-BSCHL.
MOVE WA_ITEM-LIFNR TO WA_GL-VENDOR_NO.
MOVE WA_ITEM-EBELN TO WA_GL-PO_NUMBER.
MOVE WA_ITEM-EBELP TO WA_GL-PO_ITEM.
MOVE WA_ITEM-XREF3 TO WA_GL-REF_KEY_3.
MOVE '2MPL' TO WA_GL-BUS_AREA .
APPEND WA_GL TO IST_GL.
CLEAR WA_GL.
ENDCASE.
*---move corrency details
MOVE L_ITEMNO TO WA_CURR-ITEMNO_ACC.
MOVE 'INR' TO WA_CURR-CURRENCY.
CASE WA_TBSL-SHKZG.
WHEN 'S'.
MOVE WA_ITEM-WRBTR TO WA_CURR-AMT_DOCCUR.
WHEN 'H'.
MOVE WA_ITEM-WRBTR TO WA_CURR-AMT_DOCCUR.
WA_CURR-AMT_DOCCUR = WA_CURR-AMT_DOCCUR * -1.
ENDCASE.
L_WRBTR = L_WRBTR + WA_CURR-AMT_DOCCUR.
APPEND WA_CURR TO IST_CURR.
CLEAR WA_CURR.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_HEADER-HKONT
IMPORTING
OUTPUT = WA_HEADER-HKONT.
L_ITEMNO = L_ITEMNO + 1.
MOVE L_ITEMNO TO WA_GL-ITEMNO_ACC.
MOVE WA_HEADER-HKONT TO WA_GL-GL_ACCOUNT.
MOVE WA_HEADER-PRCTR TO WA_GL-PROFIT_CTR.
*---if total amount is greater than 0 then post doc
*---with 50 posting key or else with 40 posting key
IF L_WRBTR GE 0.
MOVE '50' TO WA_GL-BSCHL.
ELSE.
MOVE '40' TO WA_GL-BSCHL.
ENDIF.
APPEND WA_GL TO IST_GL.
CLEAR WA_GL.
L_WRBTR = L_WRBTR * -1.
MOVE L_ITEMNO TO WA_CURR-ITEMNO_ACC.
MOVE 'INR' TO WA_CURR-CURRENCY.
MOVE L_WRBTR TO WA_CURR-AMT_DOCCUR.
APPEND WA_CURR TO IST_CURR.
CLEAR WA_CURR.
CLEAR: L_ITEMNO, L_WRBTR.
BREAK AAB_MUNISH.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
DOCUMENTHEADER = WA_BAPI_HEADER
IMPORTING
OBJ_TYPE = G_OBJ_TYPE
OBJ_KEY = G_OBJ_KEY
OBJ_SYS = G_OBJ_SYS
TABLES
ACCOUNTGL = IST_GL
ACCOUNTRECEIVABLE = IST_CUST
ACCOUNTPAYABLE = IST_VEND
CURRENCYAMOUNT = IST_CURR
RETURN = IST_RETURN.
APPEND LINES OF IST_RETURN TO IST_LOG.
*---read first record of return messages as in that we will get
*---the status of processing
CLEAR WA_RETURN.
READ TABLE IST_RETURN INTO WA_RETURN INDEX 1.
IF WA_RETURN-NUMBER = '605'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
MESSAGE S398(00) WITH TEXT-N02 G_OBJ_KEY(10) TEXT-N03 ''.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
CLEAR: G_OBJ_TYPE, G_OBJ_KEY, G_OBJ_SYS,
IST_GL[], IST_CUST[], IST_VEND[], IST_CURR[], IST_RETURN[].
*---display progress indicator
L_TEXT = L_PERCT.
PERFORM PROGRESS_INDICATOR USING TEXT-005
L_TEXT
L_PERCT
''.
ENDLOOP.
hope this will help u
‎2008 Dec 22 11:19 AM
LOOP AT IST_ITEM INTO WA_ITEM.
*---read header data
CLEAR WA_HEADER.
READ TABLE IST_HEADER INTO WA_HEADER INDEX SY-TABIX.
WA_BAPI_HEADER-BUS_ACT = 'RFBU'.
WA_BAPI_HEADER-USERNAME = SY-UNAME.
WA_BAPI_HEADER-HEADER_TXT = WA_HEADER-BKTXT.
WA_BAPI_HEADER-COMP_CODE = WA_HEADER-BUKRS.
CONCATENATE WA_HEADER-BLDAT6(4) WA_HEADER-BLDAT3(2) WA_HEADER-BLDAT+0(2)
INTO WA_BAPI_HEADER-DOC_DATE.
CONCATENATE WA_HEADER-BUDAT6(4) WA_HEADER-BUDAT3(2) WA_HEADER-BUDAT+0(2)
INTO WA_BAPI_HEADER-PSTNG_DATE.
WA_BAPI_HEADER-DOC_TYPE = WA_HEADER-BLART.
WA_BAPI_HEADER-REF_DOC_NO = WA_HEADER-XBLNR.
L_ITEMNO = L_ITEMNO + 1.
L_TABIX = SY-TABIX + 1.
L_PERCT = ( SY-TABIX / L_LINE ) * 100.
*---read the posting key data
CLEAR WA_TBSL.
READ TABLE IST_TBSL INTO WA_TBSL WITH KEY BSCHL = WA_ITEM-NEWBS.
IF SY-SUBRC NE 0.
MESSAGE E398(00) WITH TEXT-N01 WA_ITEM-NEWBS TEXT-N05 ''.
ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_ITEM-HKONT
IMPORTING
OUTPUT = WA_ITEM-HKONT.
CASE WA_TBSL-KOART.
WHEN 'D'. " Customer
MOVE L_ITEMNO TO WA_CUST-ITEMNO_ACC.
MOVE WA_ITEM-HKONT TO WA_CUST-CUSTOMER.
CONCATENATE WA_ITEM-ZFBDT6(4) WA_ITEM-ZFBDT3(2) WA_ITEM-ZFBDT+0(2)
INTO WA_CUST-BLINE_DATE.
MOVE WA_ITEM-ZUONR TO WA_CUST-ALLOC_NMBR.
MOVE WA_ITEM-SGTXT TO WA_CUST-ITEM_TEXT.
MOVE WA_ITEM-BUPLA TO WA_CUST-BUSINESSPLACE.
MOVE WA_ITEM-SECCO TO WA_CUST-SECTIONCODE.
MOVE WA_ITEM-MWSKZ TO WA_CUST-TAX_CODE.
IF WA_ITEM-NEWUM NE SPACE.
MOVE WA_ITEM-NEWUM TO WA_CUST-SP_GL_IND.
ENDIF.
MOVE WA_ITEM-PRCTR TO WA_CUST-PROFIT_CTR.
move WA_ITEM-NEWBS to WA_CUST-BSCHL.
MOVE '2MPL' TO WA_CUST-BUS_AREA.
APPEND WA_CUST TO IST_CUST.
CLEAR WA_CUST.
WHEN 'K'. " Vendor
MOVE L_ITEMNO TO WA_VEND-ITEMNO_ACC.
MOVE WA_ITEM-HKONT TO WA_VEND-VENDOR_NO.
CONCATENATE WA_ITEM-ZFBDT6(4) WA_ITEM-ZFBDT3(2) WA_ITEM-ZFBDT+0(2)
INTO WA_CUST-BLINE_DATE.
MOVE WA_ITEM-ZUONR TO WA_VEND-ALLOC_NMBR.
MOVE WA_ITEM-SGTXT TO WA_VEND-ITEM_TEXT.
MOVE WA_ITEM-BUPLA TO WA_VEND-BUSINESSPLACE.
MOVE WA_ITEM-SECCO TO WA_VEND-SECTIONCODE.
MOVE WA_ITEM-MWSKZ TO WA_VEND-TAX_CODE.
IF WA_ITEM-NEWUM NE SPACE.
MOVE WA_ITEM-NEWUM TO WA_VEND-SP_GL_IND.
ENDIF.
MOVE WA_ITEM-PRCTR TO WA_VEND-PROFIT_CTR.
move WA_ITEM-NEWBS to WA_VEND-BSCHL.
MOVE '2MPL' TO WA_VEND-BUS_AREA.
APPEND WA_VEND TO IST_VEND.
CLEAR WA_VEND.
WHEN 'S'. " G/L
MOVE L_ITEMNO TO WA_GL-ITEMNO_ACC.
MOVE WA_ITEM-HKONT TO WA_GL-GL_ACCOUNT.
MOVE WA_ITEM-SGTXT TO WA_GL-ITEM_TEXT.
CONCATENATE WA_ITEM-VALUT6(4) WA_ITEM-VALUT3(2) WA_ITEM-VALUT+0(2)
INTO WA_GL-VALUE_DATE.
MOVE WA_ITEM-ZUONR TO WA_GL-ALLOC_NMBR.
MOVE WA_ITEM-MWSKZ TO WA_GL-TAX_CODE.
MOVE WA_ITEM-KOSTL TO WA_GL-COSTCENTER.
MOVE WA_ITEM-PRCTR TO WA_GL-PROFIT_CTR.
move WA_ITEM-NEWBS to WA_GL-BSCHL.
MOVE WA_ITEM-LIFNR TO WA_GL-VENDOR_NO.
MOVE WA_ITEM-EBELN TO WA_GL-PO_NUMBER.
MOVE WA_ITEM-EBELP TO WA_GL-PO_ITEM.
MOVE WA_ITEM-XREF3 TO WA_GL-REF_KEY_3.
MOVE '2MPL' TO WA_GL-BUS_AREA .
APPEND WA_GL TO IST_GL.
CLEAR WA_GL.
ENDCASE.
*---move corrency details
MOVE L_ITEMNO TO WA_CURR-ITEMNO_ACC.
MOVE 'INR' TO WA_CURR-CURRENCY.
CASE WA_TBSL-SHKZG.
WHEN 'S'.
MOVE WA_ITEM-WRBTR TO WA_CURR-AMT_DOCCUR.
WHEN 'H'.
MOVE WA_ITEM-WRBTR TO WA_CURR-AMT_DOCCUR.
WA_CURR-AMT_DOCCUR = WA_CURR-AMT_DOCCUR * -1.
ENDCASE.
L_WRBTR = L_WRBTR + WA_CURR-AMT_DOCCUR.
APPEND WA_CURR TO IST_CURR.
CLEAR WA_CURR.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_HEADER-HKONT
IMPORTING
OUTPUT = WA_HEADER-HKONT.
L_ITEMNO = L_ITEMNO + 1.
MOVE L_ITEMNO TO WA_GL-ITEMNO_ACC.
MOVE WA_HEADER-HKONT TO WA_GL-GL_ACCOUNT.
MOVE WA_HEADER-PRCTR TO WA_GL-PROFIT_CTR.
*---if total amount is greater than 0 then post doc
*---with 50 posting key or else with 40 posting key
IF L_WRBTR GE 0.
MOVE '50' TO WA_GL-BSCHL.
ELSE.
MOVE '40' TO WA_GL-BSCHL.
ENDIF.
APPEND WA_GL TO IST_GL.
CLEAR WA_GL.
L_WRBTR = L_WRBTR * -1.
MOVE L_ITEMNO TO WA_CURR-ITEMNO_ACC.
MOVE 'INR' TO WA_CURR-CURRENCY.
MOVE L_WRBTR TO WA_CURR-AMT_DOCCUR.
APPEND WA_CURR TO IST_CURR.
CLEAR WA_CURR.
CLEAR: L_ITEMNO, L_WRBTR.
BREAK AAB_MUNISH.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
DOCUMENTHEADER = WA_BAPI_HEADER
IMPORTING
OBJ_TYPE = G_OBJ_TYPE
OBJ_KEY = G_OBJ_KEY
OBJ_SYS = G_OBJ_SYS
TABLES
ACCOUNTGL = IST_GL
ACCOUNTRECEIVABLE = IST_CUST
ACCOUNTPAYABLE = IST_VEND
CURRENCYAMOUNT = IST_CURR
RETURN = IST_RETURN.
APPEND LINES OF IST_RETURN TO IST_LOG.
*---read first record of return messages as in that we will get
*---the status of processing
CLEAR WA_RETURN.
READ TABLE IST_RETURN INTO WA_RETURN INDEX 1.
IF WA_RETURN-NUMBER = '605'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
MESSAGE S398(00) WITH TEXT-N02 G_OBJ_KEY(10) TEXT-N03 ''.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
CLEAR: G_OBJ_TYPE, G_OBJ_KEY, G_OBJ_SYS,
IST_GL[], IST_CUST[], IST_VEND[], IST_CURR[], IST_RETURN[].
*---display progress indicator
L_TEXT = L_PERCT.
PERFORM PROGRESS_INDICATOR USING TEXT-005
L_TEXT
L_PERCT
''.
ENDLOOP.
hope this will help u
‎2008 Dec 22 1:02 PM
hi,
I am also facing the same problem, this BAPI doesn't have Posting key field.
I am not getting the clarity through this code can you please revrt with any other example on how to deal with posting key as I have to upload the data for transaction F-02 which will hit the GL account of the customer.
Regards
‎2008 Dec 23 6:19 AM
Hey All,
Im also working with this FM. in my flat file also have posting key, which is not in bapi,
but we can derive, using posting key we can find the Acct type.. for ex,
Acct receivable Acct type is 'C', Acct Payable Acct type is 'V', and GL Account Acct type is 'G'.
after we need to pass the values to relative table.
Thanks
Hema
‎2008 Dec 25 2:24 PM
Hi all,
Many many thanks for the suggestions and sample codes.I Written BDC Program for FB01.In this I used fast data entry button and my program working fine and it can be used for any number of line items(max 999) and any kind of posting keys.
Best Regards,
Surendar Reddy.