‎2006 Jun 26 7:56 AM
hai friends
i have created on BAPI to FBCJ
it is used to RECEIPT FROM BANK & PAYMENT TO BANK and its working fine
i have created one RFC to posting the data.
it posted only one record but i want to post all records. please rectified the error in the following conding
&----
*& Report ZFBCJ_TEST_POSTING *
*& *
&----
*& *
*& *
&----
Report ZFBCJ_TEST_POSTING .
DATA: it_advance TYPE TABLE OF ZFI_IBSADVANCE WITH HEADER LINE.
DATA: NODATA_CHARACTER VALUE '/'.
DATA: BDCDATA LIKE TABLE OF BDCDATA WITH HEADER LINE.
data: BDCDATA1 LIKE TABLE OF BDCDATA WITH HEADER LINE.
DATA: MESSTAB LIKE TABLE OF BDCMSGCOLL WITH HEADER LINE.
data: MESSTAB1 LIKE TABLE OF BDCMSGCOLL WITH HEADER LINE.
DATA: IT_TEMP LIKE TABLE OF ZTEMPFBCJ WITH HEADER LINE.
data: IT_TEMP type ZTEMPFBCJ.
data: docu_dat like bkpf-bldat.
data: docu_num like bkpf-xblnr.
select single * into it_temp from ZTEMPFBCJ where comp = 'X'.
*Capture whether a 'receipt' or 'payment' has been made in txn FBCJ
SELECT single xblnr bldat INtO (DOCU_NUM, DOCU_DAT) FROM bkpf
where xblnr = it_temp-REF_DOC_NO.
IF DOCU_NUM <> it_temp-ref_doc_no.
*LOOP AT IT_TEMP." WHERE COMP = 'X'.
IF NOT IT_TEMP-PAYMENTS IS INITIAL. "If a cash entry has been made
perform bdc_dynpro using 'SAPMFCJ0' '0100'.
perform bdc_field using 'BDC_OKCODE' '=CHCJ'.
perform bdc_field using 'BDC_CURSOR' 'ISCJ_E_POSTINGS-TRANSACT_NAME(01)'.
perform bdc_field using 'F_DISPLAY_PERIOD_LO' IT_TEMP-DOCUMENT_DATE.
perform bdc_field using 'F_DISPLAY_PERIOD_HI' IT_TEMP-DOCUMENT_DATE.
perform bdc_dynpro using 'SAPMFCJ0' '0050'.
perform bdc_field using 'BDC_CURSOR' 'TCJ_C_JOURNALS-CAJO_NUMBER'.
perform bdc_field using 'BDC_OKCODE' '=OK50'.
perform bdc_field using 'TCJ_C_JOURNALS-COMP_CODE' '1000'.
perform bdc_field using 'TCJ_C_JOURNALS-CAJO_NUMBER' IT_TEMP-CJ_NUMBER.
perform bdc_dynpro using 'SAPMFCJ0' '0100'.
perform bdc_field using 'BDC_CURSOR' 'ISCJ_E_POSTINGS-TRANSACT_NAME(01)'.
perform bdc_field using 'BDC_OKCODE' '=TODA'.
perform bdc_dynpro using 'SAPMFCJ0' '0100'.
perform bdc_field using 'BDC_OKCODE' '=SELE'.
perform bdc_field using 'BDC_CURSOR' 'ISCJ_E_POSTINGS-TRANSACT_NAME(01)'.
perform bdc_dynpro using 'SAPMFCJ0' '0100'.
perform bdc_field using 'BDC_OKCODE' '=POST_ALL'.
perform bdc_field using 'BDC_CURSOR' 'ISCJ_E_POSTINGS-TRANSACT_NAME(01)'.
*perform bdc_field using 'F_LINE_SEL'
CALL TRANSACTION 'FBCJ' USING BDCDATA
MODE 'A'
UPDATE 'A'
MESSAGES INTO MESSTAB.
----
*Values for 'MODE'
"A: show all dynpros
"E: show dynpro on error only
"N: do not display dynpro
*Values for 'UPDATE'
"S: synchronously
"A: asynchronously
"L: local
----
*
*UPDATE ZIBSCASHPAYMENTS SET PAYMT = ' '
WHERE CJ_NO = IT_TEMP-CJ_NUMBER.
ENDIF.
IF NOT IT_TEMP-RECEIPTS IS INITIAL. "If a cash entry has been made
perform bdc_dynpro1 using 'SAPMFCJ0' '0100'.
perform bdc_field1 using 'BDC_OKCODE' '=CHCJ'.
perform bdc_field1 using 'BDC_CURSOR' 'ISCJ_E_POSTINGS-TRANSACT_NAME(01)'.
perform bdc_field using 'F_DISPLAY_PERIOD_LO' IT_TEMP-DOCUMENT_DATE.
perform bdc_field using 'F_DISPLAY_PERIOD_HI' IT_TEMP-DOCUMENT_DATE.
perform bdc_dynpro1 using 'SAPMFCJ0' '0050'.
perform bdc_field1 using 'BDC_CURSOR' 'TCJ_C_JOURNALS-CAJO_NUMBER'.
perform bdc_field1 using 'BDC_OKCODE' '=OK50'.
perform bdc_field1 using 'TCJ_C_JOURNALS-COMP_CODE' '1000'.
perform bdc_field1 using 'TCJ_C_JOURNALS-CAJO_NUMBER' IT_TEMP-CJ_NUMBER.
perform bdc_dynpro1 using 'SAPMFCJ0' '0100'.
perform bdc_field1 using 'BDC_CURSOR' 'ISCJ_E_POSTINGS-TRANSACT_NAME(04)'.
perform bdc_field1 using 'BDC_OKCODE' '=TODA'.
perform bdc_field using 'F_DISPLAY_PERIOD_LO' IT_TEMP-DOCUMENT_DATE.
perform bdc_field using 'F_DISPLAY_PERIOD_HI' IT_TEMP-DOCUMENT_DATE.
perform bdc_dynpro1 using 'SAPMFCJ0' '0100'.
perform bdc_field1 using 'BDC_OKCODE' '=TAB2'.
perform bdc_field using 'F_DISPLAY_PERIOD_LO' IT_TEMP-DOCUMENT_DATE.
perform bdc_field using 'F_DISPLAY_PERIOD_HI' IT_TEMP-DOCUMENT_DATE.
perform bdc_field1 using 'BDC_CURSOR' 'ISCJ_E_POSTINGS-TRANSACT_NAME(04)'.
perform bdc_dynpro1 using 'SAPMFCJ0' '0100'.
perform bdc_field1 using 'BDC_OKCODE' '=SELE'.
perform bdc_field using 'F_DISPLAY_PERIOD_LO' IT_TEMP-DOCUMENT_DATE.
perform bdc_field using 'F_DISPLAY_PERIOD_HI' IT_TEMP-DOCUMENT_DATE.
perform bdc_field1 using 'BDC_CURSOR' 'ISCJ_E_POSTINGS-TRANSACT_NAME(06)'.
perform bdc_dynpro1 using 'SAPMFCJ0' '0100'.
perform bdc_field1 using 'BDC_OKCODE' '=POST'." '=POST_ALL'.
perform bdc_field using 'F_DISPLAY_PERIOD_LO' IT_TEMP-DOCUMENT_DATE.
perform bdc_field using 'F_DISPLAY_PERIOD_HI' IT_TEMP-DOCUMENT_DATE.
perform bdc_field1 using 'BDC_CURSOR' 'ISCJ_E_POSTINGS-TRANSACT_NAME(06)'.
CALL TRANSACTION 'FBCJ' USING BDCDATA1
MODE 'A'
UPDATE 'A'
MESSAGES INTO MESSTAB1.
*
*UPDATE ZIBSCASHPAYMENTS SET RECPT = ' '
WHERE CJ_NO = IT_TEMP-CJ_NUMBER.
ENDIF.
*UPDATE ZTEMPFBCJ SET COMP = ' ' WHERE REF_DOC_NO = IT_TEMP-REF_DOC_NO .
*ENDLOOP. "END OF LOOP AT IT_TEMP
ENDIF.
endselect.
----
Start new screen *
----
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM = PROGRAM.
BDCDATA-DYNPRO = DYNPRO.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA.
ENDFORM.
----
Insert field *
----
FORM BDC_FIELD USING FNAM FVAL.
IF fval <> NODATA_CHARACTER.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
APPEND BDCDATA.
ENDIF.
ENDFORM.
----
Insert field *
----
FORM BDC_NODATA USING P_NODATA.
NODATA_CHARACTER = P_NODATA.
ENDFORM.
----
Start new screen *
----
FORM BDC_DYNPRO1 USING PROGRAM DYNPRO.
CLEAR BDCDATA1.
BDCDATA1-PROGRAM = PROGRAM.
BDCDATA1-DYNPRO = DYNPRO.
BDCDATA1-DYNBEGIN = 'X'.
APPEND BDCDATA1.
ENDFORM.
----
Insert field *
----
FORM BDC_FIELD1 USING FNAM FVAL.
IF fval <> NODATA_CHARACTER.
CLEAR BDCDATA1.
BDCDATA1-FNAM = FNAM.
BDCDATA1-FVAL = FVAL.
APPEND BDCDATA1.
ENDIF.
ENDFORM.
thanks & regards
vallamuthu
‎2006 Jun 26 8:21 AM
Loop at IT_TEMP for all records to populate the bdcdata and then call the CALL TRANSACTION statement <b>outside</b> of the loop (at present I see it coded within the loop).
Doing this will call the FBCJ just once, to post all data, instead of posting once for each loop.
Hope this helps.
Sudha