‎2007 Sep 13 8:11 PM
MY INTERNAL TABLES ARE :
TABLE FOR INTERNAL CUSTOMER.
DATA: BEGIN OF T_ICUSTOMER OCCURS 0,
BUKRS LIKE BKPF-BUKRS, "COMPANY
BELNR LIKE BKPF-BELNR, "ACC.DOCUMENT NUMBER
GJAHR LIKE BKPF-GJAHR, "FISCAL YEAR
MONAT LIKE BKPF-MONAT, "FISCAL PERIOD
EBELN LIKE EKKO-EBELN, "DOCUMENT NUMBER
KUNNR LIKE LIKP-KUNNR,"DEALER
KUNNR LIKE EKPO-KUNNR, "INTERNL DEALER NUMBER
HKONT LIKE BSEG-HKONT, "G/L ACCOUT NUMBER
KOSTL LIKE BSEG-KOSTL, "COST CENTRE NUMBER
END OF T_ICUSTOMER.
table to pass data to bapi header
DATA: BEGIN OF STR_BAPI_HDR,
TCODE LIKE SY-TCODE, " VALUE 'RFBU'
USERNAME LIKE SY-UNAME,
BUKRS LIKE BSEG-BUKRS,
DOC_DATE LIKE SY-DATUM ,
PSTNG_DATE LIKE SY-DATUM,
YEAR LIKE BSEG-GJAHR,
DOCTYPE LIKE BKPF-BLART, " VALUE 'ZZ',
BELNR LIKE BKPF-BELNR,
END OF STR_BAPI_HDR.
table for debit/credit data of a dealer
DATA: BEGIN OF T_ITEM_DATA OCCURS 0,
BELNR LIKE BSEG-BELNR," DOCUMENT NUMBER
BSCHL LIKE BSEG-BSCHL," POSTING KEY
SHKZG LIKE BSEG-SHKZG," DEBIT/CREDIT INDICATOR
WRBTR LIKE BSEG-WRBTR," AMOUNT
PSWSL LIKE BSEG-PSWSL," CURRENCY
HKONT LIKE BSEG-HKONT," G/L ACCOUNT
KUNNR LIKE BSEG-KUNNR," DEALER
PRCTR LIKE BSEG-PRCTR," PROFIT CENTRE
END OF T_ITEM_DATA.
table to pass data to bapiacgl09
DATA: T_ACCOUNTGL TYPE STANDARD TABLE OF BAPIACGL09,
WA_ACCOUNTGL TYPE BAPIACGL09.
*table to pass data to bapiaccr09
DATA: T_CURRENCYAMOUNT TYPE STANDARD TABLE OF BAPIACCR09,
WA_CURRENCYAMOUNT TYPE BAPIACCR09.
NOW I NEED TO PASS DATA TO BAPI 'BAPI_ACC_DOCUMENT_POST".
SO I CONSTRUCTED THE STRUCTURE AND TABLES TO PASS TO THE BAPI AS FOLLOWS:
LOOP AT T_ICUSTOMER.
SELECTING HEADER DATA VALUES TO PASS TO STRUCTURE BAPIACHE09
CLEAR STR_BAPI_HDR.
STR_BAPI_HDR-TCODE = 'RFBU'.
STR_BAPI_HDR-USERNAME = SY-UNAME.
STR_BAPI_HDR-BUKRS = T_ICUSTOMER-BUKRS.
STR_BAPI_HDR-DOC_DATE = SY-DATUM.
STR_BAPI_HDR-PSTNG_DATE = SY-DATUM.
STR_BAPI_HDR-YEAR = T_ICUSTOMER-GJAHR.
STR_BAPI_HDR-DOCTYPE = 'ZZ'.
STR_BAPI_HDR-BELNR = T_ICUSTOMER-BELNR.
SELCETING DATA FROM BSEG
CLEAR T_ITEM_DATA.
REFRESH T_ITEM_DATA.
SELECT BELNR
BSCHL
SHKZG
WRBTR
PSWSL
HKONT
KUNNR
PRCTR
FROM BSEG
INTO CORRESPONDING FIELDS OF TABLE T_ITEM_DATA
WHERE BELNR = T_ICUSTOMER-BELNR.
ITEMNO_ACC = 1.
LOOP AT T_ITEM_DATA.
*declare a variable here to pass to item tab..
IF T_ITEM_DATA-BSCHL = '31' AND
T_ITEM_DATA-SHKZG = 'H'. " IF CREDITING THE INVENTORY
CONCATENATE TEXT T_ICUSTOMER-EBELN INTO ITEM_TEXT.
WA_ACCOUNTGL-ITEMNO_ACC = ITEMNO_ACC.
WA_ACCOUNTGL-GL_ACCOUNT = T_ICUSTOMER-HKONT.
WA_ACCOUNTGL-ITEM_TEXT = ITEM_TEXT.
WA_ACCOUNTGL-COSTCENTER = T_ICUSTOMER-KOSTL.
WA_ACCOUNTGL-DE_CRE_IND = 's'.
WA_CURRENCYAMOUNT-ITEMNO_ACC = ITEMNO_ACC.
WA_CURRENCYAMOUNT-CURRENCY = T_ITEM_DATA-PSWSL.
WA_CURRENCYAMOUNT-CURRENCY_ISO = T_ITEM_DATA-PSWSL.
WA_CURRENCYAMOUNT-AMT_DOCCUR = T_ITEM_DATA-WRBTR.
APPEND WA_ACCOUNTGL TO T_ACCOUNTGL.
APPEND WA_CURRENCYAMOUNT TO T_CURRENCYAMOUNT.
CLEAR: WA_ACCOUNTGL,WA_CURRENCYAMOUNT.
ELSEIF T_ITEM_DATA-BSCHL = '99' AND
T_ITEM_DATA-SHKZG = 'S'.
WA_ACCOUNTGL-ITEMNO_ACC = ITEMNO_ACC.
WA_ACCOUNTGL-GL_ACCOUNT = T_ITEM_DATA-HKONT.
WA_ACCOUNTGL-PROFIT_CTR = T_ITEM_DATA-PRCTR.
WA_ACCOUNTGL-DE_CRE_IND = 'H'.
WA_CURRENCYAMOUNT-ITEMNO_ACC = ITEMNO_ACC.
WA_CURRENCYAMOUNT-CURRENCY = T_ITEM_DATA-PSWSL.
WA_CURRENCYAMOUNT-CURRENCY_ISO = T_ITEM_DATA-PSWSL.
WA_CURRENCYAMOUNT-AMT_DOCCUR = T_ITEM_DATA-WRBTR.
APPEND WA_ACCOUNTGL TO T_ACCOUNTGL.
APPEND WA_CURRENCYAMOUNT TO T_CURRENCYAMOUNT.
CLEAR: WA_ACCOUNTGL,WA_CURRENCYAMOUNT.
ENDIF.
ITEMNO_ACC = ITEMNO_ACC + 1.
ENDLOOP.
NOW I CALL THE BAPI AND PASS THESE STRUCTURE AND TABLE:
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
documentheader = STR_BAPI_HDR
CUSTOMERCPD =
CONTRACTHEADER =
IMPORTING
OBJ_TYPE =
OBJ_KEY =
OBJ_SYS =
tables
ACCOUNTGL = T_ACCOUNTGL
ACCOUNTRECEIVABLE =
ACCOUNTPAYABLE =
ACCOUNTTAX =
currencyamount = T_CURRENCYAMOUNT
CRITERIA =
VALUEFIELD =
EXTENSION1 =
return =
PAYMENTCARD =
CONTRACTITEM =
.
NOW I WANT TO CHECK IF THE DOCUMENT IS POSTED OR NOT.SO I NEED TO CONSTRUCT THE TABLE RETURN....
CAN ANY ONE HELP ME IN CONSTRUCTING THE TABLE AND HOW TO CHECK IF IT IS SUCCESSFULL OR NOTAND DO THE NECESSARY POST PROCESSING..I.E. CALL THE REURN VALUE INTO
THE PROGRAM AND DO THE POST PROCESSING..
ENDLOOP.
‎2007 Sep 13 8:32 PM
Try:
DATA: BEGIN OF return OCCURS 0.
INCLUDE STRUCTURE bapiret2.
DATA: END OF return.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
documentheader = str_bapi_hdr
TABLES
accountgl = t_accountgl
currencyamount = t_currencyamount
return = return.
LOOP AT return.
WRITE: /001 return-message.
ENDLOOP.
Rob
‎2007 Sep 13 10:47 PM
and can u tell me what to do next..that is how to commit the bapi.is it necessary to explicitly commit the bapi..
thanks,
challa.
‎2007 Sep 14 2:37 PM
I guess this is what you want:
DATA: BEGIN OF return OCCURS 0.
INCLUDE STRUCTURE bapiret2.
DATA: END OF return.
DATA: do_commit.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
documentheader = str_bapi_hdr
TABLES
accountgl = t_accountgl
currencyamount = t_currencyamount
return = return.
CLEAR do_commit.
LOOP AT return..
WRITE: /001 return-message.
IF return-type = 'S'.
do_commit = 'X'.
ENDIF.
ENDLOOP.
IF NOT do_commit IS INITIAL.
CLEAR return.
REFRESH return.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'
IMPORTING
return = return.
ENDIF.Rob