‎2007 Jul 11 5:44 AM
‎2007 Jul 11 5:49 AM
Hi.
Go to SHDB->Create New Recording->Give Transaction FB-01 and Record the inputs.
Later Save it and Transfer it to the program.
Your customization may be different so you have to record your own.
Reward if useful!
‎2007 Jul 11 5:51 AM
‎2007 Jul 11 5:53 AM
Below is the sample program
REPORT ZACRFII_EXCEL2SAP_UPLOAD.
************************************************************************
GLOBAL CONSTANTS
************************************************************************
DATA : GC_BDCSESSION(14) TYPE C VALUE ' ZFITRANBDC '.
************************************************************************
GLOBAL VARIABLES
************************************************************************
DATA : GV_MODE TYPE C,
GV_INDEX TYPE I,
GV_TO_UPLOAD TYPE I,
GV_COUNT_UNIQSNO TYPE I ,
GV_COUNT_SUCCESS TYPE I,
GV_COUNT_WARNINGS TYPE I,
GV_COUNT_ERRORS TYPE I,
GV_COUNT_INFO TYPE I,
GV_FLAG TYPE I,
GV_FLAGEND TYPE I,
GV_WARNING_FLAG TYPE C,
GV_REPL_TEXT(15) TYPE C,
GV_COUNT TYPE I,
GV_SUCS TYPE I,
GV_SNO TYPE I,
GV_CONVTDDATE TYPE SY-DATUM,
GV_POSTINGKEY TYPE I,
GV_POSTINGKEYCHR(2),
GV_BDCSCREEN1(12) TYPE C,
GV_BDCSCREEN2(12) TYPE C,
GV_SCREEN1(12) TYPE C,
GV_SCREEN2(12) TYPE C,
GV_SCREEN3(12) TYPE C,
GV_SCREEN4(12) TYPE C,
GV_SCREEN5(12) TYPE C,
GV_BDCSCREENNO1 TYPE I,
Start of Change - Ritesh Shrivastava - 20/03/2007
GV_BDCSCREENNO2 TYPE I,
End of Change - Ritesh Shrivastava - 20/03/2007
GV_SCREENNO1 TYPE I,
GV_SCREENNO2 TYPE I,
GV_SCREENNO3 TYPE I,
GV_SCREENNO4 TYPE I,
GV_SCREENNO5 TYPE I,
GV_DEBCRED TYPE C,
GV_DATE(10),
GV_TEMPREFNO LIKE BKPF-XBLNR,
GV_TEMPITEMTXT LIKE BSEG-SGTXT,
GV_TEMPDOCHDRTXT LIKE BKPF-BKTXT,
Start of Change - Ritesh Shrivastava - 15/03/2007
GV_AMT(16)." Commented out to add Exchg. Rate
GV_AMT(16),
GV_EXCHG(16).
End of Change - Ritesh Shrivastava - 15/03/2007
************************************************************************
GLOBAL INTERNAL TABLES
************************************************************************
DATA : GT_EXCEL LIKE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE.
INTERNAL TABLE FOR HOLDING RECORDS TO BE UPLOAD.
DATA : BEGIN OF GT_DATA OCCURS 0,
SNO TYPE I, "SERIAL NUMBER
TYPE LIKE BKPF-BLART, "DOCUMENT TYPE
CURRENCY LIKE BKPF-WAERS, "ACCOUNT GROUP
POSTINGDATE LIKE BKPF-BUDAT, "POSTING DATE
DOCUMENTDATE LIKE BKPF-BLDAT, "DOCUMENT DATE
PERIOD TYPE I, "PERIOD OF ENTRY
EXCHGRATE LIKE BKPF-KURSF, "EXCHANGE RATE
REFNO LIKE BKPF-XBLNR, "REFERENCE NUMBER
DOCHDRTXT LIKE BKPF-BKTXT, "DOCUMENT HEADER TEXT
DEBCRED LIKE RF05A-NEWBS, "DEBIT/CREDIT
GLACCNT LIKE RF05A-NEWKO, "GL ACCOUNT
ASSET LIKE RF05A-NEWKO, "ASSET
VENDOR LIKE RF05A-NEWKO, "VENDOR
CUSTOMER LIKE RF05A-NEWKO, "CUSTOMER
COSTCNTR LIKE BSEG-KOSTL, "COST CENTER
LOB LIKE BSEG-PRCTR, "LINE OF BUSINESS
TOB LIKE BSEG-ZZTYB, "TYPE OF BUSINESS
SOB LIKE BSEG-SEGMENT, "SOURCE OF BUSINESS
TOF LIKE BSEG-GSBER, "TYPE OF FUNDS
AMTDOCCURR LIKE BSEG-WRBTR, "AMOUNT IN DOCUMENT CURRENCY
AMTLOCCURR LIKE BSEG-DMBTR, "AMOUNT IN LOCAL CURRENCY
ITEMTXT LIKE BSEG-SGTXT, "ITEM TEXT
DESC(50), "DESCCRIPTION
AMTLOCCURR2 LIKE BSEG-DMBTR, "AMOUNT IN LOCAL CURRENCY2
Assignment field added
ASSIGNMNTNO LIKE BSEG-ZUONR, "ASSIGNMENT NUMBER
END OF GT_DATA.
INTERNAL TABLE FOR BDCDATA.
DATA : BEGIN OF GT_BDCDATA OCCURS 0.
INCLUDE STRUCTURE BDCDATA.
DATA : END OF GT_BDCDATA.
INTERNAL TABLE FOR MOVING RECORDING INFO FINALLY TO BDCDATA.
DATA : BEGIN OF GT_FINBDCDATA OCCURS 0.
INCLUDE STRUCTURE BDCDATA.
DATA : END OF GT_FINBDCDATA.
INTERNAL TABLE FOR HOLDING ALL TYPE OF MESSAGES.
DATA : BEGIN OF GT_MSG OCCURS 0.
INCLUDE STRUCTURE BDCMSGCOLL.
DATA : END OF GT_MSG.
INTERNAL TABLE FOR HOLDING ERRORS & WARNING MESSAGES
DATA : BEGIN OF GT_ERRORS OCCURS 0,
SNO TYPE I,
MSGNO LIKE SY-MSGNO,
MSGTY LIKE SY-MSGTY,
ERR_TEXT LIKE T100-TEXT,
END OF GT_ERRORS.
----
Selection Screen *
----
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-010.
PARAMETER : P_FNAME LIKE RLGRAP-FILENAME OBLIGATORY. " Input excel file name with path selected
PARAMETER : P_LINENO TYPE I OBLIGATORY DEFAULT 2 . " Input excel file name starting row for data
PARAMETER : P_BUKRS LIKE BKPF-BUKRS OBLIGATORY. " Input Company Code
PARAMETER : P_XLS TYPE I OBLIGATORY DEFAULT 10000. " Input excel file name starting row for data
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-020.
PARAMETER : P_MODE1 RADIOBUTTON GROUP RBMD. " Foreground Processing with screen display
PARAMETER : P_MODE2 RADIOBUTTON GROUP RBMD. " Foreground Processing with screen display of errors only
PARAMETER : P_MODE3 RADIOBUTTON GROUP RBMD DEFAULT 'X'. " " Background Processing with no screen display
SELECTION-SCREEN END OF BLOCK B2.
SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE TEXT-030.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS p_batch RADIOBUTTON GROUP rb_c. "Create session
SELECTION-SCREEN COMMENT 3(20) text-s01 FOR FIELD p_batch.
SELECTION-SCREEN POSITION 45.
PARAMETERS p_ctu RADIOBUTTON GROUP rb_c. "call transaction
SELECTION-SCREEN COMMENT 48(25) text-s02 FOR FIELD p_ctu.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK B3.
----
Selection Screen events *
----
Get the file name and File Path
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FNAME.
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
EXPORTING
STATIC = 'X'
CHANGING
FILE_NAME = P_FNAME.
----
Start of selection *
----
START-OF-SELECTION.
Select the transaction run mode
PERFORM F_SELECT_MODE.
Upload the data into table GT_DATA
PERFORM F_UPLOAD_DATA.
Append the data of GT_DATA into the BDC table GT_bdcdata
PERFORM F_PERFORM_BDC.
----
End of Selection *
----
END-OF-SELECTION.
IF GV_WARNING_FLAG = 'T'.
PERFORM F_DOWNLOAD_ERRORS TABLES GT_ERRORS.
ENDIF.
PERFORM F_WRITE_SUMMARY_REPORT.
----
Top of Page *
----
TOP-OF-PAGE.
PERFORM F_WRITE_HEADER.
----
START NEW SCREEN *
----
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR GT_bdcdata.
GT_bdcdata-PROGRAM = PROGRAM.
GT_bdcdata-DYNPRO = DYNPRO.
GT_bdcdata-DYNBEGIN = 'X'.
APPEND GT_bdcdata.
ENDFORM. "BDC_DYNPRO
----
INSERT FIELD *
----
FORM BDC_FIELD USING FNAM FVAL.
CLEAR GT_bdcdata.
GT_bdcdata-FNAM = FNAM.
GT_bdcdata-FVAL = FVAL.
APPEND GT_bdcdata.
ENDFORM. "BDC_FIELD
&----
*& FORM F_UPLOAD_DATA
&----
TEXT
----
-->P_ITAB_SKA1 TEXT
----
FORM F_UPLOAD_DATA.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = P_FNAME
I_BEGIN_COL = 1
I_BEGIN_ROW = P_LINENO
I_END_COL = 24
I_END_ROW = P_XLS
TABLES
INTERN = GT_EXCEL
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
GT_ERRORS-MSGNO = SY-MSGNO.
GT_ERRORS-MSGTY = SY-MSGTY.
GT_ERRORS-ERR_TEXT = 'Problem encountered in transaction data upload from Excel Spreadsheet ' .
APPEND GT_ERRORS.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ELSE.
LOOP AT GT_EXCEL.
CASE GT_EXCEL-COL.
WHEN 1.
GT_DATA-SNO = GT_EXCEL-VALUE.
WHEN 2.
GT_DATA-TYPE = GT_EXCEL-VALUE.
WHEN 3.
GT_DATA-CURRENCY = GT_EXCEL-VALUE.
WHEN 4.
Converting Valid-From date from MM/DD/YYYY format to YYYYMMDD format
CALL FUNCTION 'RP_FORMATING_DATE'
EXPORTING
DATE_I = GT_EXCEL-VALUE
BIRTH_DATE = 'X'
IMPORTING
DATE_O = GV_CONVTDDATE
EXCEPTIONS
DATE_INVALID = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
GT_DATA-POSTINGDATE = GV_CONVTDDATE.
GT_DATA-DOCUMENTDATE = GT_DATA-POSTINGDATE.
WHEN 5.
GT_DATA-PERIOD = GT_EXCEL-VALUE.
WHEN 6.
GT_DATA-EXCHGRATE = GT_EXCEL-VALUE.
WHEN 7.
GT_DATA-REFNO = GT_EXCEL-VALUE.
WHEN 8.
GT_DATA-DOCHDRTXT = GT_EXCEL-VALUE.
WHEN 9.
GT_DATA-DEBCRED = GT_EXCEL-VALUE.
WHEN 10.
GT_DATA-GLACCNT = GT_EXCEL-VALUE.
WHEN 11.
GT_DATA-ASSET = GT_EXCEL-VALUE.
WHEN 12.
GT_DATA-VENDOR = GT_EXCEL-VALUE.
WHEN 13.
GT_DATA-CUSTOMER = GT_EXCEL-VALUE.
WHEN 14.
GT_DATA-COSTCNTR = GT_EXCEL-VALUE.
WHEN 15.
GT_DATA-LOB = GT_EXCEL-VALUE.
WHEN 16.
GT_DATA-TOB = GT_EXCEL-VALUE.
WHEN 17.
GT_DATA-SOB = GT_EXCEL-VALUE.
WHEN 18.
GT_DATA-TOF = GT_EXCEL-VALUE.
WHEN 19.
GT_DATA-AMTDOCCURR = GT_EXCEL-VALUE.
WHEN 20.
GT_DATA-AMTLOCCURR = GT_EXCEL-VALUE.
WHEN 21.
GT_DATA-ITEMTXT = GT_EXCEL-VALUE.
WHEN 22.
GT_DATA-DESC = GT_EXCEL-VALUE.
WHEN 23.
GT_DATA-AMTLOCCURR2 = GT_EXCEL-VALUE.
Assignment field added
WHEN 24.
GT_DATA-ASSIGNMNTNO = GT_EXCEL-VALUE.
ENDCASE.
AT END OF ROW.
IF GT_DATA-SNO > '0'.
APPEND GT_DATA.
CLEAR GT_DATA.
ENDIF.
ENDAT.
ENDLOOP.
ENDIF.
ENDFORM. " F_UPLOAD_DATA
&----
*& FORM F_PERFORM_BDC
&----
TEXT
----
--> P1 TEXT
<-- P2 TEXT
----
FORM F_PERFORM_BDC.
Batch Data Input processing for executing Financial Document posting transaction
CLEAR: GT_DATA.
SORT GT_DATA BY SNO DESCENDING.
CLEAR : GV_COUNT_UNIQSNO,GV_COUNT_SUCCESS.
GV_COUNT_UNIQSNO = 0.
GV_COUNT_SUCCESS = 0.
Start of Change - Ritesh Shrivastava - 16/03/2007
If p_batch = 'X'.
Perform open_group.
Endif.
End of Change - Ritesh Shrivastava - 16/03/2007
Loop at GT_DATA.
Processing logic to obtain posting key value starts here
Note: Posting key value cannot exceed two numeric digits.
gv_debcred = GT_DATA-DEBCRED.
Perform obtain_postingkey_value using gv_debcred
changing gv_postingkey.
Processing logic to obtain posting key value ends here
Note: Posting key value cannot exceed two numeric digits.
Processing logic for processing header data
CLEAR: GV_FLAG.
AT NEW SNO.
GV_FLAG = '1'.
GV_COUNT_UNIQSNO = GV_COUNT_UNIQSNO + 1.
perform bdc_dynpro using 'SAPMF05A' '0100'.
Start of Change - Ritesh Shrivastava - 23/03/2007
IF GV_POSTINGKEY = '70' OR GV_POSTINGKEY = '75'.
Perform bdc_field using 'BDC_CURSOR'
'RF05A-NEWBW'.
Else.
End of Change - Ritesh Shrivastava - 23/03/2007
Perform bdc_field using 'BDC_CURSOR'
'RF05A-NEWKO'.
Start of Change - Ritesh Shrivastava - 23/03/2007
Endif.
End of Change - Ritesh Shrivastava - 23/03/2007
perform bdc_field using 'BDC_OKCODE'
'/00'.
ENDAT.
CLEAR : GV_FLAGEND.
AT END OF SNO.
GV_FLAGEND = '1'.
ENDAT.
If GV_FLAG = '1'.
perform date_convert using GT_DATA-DOCUMENTDATE
changing gv_date.
perform bdc_field using 'BKPF-BLDAT'
gv_date.
perform bdc_field using 'BKPF-BLART'
GT_DATA-TYPE.
perform bdc_field using 'BKPF-BUKRS'
P_BUKRS.
perform date_convert using GT_DATA-POSTINGDATE
changing gv_date.
perform bdc_field using 'BKPF-BUDAT'
gv_date.
perform bdc_field using 'BKPF-MONAT'
'2'.
perform bdc_field using 'BKPF-WAERS'
GT_DATA-CURRENCY.
Start of Change - Ritesh Shrivastava - 15/03/2007
perform bdc_field using 'BKPF-KURSF' " Commented out
GT_DATA-EXCHGRATE.
perform amt_convert using GT_DATA-EXCHGRATE
changing GV_EXCHG.
perform bdc_field using 'BKPF-KURSF'
GV_EXCHG.
End of Change - Ritesh Shrivastava - 15/03/2007
perform bdc_field using 'BKPF-XBLNR'
GT_DATA-REFNO.
perform bdc_field using 'BKPF-BKTXT'
GT_DATA-DOCHDRTXT.
perform bdc_field using 'FS006-DOCID'
'*'.
Endif.
Based on posting key derived , the corresponding BDC screens are processed
Perform screen_determination using gv_postingkey.
Batch Data Input continued for executing Financial Document posting transaction with
Posting key, which was derived earlier using the business rules, used for screen input
in the next statement
Perform screenprocessing_lineitem using gv_postingkey.
Batch Data Input processing completed for one line-item for Financial Document posting
Transaction execution
IF GV_FLAGEND NE '1'.
Start of Change - Ritesh Shrivastava - 20/03/2007
perform bdc_dynpro using 'SAPMF05A' gv_bdcscreenno2.
perform bdc_field using 'BDC_CURSOR'
'RF05A-NEWKO'.
Start of Change - Ritesh Shrivastava - 23/03/2007
IF GV_POSTINGKEY = '70' OR GV_POSTINGKEY = '75'.
Perform bdc_field using 'BDC_CURSOR'
'100'.
Endif.
End of Change - Ritesh Shrivastava - 23/03/2007
perform bdc_field using 'BDC_OKCODE'
'/00'.
End of Change - Ritesh Shrivastava - 20/03/2007
ELSE.
Sccreen end logic , based on posting key derived ,for General ledger line item
If GV_POSTINGKEY = '40' OR GV_POSTINGKEY = '50'.
perform bdc_dynpro using 'SAPMF05A' '0330'.
perform bdc_field using 'BDC_CURSOR'
'BSEG-CCBTC'.
perform bdc_field using 'BDC_OKCODE'
'=AB'.
ENDIF.
Sccreen end logic , based on posting key derived ,for Customer line item
If GV_POSTINGKEY = '01' OR GV_POSTINGKEY = '15'.
perform bdc_dynpro using 'SAPMF05A' gv_bdcscreenno2.
perform bdc_field using 'BDC_OKCODE'
'/ENTE'.
ENDIF.
Screen end logic , based on posting key derived ,for Vendor line item
If GV_POSTINGKEY = '25' OR GV_POSTINGKEY = '31'.
perform bdc_dynpro using 'SAPMF05A' gv_bdcscreenno2.
perform bdc_field using 'BDC_OKCODE'
'/ENTE'.
ENDIF.
Sccreen end logic , for finally saving and creating the FI Document
perform bdc_dynpro using 'SAPMF05A' '0700'.
perform bdc_field using 'BDC_CURSOR'
'RF05A-NEWBS'.
perform bdc_field using 'BDC_OKCODE'
'=BS'.
perform bdc_field using 'BKPF-XBLNR'
GT_DATA-REFNO.
perform bdc_field using 'BKPF-BKTXT'
GT_DATA-DOCHDRTXT.
perform bdc_dynpro using 'SAPMF05A' '0700'.
perform bdc_field using 'BDC_CURSOR'
'RF05A-NEWBS'.
perform bdc_field using 'BDC_OKCODE'
'=BU'.
perform bdc_field using 'BKPF-XBLNR'
GT_DATA-REFNO.
perform bdc_field using 'BKPF-BKTXT'
GT_DATA-DOCHDRTXT.
CLEAR : GT_BDCDATA.
GT_FINBDCDATA[] = GT_BDCDATA[].
Start of Change - Ritesh Shrivastava - 16/03/2007
If p_batch = 'X'.
Perform bdc_insert_group USING 'FB01'.
Else.
Call transaction processing to input data
Perform CALL_TRANSACTION USING ' FB01'.
Endif.
End of Change - Ritesh Shrivastava - 16/03/2007
Refreshing Batch input data for processing the next run of the document posting transaction
in order to create a new FI Document
REFRESH : GT_BDCDATA.
ENDIF.
GV_COUNT_SUCCESS = GV_COUNT_SUCCESS + 1.
Endloop.
Start of Change - Ritesh Shrivastava - 16/03/2007
If p_batch = 'X'.
Perform close_group.
Endif.
End of Change - Ritesh Shrivastava - 16/03/2007
ENDFORM. " F_PERFORM_BDC
*&----
**& FORM F_DOWNLOAD_ERRORS
*&----
TEXT
*----
-->P_GT_ERRORS TEXT
*----
FORM F_DOWNLOAD_ERRORS TABLES P_GT_ERRORS STRUCTURE GT_ERRORS .
CALL FUNCTION 'DOWNLOAD'
EXPORTING
FILENAME = 'C:\ERRORLOG_FB01.TXT'
FILETYPE = 'DAT'
TABLES
DATA_TAB = GT_ERRORS
EXCEPTIONS
INVALID_FILESIZE = 1
INVALID_TABLE_WIDTH = 2
INVALID_TYPE = 3
NO_BATCH = 4
UNKNOWN_ERROR = 5
GUI_REFUSE_FILETRANSFER = 6
CUSTOMER_ERROR = 7
OTHERS = 8.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " F_DOWNLOAD_ERRORS
&----
*& FORM F_WRITE_SUMMARY_REPORT
&----
TEXT
----
--> P1 TEXT
<-- P2 TEXT
----
FORM F_WRITE_SUMMARY_REPORT.
DESCRIBE TABLE GT_DATA LINES GV_TO_UPLOAD.
WRITE :/'Total Number of Records to be Uploaded :', GV_TO_UPLOAD.
WRITE :/'Number of Records successfully loaded :', GV_COUNT_SUCCESS.
WRITE :/'Number of Error Records :', GV_COUNT_ERRORS.
WRITE :/'Number of Records with Warnings :', GV_COUNT_WARNINGS.
ENDFORM. " F_WRITE_SUMMARY_REPORT
&----
*& FORM F_WRITE_HEADER
&----
TEXT
----
--> P1 TEXT
<-- P2 TEXT
----
FORM F_WRITE_HEADER.
WRITE /'ASIA CAPITAL REINSURANCE PTE.LTD.' CENTERED.
SKIP 1.
WRITE :/'DATE:', SY-DATUM,'TIME:', SY-UZEIT.
NEW-LINE.
ULINE.
ENDFORM. " F_WRITE_HEADER
&----
*& FORM F_SELECT_MODE
&----
TEXT
----
--> P1 TEXT
<-- P2 TEXT
----
FORM F_SELECT_MODE.
IF P_MODE1 = 'X'.
GV_MODE = 'A'. "DISPLAY ALL SCREENS
ENDIF.
IF P_MODE2 = 'X'.
GV_MODE = 'E'. "DISPLAY SCREEN, IF ERROR
ENDIF.
IF P_MODE3 = 'X'.
GV_MODE = 'N'. "BACKGROUND
ENDIF.
ENDFORM. " F_SELECT_MODE
&----
*& Form open_group
&----
text
----
--> p1 text
<-- p2 text
----
FORM open_group .
IF p_mode1 = 'X' OR p_mode2 = 'X' OR P_MODE3 = 'X'.
SKIP.
WRITE: /(20) 'Create group'(I01), .GROUP.
SKIP.
Open Batchinput group
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT
GROUP = 'ZFITRANBDC'
USER = sy-uname.
KEEP = KEEP.
HOLDDATE = HOLDDATE.
If sy-subrc <> 0.
GT_ERRORS-ERR_TEXT = 'Problem encountered in BDC_OPEN_GROUP' .
APPEND GT_ERRORS.
ENDIF.
ENDIF.
ENDFORM. " open_group
&----
*& Form close_group
&----
text
----
--> p1 text
<-- p2 text
----
FORM close_group .
IF P_mode1 = 'X' OR P_mode2 = 'X' OR P_mode3 = 'X' .
Close Batch Input Group
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
not_open = 1
queue_error = 2
OTHERS = 3.
If sy-subrc <> 0.
GT_ERRORS-ERR_TEXT = 'Problem encountered in BDC_CLOSE_GROUP' .
APPEND GT_ERRORS.
ELSE.
SKIP 1.
WRITE 😕 'Batch Input Session',GC_BDCSESSION,'created for Transaction Data Upload'.
SKIP 1.
NEW-LINE.
ENDIF.
ENDIF.
ENDFORM. " close_group
&----
*& Form obtain_postingkey_value
&----
text
----
-->P_GV_DEBCRED text
----
FORM obtain_postingkey_value USING P_GV_DEBCRED
CHANGING P_GV_POSTINGKEY.
Processing logic to obtain posting key value starts here
Note: Posting key value cannot exceed two numeric digits.
Logic for Scenarios where Indicator field is a Debit 'D'
If P_GV_DEBCRED = 'D'.
If GT_DATA-GLACCNT IS NOT INITIAL.
IF GT_DATA-VENDOR IS INITIAL.
IF GT_DATA-CUSTOMER IS INITIAL.
IF GT_DATA-ASSET IS INITIAL.
P_GV_POSTINGKEY = '40'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
If GT_DATA-GLACCNT IS INITIAL.
IF GT_DATA-VENDOR IS NOT INITIAL.
IF GT_DATA-CUSTOMER IS INITIAL.
IF GT_DATA-ASSET IS INITIAL.
P_GV_POSTINGKEY = '25'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
If GT_DATA-GLACCNT IS INITIAL.
IF GT_DATA-VENDOR IS INITIAL.
IF GT_DATA-CUSTOMER IS NOT INITIAL.
IF GT_DATA-ASSET IS INITIAL.
P_GV_POSTINGKEY = '01'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
If GT_DATA-GLACCNT IS INITIAL.
IF GT_DATA-VENDOR IS INITIAL.
IF GT_DATA-CUSTOMER IS INITIAL.
IF GT_DATA-ASSET IS NOT INITIAL.
P_GV_POSTINGKEY = '70'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
Logic for Scenarios where Indicator field is a Credit 'C'
ELSEIF P_GV_DEBCRED = 'C'.
If GT_DATA-GLACCNT IS NOT INITIAL.
IF GT_DATA-VENDOR IS INITIAL.
IF GT_DATA-CUSTOMER IS INITIAL.
IF GT_DATA-ASSET IS INITIAL.
P_GV_POSTINGKEY = '50'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
If GT_DATA-GLACCNT IS INITIAL.
IF GT_DATA-VENDOR IS NOT INITIAL.
IF GT_DATA-CUSTOMER IS INITIAL.
IF GT_DATA-ASSET IS INITIAL.
P_GV_POSTINGKEY = '31'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
If GT_DATA-GLACCNT IS INITIAL.
IF GT_DATA-VENDOR IS INITIAL.
IF GT_DATA-CUSTOMER IS NOT INITIAL.
IF GT_DATA-ASSET IS INITIAL.
P_GV_POSTINGKEY = '15'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
If GT_DATA-GLACCNT IS INITIAL.
IF GT_DATA-VENDOR IS INITIAL.
IF GT_DATA-CUSTOMER IS INITIAL.
IF GT_DATA-ASSET IS NOT INITIAL.
P_GV_POSTINGKEY = '75'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " obtain_postingkey_value
&----
*& Form date_convert
&----
text
----
-->P_GT_DATE text
<--P_GV_DATE text
----
FORM date_convert USING P_GT_DATE
CHANGING P_GV_DATE.
DATA : lv_dd(2),
lv_mm(2),
lv_yyyy(4).
lv_dd = P_GT_DATE+6(2).
lv_mm = P_GT_DATE+4(2).
lv_yyyy = P_GT_DATE+0(4).
CONCATENATE lv_dd lv_mm lv_yyyy INTO gv_date SEPARATED BY '.'.
ENDFORM. " date_convert
&----
*& Form amt_convert
&----
text
----
-->P_GT_DATA_AMTDOCCUR text
<--P_GV_AMT text
----
FORM amt_convert USING P_GT_DATA_AMTDOCCURR
CHANGING P_GV_AMT.
WRITE P_GT_DATA_AMTDOCCURR TO P_GV_AMT.
ENDFORM. " amt_convert
&----
*& Form screen_determination
&----
text
----
-->P_GV_POSTINGKEY text
----
FORM screen_determination USING P_GV_POSTINGKEY.
CASE P_GV_POSTINGKEY.
WHEN '40'.
gv_bdcscreenno1 = '0300'.
Start of Change - Ritesh Shrivastava - 20/03/2007
gv_bdcscreenno2 = '0330'.
End of Change - Ritesh Shrivastava - 20/03/2007
WHEN '50'.
gv_bdcscreenno1 = '0300'.
Start of Change - Ritesh Shrivastava - 20/03/2007
gv_bdcscreenno2 = '0330'.
End of Change - Ritesh Shrivastava - 20/03/2007
WHEN '25'.
gv_bdcscreenno1 = '0302'.
Start of Change - Ritesh Shrivastava - 20/03/2007
gv_bdcscreenno2 = '0332'.
End of Change - Ritesh Shrivastava - 20/03/2007
WHEN '31'.
gv_bdcscreenno1 = '0302'.
Start of Change - Ritesh Shrivastava - 20/03/2007
gv_bdcscreenno2 = '0332'.
End of Change - Ritesh Shrivastava - 20/03/2007
WHEN '01'.
gv_bdcscreenno1 = '0301'.
Start of Change - Ritesh Shrivastava - 20/03/2007
gv_bdcscreenno2 = '0331'.
End of Change - Ritesh Shrivastava - 20/03/2007
WHEN '15'.
gv_bdcscreenno1 = '0301'.
Start of Change - Ritesh Shrivastava - 20/03/2007
gv_bdcscreenno2 = '0331'.
End of Change - Ritesh Shrivastava - 20/03/2007
WHEN '70'.
gv_bdcscreenno1 = '0305'.
Start of Change - Ritesh Shrivastava - 20/03/2007
gv_bdcscreenno2 = '0305'.
End of Change - Ritesh Shrivastava - 20/03/2007
WHEN '75'.
gv_bdcscreenno1 = '0305'.
Start of Change - Ritesh Shrivastava - 20/03/2007
gv_bdcscreenno2 = '0305'.
End of Change - Ritesh Shrivastava - 20/03/2007
ENDCASE.
ENDFORM. " screen_determination
&----
*& Form screenprocessing_lineitem
&----
text
----
-->P_GV_POSTINGKEY text
----
FORM screenprocessing_lineitem USING P_GV_POSTINGKEY.
WRITE P_GV_POSTINGKEY TO GV_POSTINGKEYCHR.
Start of Change - Ritesh Shrivastava - 15/03/2007
Adding leading zeroes to Profit Center , which has field length of 10
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = GV_POSTINGKEYCHR
IMPORTING
OUTPUT = GV_POSTINGKEYCHR.
perform bdc_field using 'RF05A-NEWBS'
GV_POSTINGKEYCHR.
End of Change - Ritesh Shrivastava - 15/03/2007
Start of Change - Ritesh Shrivastava - 20/03/2007
Changes to ensure that the vendor/customer/Asset accounts are picked up
instead of GL Account for correct posting key
perform bdc_field using 'RF05A-NEWKO' " Commented out
GT_DATA-GLACCNT.
End of Change - Ritesh Shrivastava - 20/03/2007
CASE GV_POSTINGKEYCHR.
Screen Processing logic for General Ledger data
WHEN '40' OR '50'.
perform bdc_field using 'RF05A-NEWKO'
GT_DATA-GLACCNT.
Start of Change - Ritesh Shrivastava - 20/03/2007
perform bdc_dynpro using 'SAPMF05A' gv_bdcscreenno1.
perform bdc_field using 'BDC_CURSOR'
'BSEG-ZUONR'.
perform bdc_field using 'BDC_OKCODE'
'=ZK'.
IF GT_DATA-AMTDOCCURR IS NOT INITIAL.
perform amt_convert using GT_DATA-AMTDOCCURR
changing GV_AMT.
perform bdc_field using 'BSEG-WRBTR'
GV_AMT.
Start of Change - Ritesh Shrivastava - 28/03/2007
Include code for updating the local currency amount instead of calculating it in SAP
perform amt_convert using GT_DATA-AMTLOCCURR
changing GV_AMT.
perform bdc_field using 'BSEG-DMBTR'
GV_AMT.
End of Change - Ritesh Shrivastava - 28/03/2007
perform bdc_field using 'BSEG-MWSKZ'
''.
perform bdc_field using 'BKPF-XMWST'
''.
perform bdc_field using 'BSEG-ZUONR'
GT_DATA-ASSIGNMNTNO.
perform bdc_field using 'BSEG-SGTXT'
GT_DATA-ITEMTXT.
This screen logic is valid when GL Account does not have null value
perform bdc_field using 'DKACB-FMORE'
'X'.
perform bdc_dynpro using 'SAPLKACB' '0002'.
perform bdc_field using 'BDC_CURSOR'
'COBL-KOSTL'.
perform bdc_field using 'BDC_OKCODE'
'=ENTE'.
perform bdc_field using 'COBL-GSBER'
GT_DATA-TOF.
perform bdc_field using 'COBL-KOSTL'
GT_DATA-COSTCNTR.
perform bdc_field using 'COBL-PRCTR'
GT_DATA-LOB.
perform bdc_field using 'COBL-SEGMENT'
GT_DATA-SOB.
perform bdc_field using 'COBL-ZZTYB'
GT_DATA-TOB.
Endif.
End of Change - Ritesh Shrivastava - 20/03/2007
Screen Processing logic for Vendor Master data
WHEN '25' OR '31'.
perform bdc_field using 'RF05A-NEWKO'
GT_DATA-VENDOR.
Start of Change - Ritesh Shrivastava - 20/03/2007
perform bdc_dynpro using 'SAPMF05A' gv_bdcscreenno1.
perform bdc_field using 'BDC_CURSOR'
'BSEG-SGTXT'.
perform bdc_field using 'BDC_OKCODE'
'=ZK'.
IF GT_DATA-AMTDOCCURR IS NOT INITIAL.
perform amt_convert using GT_DATA-AMTDOCCURR
changing GV_AMT.
perform bdc_field using 'BSEG-WRBTR'
GV_AMT.
Start of Change - Ritesh Shrivastava - 28/03/2007
Include code for updating the local currency amount instead of calculating it in SAP
perform amt_convert using GT_DATA-AMTLOCCURR
changing GV_AMT.
perform bdc_field using 'BSEG-DMBTR'
GV_AMT.
End of Change - Ritesh Shrivastava - 28/03/2007
perform bdc_field using 'BKPF-XMWST'
''.
perform bdc_field using 'BSEG-MWSKZ'
''.
perform bdc_field using 'BSEG-GSBER'
GT_DATA-TOF.
perform bdc_field using 'DKACB-FMORE'
'X'.
perform bdc_field using 'BDC_CURSOR'
'COBL-PARGB'.
perform bdc_field using 'BDC_OKCODE'
'=ZK'.
perform bdc_field using 'BSEG-ZFBDT'
'22.02.2007'.
perform bdc_field using 'BSEG-ZUONR'
GT_DATA-ASSIGNMNTNO.
perform bdc_field using 'BSEG-SGTXT'
GT_DATA-ITEMTXT.
Endif.
End of Change - Ritesh Shrivastava - 20/03/2007
Screen Processing logic for Customer Master data
WHEN '01' OR '15'.
Start of Change - Ritesh Shrivastava - 20/03/2007
perform bdc_field using 'RF05A-NEWKO'
GT_DATA-CUSTOMER.
perform bdc_field using 'DKACB-FMORE'
' '.
perform bdc_dynpro using 'SAPMF05A' gv_bdcscreenno1.
perform bdc_field using 'BDC_CURSOR'
'BSEG-SGTXT'.
perform bdc_field using 'BDC_OKCODE'
'=ZK'.
IF GT_DATA-AMTDOCCURR IS NOT INITIAL.
perform amt_convert using GT_DATA-AMTDOCCURR
changing GV_AMT.
perform bdc_field using 'BSEG-WRBTR'
GV_AMT.
Start of Change - Ritesh Shrivastava - 28/03/2007
Include code for updating the local currency amount instead of calculating it in SAP
perform amt_convert using GT_DATA-AMTLOCCURR
changing GV_AMT.
perform bdc_field using 'BSEG-DMBTR'
GV_AMT.
End of Change - Ritesh Shrivastava - 28/03/2007
perform bdc_field using 'BKPF-XMWST'
''.
perform bdc_field using 'BSEG-MWSKZ'
''.
perform bdc_field using 'BSEG-GSBER'
GT_DATA-TOF.
perform bdc_field using 'DKACB-FMORE'
'X'.
perform bdc_field using 'BDC_CURSOR'
'COBL-PARGB'.
perform bdc_field using 'BDC_OKCODE'
'=ZK'.
perform bdc_field using 'BSEG-ZFBDT'
'22.02.2007'.
perform bdc_field using 'BSEG-ZUONR'
GT_DATA-ASSIGNMNTNO.
perform bdc_field using 'BSEG-SGTXT'
GT_DATA-ITEMTXT.
Endif.
End of Change - Ritesh Shrivastava - 20/03/2007
Screen Processing logic for Asset Master data
WHEN '70' OR '75'.
perform bdc_field using 'RF05A-NEWKO'
GT_DATA-ASSET.
Start of Change - Ritesh Shrivastava - 20/03/2007
Hardcoding the value of Transaction Type for Asset as 100
perform bdc_field using 'RF05A-NEWBW'
'100'.
perform bdc_dynpro using 'SAPMF05A' gv_bdcscreenno1.
perform bdc_field using 'BDC_CURSOR'
'BSEG-WRBTR'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
IF GT_DATA-AMTDOCCURR IS NOT INITIAL.
perform amt_convert using GT_DATA-AMTDOCCURR
changing GV_AMT.
perform bdc_field using 'BSEG-WRBTR'
GV_AMT.
Start of Change - Ritesh Shrivastava - 28/03/2007
Include code for updating the local currency amount instead of calculating it in SAP
perform amt_convert using GT_DATA-AMTLOCCURR
changing GV_AMT.
perform bdc_field using 'BSEG-DMBTR'
GV_AMT.
End of Change - Ritesh Shrivastava - 28/03/2007
perform bdc_field using 'DKACB-FMORE'
'X'.
perform bdc_field using 'BDC_CURSOR'
'COBL-PARGB'.
perform bdc_field using 'BDC_CURSOR'
GT_DATA-TOF.
perform bdc_field using 'BDC_OKCODE'
'/00'.
Endif.
End of Change - Ritesh Shrivastava - 20/03/2007
ENDCASE.
End of Change - Ritesh Shrivastava - 15/03/2007
ENDFORM. " screenprocessing_lineitem
&----
*& Form Call_transaction
&----
text
----
-->P_0895 text
----
FORM Call_transaction USING P_TRANCODE.
REFRESH GT_MSG.
Call transaction processing
Call Transaction 'FB01' Using GT_FINBDCDATA
Mode GV_MODE
Update 'A'
Messages into GT_MSG.
Trap Call Transaction Error messages for Error report.
IF sy-subrc = 0.
GV_WARNING_FLAG = 'F'.
DESCRIBE TABLE GT_MSG LINES GV_INDEX.
READ TABLE GT_MSG INDEX GV_INDEX.
IF GT_MSG-MSGTYP = 'S' OR GT_MSG-MSGTYP = ''.
GV_COUNT_SUCCESS = GV_COUNT_SUCCESS + 1.
ENDIF.
IF GT_MSG-MSGTYP = 'W'.
GV_WARNING_FLAG = 'T'.
GV_COUNT_WARNINGS = GV_COUNT_WARNINGS + 1.
ENDIF.
IF GT_MSG-MSGTYP = 'E'.
GV_WARNING_FLAG = 'T'.
GV_COUNT_ERRORS = GV_COUNT_ERRORS + 1.
ENDIF.
IF GT_MSG-MSGTYP = 'I'.
GV_WARNING_FLAG = 'T'.
GV_COUNT_INFO = GV_COUNT_INFO + 1.
ENDIF.
Processing logic for obtaining texts corresponding to warning messages
IF GV_WARNING_FLAG = 'T'.
GT_ERRORS-MSGTY = GT_MSG-MSGTYP.
GT_ERRORS-MSGNO = GT_MSG-MSGNR.
MOVE GT_DATA-SNO TO GT_ERRORS-SNO.
SELECT TEXT FROM T100 INTO GT_ERRORS-ERR_TEXT
WHERE MSGNR = GT_ERRORS-MSGNO
AND SPRSL = 'E'
AND ARBGB = GT_MSG-MSGID.
ENDSELECT.
GV_REPL_TEXT = GT_MSG-MSGV1.
DO.
REPLACE '&1' WITH GV_REPL_TEXT INTO GT_ERRORS-ERR_TEXT.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
CONDENSE GT_ERRORS-ERR_TEXT.
ENDDO.
GV_REPL_TEXT = GT_MSG-MSGV2.
DO.
REPLACE '&2' WITH GV_REPL_TEXT INTO GT_ERRORS-ERR_TEXT.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
CONDENSE GT_ERRORS-ERR_TEXT.
ENDDO.
GV_REPL_TEXT = GT_MSG-MSGV3.
DO.
REPLACE '&3' WITH GV_REPL_TEXT INTO GT_ERRORS-ERR_TEXT.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
CONDENSE GT_ERRORS-ERR_TEXT.
ENDDO.
GV_REPL_TEXT = GT_MSG-MSGV4.
DO.
REPLACE '&4' WITH GV_REPL_TEXT INTO GT_ERRORS-ERR_TEXT.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
CONDENSE GT_ERRORS-ERR_TEXT.
ENDDO.
APPEND GT_ERRORS.
CLEAR GT_ERRORS.
ENDIF.
ENDIF.
TCT: Count the number of input records in the unsuccessful call
Transaction.Display the input records that could not be
successfully processed
ENDFORM. " Call_transaction
&----
*& Form bdc_insert_group
&----
text
----
-->P_0971 text
----
FORM bdc_insert_group USING lv_trancode.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = lv_trancode
POST_LOCAL = NOVBLOCAL
PRINTING = NOPRINT
SIMUBATCH = ' '
CTUPARAMS = ' '
TABLES
DYNPROTAB = GT_FINBDCDATA
EXCEPTIONS
INTERNAL_ERROR = 1
NOT_OPEN = 2
QUEUE_ERROR = 3
TCODE_INVALID = 4
PRINTING_INVALID = 5
POSTING_INVALID = 6
OTHERS = 7
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " bdc_insert_group
‎2007 Jul 15 1:43 PM
BDC program for revesal posting using fb08
FORM bdc_gl_docu_reversal.
CLEAR:i_messtab,i_bdcdata.
PERFORM bdc_dynpro USING 'SAPMF05A' '0105'.
PERFORM bdc_field USING 'BDC_CURSOR'
'BSIS-BUDAT'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=BU'.
PERFORM bdc_field USING 'RF05A-BELNS'
g_document_number.
PERFORM bdc_field USING 'BKPF-BUKRS'
g_subobj.
PERFORM bdc_field USING 'RF05A-GJAHS'
g_toyear.
PERFORM bdc_field USING 'UF05A-STGRD'
p_revrea.
PERFORM bdc_field USING 'BSIS-BUDAT'
g_posting_date.
REFRESH i_messtab.
CALL TRANSACTION 'FB08' USING i_bdcdata
MODE 'N'
MESSAGES INTO i_messtab.
PERFORM message_tab.
ENDFORM. " bdc_gl_docu_reversal
-
*
Start new screen *
----
FORM bdc_dynpro USING program dynpro.
CLEAR wa_bdcdata.
wa_bdcdata-program = program.
wa_bdcdata-dynpro = dynpro.
wa_bdcdata-dynbegin = 'X'.
APPEND wa_bdcdata TO i_bdcdata.
ENDFORM. "BDC_DYNPRO
----
Insert field *
----
FORM bdc_field USING fnam fval.
IF FVAL <> NODATA.
CLEAR wa_bdcdata.
wa_bdcdata-fnam = fnam.
wa_bdcdata-fval = fval.
APPEND wa_bdcdata TO i_bdcdata.
ENDIF.
ENDFORM. "BDC_FIELD
&----
*& Form MESSAGE_TAB
&----
text
----
--> p1 text
<-- p2 text
----
FORM message_tab .
CLEAR: i_t100,wa_messtab,l_mstring,l_symsgv,wa_t100, g_rev_document_number.
SELECT *
INTO TABLE i_t100
FROM t100
FOR ALL ENTRIES IN i_messtab
WHERE sprsl = i_messtab-msgspra
AND arbgb = i_messtab-msgid
AND msgnr = i_messtab-msgnr.
LOOP AT i_messtab INTO wa_messtab.
READ TABLE i_t100 INTO wa_t100 WITH KEY sprsl = wa_messtab-msgspra
arbgb = wa_messtab-msgid
msgnr = wa_messtab-msgnr.
IF sy-subrc = 0.
l_mstring = wa_t100-text.
IF l_mstring CS '&1'.
REPLACE '&1' WITH wa_messtab-msgv1 INTO l_mstring.
REPLACE '&2' WITH wa_messtab-msgv2 INTO l_mstring.
REPLACE '&3' WITH wa_messtab-msgv3 INTO l_mstring.
REPLACE '&4' WITH wa_messtab-msgv4 INTO l_mstring.
ELSE.
REPLACE '&' WITH wa_messtab-msgv1 INTO l_mstring.
REPLACE '&' WITH wa_messtab-msgv2 INTO l_mstring.
REPLACE '&' WITH wa_messtab-msgv3 INTO l_mstring.
REPLACE '&' WITH wa_messtab-msgv4 INTO l_mstring.
ENDIF.
CONDENSE l_mstring.
WRITE: / wa_messtab-msgtyp, l_mstring(250).
ELSE.
ROLLBACK WORK.
WRITE: / wa_messtab.
ENDIF.
ENDLOOP.
ENDFORM. " MESSAGE_TAB
‎2007 Jul 15 1:47 PM
This is an example program for changing document number for changing document number using FB02 transaction.Here i am updating sgtxt filed (Line item text).
&----
*& Form bdc_update_sgtxt
&----
text
----
--> p1 text
<-- p2 text
----
FORM bdc_update_sgtxt .
*First Screen
REFRESH i_bdcdata.
CLEAR wa_bdcdata.
PERFORM bdc_dynpro USING 'SAPMF05L' '0100'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RF05L-BELNR'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
*Reversal document number
PERFORM bdc_field USING 'RF05L-BELNR'
g_rev_document_number.
*Company Code
PERFORM bdc_field USING 'RF05L-BUKRS'
g_subobj.
*Fiscal year.
PERFORM bdc_field USING 'RF05L-GJAHR'
g_toyear.
*Second Screen
PERFORM bdc_dynpro USING 'SAPMF05L' '0700'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RF05L-ANZDT(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=PK'.
*Third Screen
*Loop at line items.
LOOP AT i_bseg INTO wa_bseg.
CLEAR:g_rev_lineitemtext,g_sgtxt.
g_rev_lineitemtext = wa_bseg-sgtxt.
CONCATENATE c_rev_of_doc
g_document_number
g_rev_lineitemtext
INTO g_sgtxt
SEPARATED BY space .
PERFORM bdc_dynpro USING 'SAPMF05L' '0300'.
PERFORM bdc_field USING 'BDC_CURSOR'
'BSEG-SGTXT'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=Z+'.
PERFORM bdc_field USING 'BSEG-SGTXT'
g_sgtxt.
PERFORM bdc_dynpro USING 'SAPLKACB' '0002'.
PERFORM bdc_field USING 'BDC_CURSOR'
'COBL-AUFNR'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=ENTE'.
ENDLOOP.
PERFORM bdc_dynpro USING 'SAPMF05L' '0300'.
PERFORM bdc_field USING 'BDC_CURSOR'
'BSEG-ZUONR'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=AE'.
PERFORM bdc_dynpro USING 'SAPLKACB' '0002'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=ENTE'.
REFRESH i_messtab.
CALL TRANSACTION 'FB02' USING i_bdcdata
MODE 'A'
MESSAGES INTO i_messtab.
LOOP AT i_messtab INTO wa_messtab.
IF wa_messtab-msgtyp EQ c_e.
ROLLBACK WORK.
MESSAGE e000(z1) WITH 'Problem while updating the sgtxt for document number'.
ENDIF.
ENDLOOP.
COMMIT WORK.
ENDFORM. " bdc_update_sgtxt