‎2006 Nov 16 2:34 PM
Hi abappers
I am using the following code in my program.
i m getting a syntax error that i do not understand? can any body help me out with this.
Regards
Narendiran Rathinavelu
&----
*& Report ZTEST_RECUPLOAD
*&
&----
*&
*&
&----
REPORT ZTEST_RECUPLOAD.
*include bdcrecx1.
******************Selection screen************************************
SELECTION-SCREEN BEGIN OF BLOCK 1 WITH FRAME TITLE TEXT-T01 .
PARAMETERS P_FILE TYPE RLGRAP-FILENAME OBLIGATORY.
PARAMETERS P_SESSN TYPE APQI-GROUPID DEFAULT 'RECURRING'.
PARAMETERS P_SESSN2 TYPE APQI-GROUPID DEFAULT 'RECURRING_E'.
SELECTION-SCREEN END OF BLOCK 1.
********************Type declaration**********************************
*type for data input table
TYPES : BEGIN OF TY_DATA,
BUKRS TYPE T001-BUKRS, "Company code
BLART TYPE BKPF-BLART, "Document type
BUDAT TYPE BKPF-BUDAT, "Posting date
DBBDT TYPE BKDF-DBBDT, "First run
DBATR TYPE BKDF-DBATR, "Next run
DBEDT TYPE BKDF-DBEDT, "last run
DBMON TYPE BKDF-DBMON, "Run frequency
DBTAG TYPE BKDF-DBTAG, "Run date
DBZHL TYPE BKDF-DBZHL, "no of runs
XBLNR TYPE BKPF-XBLNR, "reference(site)
BKTXT TYPE BKPF-BKTXT, "document header data
USNAM TYPE BKPF-USNAM, "User name
CPUDT TYPE BKPF-CPUDT, "Entry date
BSCHL_1 TYPE BSEG-BSCHL, "Posting key 1 item
HKONT_1 TYPE BSEG-HKONT, "Account 1 item
DESC_1 TYPE CHAR40, "Description vendor/GL 1 item
MWSKZ_1 TYPE BSEG-MWSKZ, "Tax code 1 item
MWSTS1_1 TYPE BSEG-MWSTS, "Tax Amount 1 item
MWSTS2_1 TYPE BSEG-MWSTS, "Amount is local currency 1 item
MWSTS3_1 TYPE BSEG-MWSTS, "Amount is foreign currency 1 item
SGTXT_1 TYPE BSEG-SGTXT, "Item text 1 item
ZUONR_1 TYPE BSEG-ZUONR, "Assignment 1 item
BSCHL_2 TYPE BSEG-BSCHL, "Posting key 2 item
HKONT_2 TYPE BSEG-HKONT, "Account 2 item
DESC_2 TYPE CHAR40, "Description vendor/GL 2 item
MWSKZ_2 TYPE BSEG-MWSKZ, "Tax code 2 item
MWSTS1_2 TYPE BSEG-MWSTS, "Tax Amount 2 item
MWSTS2_2 TYPE BSEG-MWSTS, "Amount is local currency 2 item
MWSTS3_2 TYPE BSEG-MWSTS, "Amount is foreign currency 2 item
KOSTL TYPE COBL-KOSTL, "Cost center
AUFNR TYPE COBL-AUFNR, "Internal order number
SGTXT_2 TYPE BSEG-SGTXT, "Item text 2 item
ZUONR_2 TYPE BSEG-ZUONR, "Assignment 2 item
END OF TY_DATA.
*type for data error table
TYPES : BEGIN OF TY_ERROR,
BUKRS TYPE T001-BUKRS, "Company code
BLART TYPE BKPF-BLART, "Document type
BUDAT TYPE BKPF-BUDAT, "Posting date
DBBDT TYPE BKDF-DBBDT, "First run
DBATR TYPE BKDF-DBATR, "Next run
DBEDT TYPE BKDF-DBEDT, "last run
DBMON TYPE BKDF-DBMON, "Run frequency
DBTAG TYPE BKDF-DBTAG, "Run date
DBZHL TYPE BKDF-DBZHL, "no of runs
XBLNR TYPE BKPF-XBLNR, "reference(site)
BKTXT TYPE BKPF-BKTXT, "document header data
USNAM TYPE BKPF-USNAM, "User name
CPUDT TYPE BKPF-CPUDT, "Entry date
BSCHL_1 TYPE BSEG-BSCHL, "Posting key 1 item
HKONT_1 TYPE BSEG-HKONT, "Account 1 item
DESC_1 TYPE CHAR40, "Description vendor/GL 1 item
MWSKZ_1 TYPE BSEG-MWSKZ, "Tax code 1 item
MWSTS1_1 TYPE BSEG-MWSTS, "Tax Amount 1 item
MWSTS2_1 TYPE BSEG-MWSTS, "Amount is local currency 1 item
MWSTS3_1 TYPE BSEG-MWSTS, "Amount is foreign currency 1 item
SGTXT_1 TYPE BSEG-SGTXT, "Item text 1 item
ZUONR_1 TYPE BSEG-ZUONR, "Assignment 1 item
BSCHL_2 TYPE BSEG-BSCHL, "Posting key 2 item
HKONT_2 TYPE BSEG-HKONT, "Account 2 item
DESC_2 TYPE CHAR40, "Description vendor/GL 2 item
MWSKZ_2 TYPE BSEG-MWSKZ, "Tax code 2 item
MWSTS1_2 TYPE BSEG-MWSTS, "Tax Amount 2 item
MWSTS2_2 TYPE BSEG-MWSTS, "Amount is local currency 2 item
MWSTS3_2 TYPE BSEG-MWSTS, "Amount is foreign currency 2 item
KOSTL TYPE COBL-KOSTL, "Cost center
AUFNR TYPE COBL-AUFNR, "Internal order number
SGTXT_2 TYPE BSEG-SGTXT, "Item text 2 item
ZUONR_2 TYPE BSEG-ZUONR, "Assignment 2 item
END OF TY_ERROR.
********************Data declaration***********************************
DATA : T_DATA TYPE TABLE OF TY_DATA, "Table to upload correct entries
T_ERROR TYPE TABLE OF TY_ERROR. "Table to upload error data
DATA : W_DATA TYPE TY_DATA, "workarea for t_data
W_ERROR TYPE TY_ERROR. "workarea for t_error
DATA : T_BDCDATA TYPE TABLE OF BDCDATA,
W_BDCDATA TYPE BDCDATA.
DATA : T_SEL_FILE TYPE FILETABLE,
W_RETURN_CODE TYPE I VALUE '0',
W_SEL_FILE LIKE LINE OF T_SEL_FILE.
DATA : T_DATAIN TYPE TABLE OF TY_DATA,
W_DATAIN TYPE string.
DATA : W_FILE TYPE STRING.
********************At Selection Screen*********************************
*selection screen validations
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
WINDOW_TITLE = 'Select File for upload'
DEFAULT_EXTENSION =
DEFAULT_FILENAME =
FILE_FILTER = '*.xls'
WITH_ENCODING =
INITIAL_DIRECTORY =
MULTISELECTION =
CHANGING
FILE_TABLE = T_SEL_FILE
RC = W_RETURN_CODE
USER_ACTION =
FILE_ENCODING =
EXCEPTIONS
FILE_OPEN_DIALOG_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
NOT_SUPPORTED_BY_GUI = 4
OTHERS = 5
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
IF W_RETURN_CODE <> -1.
READ TABLE T_SEL_FILE INTO W_SEL_FILE INDEX 1.
CLEAR P_FILE.
MOVE W_SEL_FILE TO P_FILE.
ENDIF.
*at selection screen
AT SELECTION-SCREEN ON P_SESSN.
IF P_SESSN IS INITIAL.
P_SESSN = 'RECURRING'.
ENDIF.
AT SELECTION-SCREEN ON P_SESSN2.
IF P_SESSN2 IS INITIAL.
P_SESSN2 = 'RECURRING_E'.
ENDIF.
*********************Start of Selection ****************************
START-OF-SELECTION.
OPEN DATASET P_FILE FOR INPUT IN TEXT MODE ENCODING DEFAULT.
*error message when file not found.
IF SY-SUBRC <> 0.
MESSAGE 'File Not Found' TYPE 'E'.
ENDIF.
********************************************************************
*********************************************************************
DO.
READ DATASET P_FILE INTO w_datain.
IF SY-SUBRC EQ 0.
perform pre_process_record using w_datain
changing w_data.
PERFORM VALIDATE_DATA TABLES T_DATA
T_ERROR
USING W_DATA.
ELSE.
EXIT.
ENDIF.
ENDDO.
CLOSE DATASET P_FILE.
********************************************************************
*check if any error has occured.
IF T_ERROR[] IS NOT INITIAL.
PERFORM FILL_BDC_TABLE TABLES T_ERROR
T_BDCDATA
USING P_SESSN2.
ENDIF.
*Check if any records are present to be uploaded.
IF T_DATA[] IS NOT INITIAL.
PERFORM FILL_BDC_TABLE TABLES T_DATA
T_BDCDATA
USING P_SESSN.
ELSE.
WRITE 😕 'No Correct Records were found to create session in SM35',
/ 'Please Check the File'.
ENDIF.
&----
*& Form validate_data
&----
Sub routine to check correctness of the uploaded data.
----
-->P_T_DATA table to upload correct entries
-->P_T_ERROR table to upload erroneous entries
-->P_W_DATA current record
----
FORM VALIDATE_DATA TABLES P_T_DATA STRUCTURE W_DATA
P_T_ERROR STRUCTURE W_ERROR
USING P_W_DATA.
DATA : L_W_LIFNR TYPE LFA1-LIFNR,
L_W_SAKNR TYPE SKA1-SAKNR.
DATA: L_W_DATA TYPE TY_DATA,
L_W_ERROR TYPE TY_ERROR.
MOVE P_W_DATA TO L_W_DATA.
DATA : L_FG_ERROR TYPE C,
L_W_DATE TYPE SY-DATUM.
CONSTANTS : C_X TYPE C VALUE 'X',
C_O2CA(4) TYPE C VALUE 'O2CA',
C_ZK_1(2) TYPE C VALUE 'ZK',
C_ZK_2(2) TYPE C VALUE 'zk',
C_NUM(17) TYPE C VALUE '01234567890/.-, ',
C_31(2) TYPE C VALUE '31',
C_40(2) TYPE C VALUE '40'.
L_FG_ERROR = SPACE.
DO.
*check document type is 'ZK'
IF NOT L_W_DATA-BLART NE C_ZK_1 OR
L_W_DATA-BLART NE C_ZK_2.
L_FG_ERROR = C_X.
EXIT.
ENDIF.
*check 1 item text fields are filled by numeric value.
IF NOT L_W_DATA-SGTXT_1 CO C_NUM.
L_FG_ERROR = C_X.
EXIT.
ENDIF.
*check 2 item text fields are filled by date.
MOVE L_W_DATA-SGTXT_2 TO L_W_DATE.
CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
EXPORTING
DATE = L_W_DATE
EXCEPTIONS
PLAUSIBILITY_CHECK_FAILED = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
L_FG_ERROR = C_X.
EXIT.
ENDIF.
*check first posting key is '31'
IF NOT L_W_DATA-BSCHL_1 EQ C_31.
L_FG_ERROR = C_X.
EXIT.
ENDIF.
*check second posting key is '40'
IF NOT L_W_DATA-BSCHL_2 EQ C_40.
L_FG_ERROR = C_X.
EXIT.
ENDIF.
*check valid Vendor
SELECT SINGLE LIFNR FROM LFA1 INTO L_W_LIFNR
WHERE LIFNR = L_W_DATA-HKONT_1.
IF SY-SUBRC <> 0.
L_FG_ERROR = C_X.
EXIT.
ENDIF.
*check valid G/L account.
SELECT SINGLE SAKNR FROM SKA1 INTO L_W_SAKNR
WHERE KTOPL = C_O2CA AND
SAKNR = L_W_DATA-HKONT_2.
IF SY-SUBRC <> 0.
L_FG_ERROR = C_X.
EXIT.
ENDIF.
*check 1 item assignment contains numeric value
IF NOT L_W_DATA-ZUONR_1 CO C_NUM.
L_FG_ERROR = C_X.
EXIT.
ENDIF.
*check 2 item assigment contains date value
MOVE L_W_DATA-ZUONR_2 TO L_W_DATE.
CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
EXPORTING
DATE = L_W_DATE
EXCEPTIONS
PLAUSIBILITY_CHECK_FAILED = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
L_FG_ERROR = C_X.
EXIT.
ENDIF.
*check if no error has occured
IF NOT L_FG_ERROR EQ C_X.
EXIT.
ENDIF.
ENDDO.
*check error flag and insert error text.
CASE L_FG_ERROR.
WHEN C_X. "When error has occured.
APPEND L_W_DATA TO P_T_ERROR.
WHEN OTHERS. "When no error has occured.
APPEND L_W_DATA TO P_T_DATA.
ENDCASE.
ENDFORM. " validate_data
&----
*& Form download_error_log
&----
Sub routine to download the error log
----
-->P_T_ERROR error log
----
FORM DOWNLOAD_ERROR_LOG TABLES P_T_ERROR STRUCTURE W_ERROR.
DATA : L_FILENAME TYPE STRING,
L_PATH TYPE STRING,
L_FULLPATH TYPE STRING.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
EXPORTING
WINDOW_TITLE = 'Save the Error log'
CHANGING
FILENAME = L_FILENAME
PATH = L_PATH
FULLPATH = L_FULLPATH
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CHECK L_FULLPATH IS NOT INITIAL.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = L_FULLPATH
FILETYPE = 'ASC'
WRITE_FIELD_SEPARATOR = 'X'
TABLES
DATA_TAB = P_T_ERROR
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6
HEADER_NOT_ALLOWED = 7
SEPARATOR_NOT_ALLOWED = 8
FILESIZE_NOT_ALLOWED = 9
HEADER_TOO_LONG = 10
DP_ERROR_CREATE = 11
DP_ERROR_SEND = 12
DP_ERROR_WRITE = 13
UNKNOWN_DP_ERROR = 14
ACCESS_DENIED = 15
DP_OUT_OF_MEMORY = 16
DISK_FULL = 17
DP_TIMEOUT = 18
FILE_NOT_FOUND = 19
DATAPROVIDER_EXCEPTION = 20
CONTROL_FLUSH_ERROR = 21
OTHERS = 22.
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. " download_error_log
&----
*& Form fill_bdc_table
&----
bdc session is created in SM35
----
-->P_T_DATA correct data
-->P_T_BDCDATA bdcdata
-->P_P_SESSN session name
----
FORM FILL_BDC_TABLE TABLES P_T_DATA STRUCTURE W_DATA
P_T_BDCDATA STRUCTURE BDCDATA
USING P_P_SESSN.
DATA : L_W_DATA TYPE TY_DATA. "workarea for t_data
CONSTANTS: C_EUR(3) TYPE C VALUE 'EUR'.
*open batch
PERFORM OPEN_GROUP USING P_P_SESSN.
LOOP AT P_T_DATA INTO L_W_DATA.
*clear the bdc table
REFRESH P_T_BDCDATA.
*initial screen
PERFORM BDC_DYNPRO TABLES P_T_BDCDATA
USING 'SAPMF05A' '0106'.
PERFORM : BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_CURSOR' 'BKPF-WAERS',
BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_OKCODE' '/00', "enter
BDC_FIELD TABLES P_T_BDCDATA USING 'BKPF-BUKRS' L_W_DATA-BUKRS, "company code
BDC_FIELD TABLES P_T_BDCDATA USING 'BKDF-DBBDT' L_W_DATA-DBBDT, "first run on
BDC_FIELD TABLES P_T_BDCDATA USING 'BKDF-DBATR' L_W_DATA-DBATR, "next run on
BDC_FIELD TABLES P_T_BDCDATA USING 'BKDF-DBEDT' L_W_DATA-DBEDT, "last run on
BDC_FIELD TABLES P_T_BDCDATA USING 'BKDF-DBMON' L_W_DATA-DBMON, "run frequency
BDC_FIELD TABLES P_T_BDCDATA USING 'BKDF-DBTAG' L_W_DATA-DBTAG, "run date
BDC_FIELD TABLES P_T_BDCDATA USING 'BKPF-BLART' L_W_DATA-BLART, "document type
BDC_FIELD TABLES P_T_BDCDATA USING 'BKPF-WAERS' C_EUR, "currency
BDC_FIELD TABLES P_T_BDCDATA USING 'BKPF-XBLNR' L_W_DATA-XBLNR, "reference
BDC_FIELD TABLES P_T_BDCDATA USING 'BKPF-BKTXT' L_W_DATA-BKTXT, "document header data
BDC_FIELD TABLES P_T_BDCDATA USING 'RF05A-NEWBS' L_W_DATA-BSCHL_1,"posting key
BDC_FIELD TABLES P_T_BDCDATA USING 'RF05A-NEWKO' L_W_DATA-HKONT_1."account no
*second screen (First line item)
PERFORM BDC_DYNPRO TABLES P_T_BDCDATA
USING 'SAPMF05A' '0302'.
PERFORM : BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_CURSOR' 'RF05A-NEWKO',
BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_OKCODE' '/00', "enter
BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-WRBTR' L_W_DATA-MWSTS2_1, "amount in LC
BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-MWSKZ' L_W_DATA-MWSKZ_1, "tax code
BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-ZUONR' L_W_DATA-ZUONR_1, "assignment
BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-SGTXT' L_W_DATA-SGTXT_1, "item level text
BDC_FIELD TABLES P_T_BDCDATA USING 'RF05A-NEWBS' L_W_DATA-BSCHL_2, "posting key
BDC_FIELD TABLES P_T_BDCDATA USING 'RF05A-NEWKO' L_W_DATA-HKONT_2. "account no
*third screen (Second line item)
PERFORM BDC_DYNPRO TABLES P_T_BDCDATA
USING 'SAPMF05A' '0300'.
PERFORM : BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_CURSOR' 'BSEG-EBELN',
BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_OKCODE' '=AB', "overview button
BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-WRBTR' L_W_DATA-MWSTS2_2, "amount in LC
BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-MWSKZ' L_W_DATA-MWSKZ_2, "tax code
BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-ZUONR' L_W_DATA-ZUONR_2, "assigment
BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-SGTXT' L_W_DATA-SGTXT_2. "item text
*fourth screen (pop up)
PERFORM BDC_DYNPRO TABLES P_T_BDCDATA
USING 'SAPLKACB' '0002'.
PERFORM : BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_CURSOR' 'COBL-KOSTL',
BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_OKCODE' '=ENTE', "ok button
BDC_FIELD TABLES P_T_BDCDATA USING 'COBL-KOSTL' L_W_DATA-KOSTL, "cost center
BDC_FIELD TABLES P_T_BDCDATA USING 'COBL-AUFNR' L_W_DATA-AUFNR. "order number
*fifth screen
PERFORM BDC_FIELD TABLES P_T_BDCDATA
USING 'SAPMF05A' '0070'.
PERFORM : BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_CURSOR' 'RF05A-NEWBS',
BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_OKCODE' '=BU'. "save document
PERFORM BDC_INSERT TABLES P_T_BDCDATA
USING 'ZREC_ENTRY'.
ENDLOOP.
*close the batch.
PERFORM CLOSE_GROUP.
ENDFORM. " fill_bdc_table
&----
*& Form bdc_dynpro
&----
bdc screen insert sub routine
----
-->P_T_BDCDATA BDC table
-->P_PROGRAM Program name
-->P_SCREEN Screen no
----
FORM BDC_DYNPRO TABLES P_T_BDCDATA STRUCTURE BDCDATA
USING VALUE(P_PROGRAM)
VALUE(P_SCREEN).
CONSTANTS C_X TYPE C VALUE 'X'.
DATA L_W_BDCDATA TYPE BDCDATA.
L_W_BDCDATA-PROGRAM = P_PROGRAM.
L_W_BDCDATA-DYNPRO = P_SCREEN.
L_W_BDCDATA-DYNBEGIN = C_X.
APPEND L_W_BDCDATA TO P_T_BDCDATA.
ENDFORM. " bdc_dynpro
&----
*& Form bdc_field
&----
bdc field screen routine
----
-->P_T_BDCDATA BDC table
-->P_FIELD Field name
-->P_VALUE Value
----
FORM BDC_FIELD TABLES P_T_BDCDATA STRUCTURE BDCDATA
USING VALUE(P_FIELD)
VALUE(P_VALUE).
DATA L_W_BDCDATA TYPE BDCDATA. "Work area
L_W_BDCDATA-FNAM = P_FIELD.
L_W_BDCDATA-FVAL = P_VALUE.
APPEND L_W_BDCDATA TO P_T_BDCDATA.
ENDFORM. " bdc_field
&----
*& Form open_group
&----
bdc open group in sm35
----
-->P_P_SESSN session name
----
FORM OPEN_GROUP USING P_P_SESSN.
CONSTANTS C_X TYPE C VALUE 'X'.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT
GROUP = P_P_SESSN
KEEP = C_X
USER = SY-UNAME
PROG = SY-CPROG
EXCEPTIONS
CLIENT_INVALID = 1
DESTINATION_INVALID = 2
GROUP_INVALID = 3
GROUP_IS_LOCKED = 4
HOLDDATE_INVALID = 5
INTERNAL_ERROR = 6
QUEUE_ERROR = 7
RUNNING = 8
SYSTEM_LOCK_ERROR = 9
USER_INVALID = 10
OTHERS = 11.
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. " open_group
&----
*& Form bdc_insert
&----
bdc insert in sm35
----
-->P_T_BDCDATA bdcdata table
-->P_tcode transaction
----
FORM BDC_INSERT TABLES P_T_BDCDATA STRUCTURE BDCDATA
USING VALUE(P_TCODE).
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = P_TCODE
TABLES
DYNPROTAB = P_T_BDCDATA
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
&----
*& Form close_group
&----
bdc close group in sm35
----
*
----
FORM CLOSE_GROUP .
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
NOT_OPEN = 1
QUEUE_ERROR = 2
OTHERS = 3.
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. " close_group
&----
*& Form pre_process_record
&----
text
----
-->P_W_DATAIN text
<--P_W_DATA text
----
FORM pre_process_record USING P_W_DATAIN
CHANGING P_W_DATA.
move p_w_datain to p_w_data-bukrs.
ENDFORM. " pre_process_record
‎2006 Nov 16 2:42 PM
In the last FORM defintion, you need to specify the structure of P_W_DATA.
*&-------------------------------------------------*
*& Form pre_process_record
*&-------------------------------------------------*
* text
*--------------------------------------------------*
* -->P_W_DATAIN text
* <--P_W_DATA text
*--------------------------------------------------*
FORM pre_process_record USING P_W_DATAIN
CHANGING P_W_DATA LIKE w_data.
move p_w_datain to p_w_data-bukrs.
ENDFORM. " pre_process_record
‎2006 Nov 16 2:42 PM
In the last FORM defintion, you need to specify the structure of P_W_DATA.
*&-------------------------------------------------*
*& Form pre_process_record
*&-------------------------------------------------*
* text
*--------------------------------------------------*
* -->P_W_DATAIN text
* <--P_W_DATA text
*--------------------------------------------------*
FORM pre_process_record USING P_W_DATAIN
CHANGING P_W_DATA LIKE w_data.
move p_w_datain to p_w_data-bukrs.
ENDFORM. " pre_process_record
‎2006 Nov 16 2:46 PM
‎2006 Nov 16 2:42 PM
W_data is a structure , but its saying it is not a workarea.
Regards
Narendiran Rathinavelu
‎2006 Nov 16 2:42 PM
Hi Naren,
Let me know what syntax error is occured?
Regards,
Vinod.
‎2006 Nov 16 2:45 PM
‎2006 Nov 16 2:47 PM
copy paste this code
*&---------------------------------------------------------------------*
*& Report ZTEST_RECUPLOAD
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZTEST_RECUPLOAD.
*include bdcrecx1.
*******************Selection screen*************************************
SELECTION-SCREEN BEGIN OF BLOCK 1 WITH FRAME TITLE TEXT-T01 .
PARAMETERS P_FILE TYPE RLGRAP-FILENAME OBLIGATORY.
PARAMETERS P_SESSN TYPE APQI-GROUPID DEFAULT 'RECURRING'.
PARAMETERS P_SESSN2 TYPE APQI-GROUPID DEFAULT 'RECURRING_E'.
SELECTION-SCREEN END OF BLOCK 1.
*********************Type declaration***********************************
*type for data input table
TYPES : BEGIN OF TY_DATA,
BUKRS TYPE T001-BUKRS, "Company code
BLART TYPE BKPF-BLART, "Document type
* BUDAT TYPE BKPF-BUDAT, "Posting date
DBBDT TYPE BKDF-DBBDT, "First run
DBATR TYPE BKDF-DBATR, "Next run
DBEDT TYPE BKDF-DBEDT, "last run
DBMON TYPE BKDF-DBMON, "Run frequency
DBTAG TYPE BKDF-DBTAG, "Run date
* DBZHL TYPE BKDF-DBZHL, "no of runs
XBLNR TYPE BKPF-XBLNR, "reference(site)
BKTXT TYPE BKPF-BKTXT, "document header data
* USNAM TYPE BKPF-USNAM, "User name
* CPUDT TYPE BKPF-CPUDT, "Entry date
BSCHL_1 TYPE BSEG-BSCHL, "Posting key 1 item
HKONT_1 TYPE BSEG-HKONT, "Account 1 item
DESC_1 TYPE CHAR40, "Description vendor/GL 1 item
MWSKZ_1 TYPE BSEG-MWSKZ, "Tax code 1 item
* MWSTS1_1 TYPE BSEG-MWSTS, "Tax Amount 1 item
MWSTS2_1 TYPE BSEG-MWSTS, "Amount is local currency 1 item
* MWSTS3_1 TYPE BSEG-MWSTS, "Amount is foreign currency 1 item
SGTXT_1 TYPE BSEG-SGTXT, "Item text 1 item
ZUONR_1 TYPE BSEG-ZUONR, "Assignment 1 item
BSCHL_2 TYPE BSEG-BSCHL, "Posting key 2 item
HKONT_2 TYPE BSEG-HKONT, "Account 2 item
DESC_2 TYPE CHAR40, "Description vendor/GL 2 item
MWSKZ_2 TYPE BSEG-MWSKZ, "Tax code 2 item
** MWSTS1_2 TYPE BSEG-MWSTS, "Tax Amount 2 item
MWSTS2_2 TYPE BSEG-MWSTS, "Amount is local currency 2 item
* MWSTS3_2 TYPE BSEG-MWSTS, "Amount is foreign currency 2 item
KOSTL TYPE COBL-KOSTL, "Cost center
AUFNR TYPE COBL-AUFNR, "Internal order number
SGTXT_2 TYPE BSEG-SGTXT, "Item text 2 item
ZUONR_2 TYPE BSEG-ZUONR, "Assignment 2 item
END OF TY_DATA.
*type for data error table
TYPES : BEGIN OF TY_ERROR,
BUKRS TYPE T001-BUKRS, "Company code
BLART TYPE BKPF-BLART, "Document type
* BUDAT TYPE BKPF-BUDAT, "Posting date
DBBDT TYPE BKDF-DBBDT, "First run
DBATR TYPE BKDF-DBATR, "Next run
DBEDT TYPE BKDF-DBEDT, "last run
DBMON TYPE BKDF-DBMON, "Run frequency
DBTAG TYPE BKDF-DBTAG, "Run date
* DBZHL TYPE BKDF-DBZHL, "no of runs
XBLNR TYPE BKPF-XBLNR, "reference(site)
BKTXT TYPE BKPF-BKTXT, "document header data
* USNAM TYPE BKPF-USNAM, "User name
* CPUDT TYPE BKPF-CPUDT, "Entry date
BSCHL_1 TYPE BSEG-BSCHL, "Posting key 1 item
HKONT_1 TYPE BSEG-HKONT, "Account 1 item
DESC_1 TYPE CHAR40, "Description vendor/GL 1 item
MWSKZ_1 TYPE BSEG-MWSKZ, "Tax code 1 item
* MWSTS1_1 TYPE BSEG-MWSTS, "Tax Amount 1 item
MWSTS2_1 TYPE BSEG-MWSTS, "Amount is local currency 1 item
* MWSTS3_1 TYPE BSEG-MWSTS, "Amount is foreign currency 1 item
SGTXT_1 TYPE BSEG-SGTXT, "Item text 1 item
ZUONR_1 TYPE BSEG-ZUONR, "Assignment 1 item
BSCHL_2 TYPE BSEG-BSCHL, "Posting key 2 item
HKONT_2 TYPE BSEG-HKONT, "Account 2 item
DESC_2 TYPE CHAR40, "Description vendor/GL 2 item
MWSKZ_2 TYPE BSEG-MWSKZ, "Tax code 2 item
* MWSTS1_2 TYPE BSEG-MWSTS, "Tax Amount 2 item
MWSTS2_2 TYPE BSEG-MWSTS, "Amount is local currency 2 item
* MWSTS3_2 TYPE BSEG-MWSTS, "Amount is foreign currency 2 item
KOSTL TYPE COBL-KOSTL, "Cost center
AUFNR TYPE COBL-AUFNR, "Internal order number
SGTXT_2 TYPE BSEG-SGTXT, "Item text 2 item
ZUONR_2 TYPE BSEG-ZUONR, "Assignment 2 item
END OF TY_ERROR.
*********************Data declaration************************************
DATA : T_DATA TYPE TABLE OF TY_DATA, "Table to upload correct entries
T_ERROR TYPE TABLE OF TY_ERROR. "Table to upload error data
DATA : W_DATA type TY_DATA, "workarea for t_data
W_ERROR TYPE TY_ERROR. "workarea for t_error
DATA : T_BDCDATA TYPE TABLE OF BDCDATA,
W_BDCDATA TYPE BDCDATA.
DATA : T_SEL_FILE TYPE FILETABLE,
W_RETURN_CODE TYPE I VALUE '0',
W_SEL_FILE LIKE LINE OF T_SEL_FILE.
DATA : T_DATAIN TYPE TABLE OF TY_DATA,
W_DATAIN TYPE string.
DATA : W_FILE TYPE STRING.
*********************At Selection Screen**********************************
*selection screen validations
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
WINDOW_TITLE = 'Select File for upload'
* DEFAULT_EXTENSION =
* DEFAULT_FILENAME =
FILE_FILTER = '*.xls'
* WITH_ENCODING =
* INITIAL_DIRECTORY =
* MULTISELECTION =
CHANGING
FILE_TABLE = T_SEL_FILE
RC = W_RETURN_CODE
* USER_ACTION =
* FILE_ENCODING =
EXCEPTIONS
FILE_OPEN_DIALOG_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
NOT_SUPPORTED_BY_GUI = 4
OTHERS = 5
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
IF W_RETURN_CODE <> -1.
READ TABLE T_SEL_FILE INTO W_SEL_FILE INDEX 1.
CLEAR P_FILE.
MOVE W_SEL_FILE TO P_FILE.
ENDIF.
*at selection screen
AT SELECTION-SCREEN ON P_SESSN.
IF P_SESSN IS INITIAL.
P_SESSN = 'RECURRING'.
ENDIF.
AT SELECTION-SCREEN ON P_SESSN2.
IF P_SESSN2 IS INITIAL.
P_SESSN2 = 'RECURRING_E'.
ENDIF.
*********************Start of Selection ****************************
START-OF-SELECTION.
OPEN DATASET P_FILE FOR INPUT IN TEXT MODE ENCODING DEFAULT.
*error message when file not found.
IF SY-SUBRC <> 0.
MESSAGE 'File Not Found' TYPE 'E'.
ENDIF.
********************************************************************
*********************************************************************
DO.
READ DATASET P_FILE INTO w_datain.
IF SY-SUBRC EQ 0.
perform pre_process_record using w_datain
changing w_data.
PERFORM VALIDATE_DATA TABLES T_DATA
T_ERROR
USING W_DATA.
ELSE.
EXIT.
ENDIF.
ENDDO.
CLOSE DATASET P_FILE.
********************************************************************
*check if any error has occured.
IF T_ERROR[] IS NOT INITIAL.
PERFORM FILL_BDC_TABLE TABLES T_ERROR
T_BDCDATA
USING P_SESSN2.
ENDIF.
*Check if any records are present to be uploaded.
IF T_DATA[] IS NOT INITIAL.
PERFORM FILL_BDC_TABLE TABLES T_DATA
T_BDCDATA
USING P_SESSN.
ELSE.
WRITE :/ 'No Correct Records were found to create session in SM35',
/ 'Please Check the File'.
ENDIF.
*&---------------------------------------------------------------------*
*& Form validate_data
*&---------------------------------------------------------------------*
* Sub routine to check correctness of the uploaded data.
*----------------------------------------------------------------------*
* -->P_T_DATA table to upload correct entries
* -->P_T_ERROR table to upload erroneous entries
* -->P_W_DATA current record
*----------------------------------------------------------------------*
FORM VALIDATE_DATA TABLES P_T_DATA STRUCTURE W_DATA
P_T_ERROR STRUCTURE W_ERROR
USING P_W_DATA structure w_data .
DATA : L_W_LIFNR TYPE LFA1-LIFNR,
L_W_SAKNR TYPE SKA1-SAKNR.
DATA: L_W_DATA TYPE TY_DATA,
L_W_ERROR TYPE TY_ERROR.
MOVE P_W_DATA TO L_W_DATA.
DATA : L_FG_ERROR TYPE C,
L_W_DATE TYPE SY-DATUM.
CONSTANTS : C_X TYPE C VALUE 'X',
C_O2CA(4) TYPE C VALUE 'O2CA',
C_ZK_1(2) TYPE C VALUE 'ZK',
C_ZK_2(2) TYPE C VALUE 'zk',
C_NUM(17) TYPE C VALUE '01234567890/.-, ',
C_31(2) TYPE C VALUE '31',
C_40(2) TYPE C VALUE '40'.
L_FG_ERROR = SPACE.
DO.
*check document type is 'ZK'
IF NOT L_W_DATA-BLART NE C_ZK_1 OR
L_W_DATA-BLART NE C_ZK_2.
L_FG_ERROR = C_X.
EXIT.
ENDIF.
*check 1 item text fields are filled by numeric value.
IF NOT L_W_DATA-SGTXT_1 CO C_NUM.
L_FG_ERROR = C_X.
EXIT.
ENDIF.
*check 2 item text fields are filled by date.
MOVE L_W_DATA-SGTXT_2 TO L_W_DATE.
CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
EXPORTING
DATE = L_W_DATE
EXCEPTIONS
PLAUSIBILITY_CHECK_FAILED = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
L_FG_ERROR = C_X.
EXIT.
ENDIF.
*check first posting key is '31'
IF NOT L_W_DATA-BSCHL_1 EQ C_31.
L_FG_ERROR = C_X.
EXIT.
ENDIF.
*check second posting key is '40'
IF NOT L_W_DATA-BSCHL_2 EQ C_40.
L_FG_ERROR = C_X.
EXIT.
ENDIF.
*check valid Vendor
SELECT SINGLE LIFNR FROM LFA1 INTO L_W_LIFNR
WHERE LIFNR = L_W_DATA-HKONT_1.
IF SY-SUBRC <> 0.
L_FG_ERROR = C_X.
EXIT.
ENDIF.
*check valid G/L account.
SELECT SINGLE SAKNR FROM SKA1 INTO L_W_SAKNR
WHERE KTOPL = C_O2CA AND
SAKNR = L_W_DATA-HKONT_2.
IF SY-SUBRC <> 0.
L_FG_ERROR = C_X.
EXIT.
ENDIF.
*check 1 item assignment contains numeric value
IF NOT L_W_DATA-ZUONR_1 CO C_NUM.
L_FG_ERROR = C_X.
EXIT.
ENDIF.
*check 2 item assigment contains date value
MOVE L_W_DATA-ZUONR_2 TO L_W_DATE.
CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
EXPORTING
DATE = L_W_DATE
EXCEPTIONS
PLAUSIBILITY_CHECK_FAILED = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
L_FG_ERROR = C_X.
EXIT.
ENDIF.
*check if no error has occured
IF NOT L_FG_ERROR EQ C_X.
EXIT.
ENDIF.
ENDDO.
*check error flag and insert error text.
CASE L_FG_ERROR.
WHEN C_X. "When error has occured.
APPEND L_W_DATA TO P_T_ERROR.
WHEN OTHERS. "When no error has occured.
APPEND L_W_DATA TO P_T_DATA.
ENDCASE.
ENDFORM. " validate_data
*&---------------------------------------------------------------------*
*& Form download_error_log
*&---------------------------------------------------------------------*
* Sub routine to download the error log
*----------------------------------------------------------------------*
* -->P_T_ERROR error log
*----------------------------------------------------------------------*
FORM DOWNLOAD_ERROR_LOG TABLES P_T_ERROR STRUCTURE W_ERROR.
DATA : L_FILENAME TYPE STRING,
L_PATH TYPE STRING,
L_FULLPATH TYPE STRING.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
EXPORTING
WINDOW_TITLE = 'Save the Error log'
CHANGING
FILENAME = L_FILENAME
PATH = L_PATH
FULLPATH = L_FULLPATH
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CHECK L_FULLPATH IS NOT INITIAL.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = L_FULLPATH
FILETYPE = 'ASC'
WRITE_FIELD_SEPARATOR = 'X'
TABLES
DATA_TAB = P_T_ERROR
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6
HEADER_NOT_ALLOWED = 7
SEPARATOR_NOT_ALLOWED = 8
FILESIZE_NOT_ALLOWED = 9
HEADER_TOO_LONG = 10
DP_ERROR_CREATE = 11
DP_ERROR_SEND = 12
DP_ERROR_WRITE = 13
UNKNOWN_DP_ERROR = 14
ACCESS_DENIED = 15
DP_OUT_OF_MEMORY = 16
DISK_FULL = 17
DP_TIMEOUT = 18
FILE_NOT_FOUND = 19
DATAPROVIDER_EXCEPTION = 20
CONTROL_FLUSH_ERROR = 21
OTHERS = 22.
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. " download_error_log
*&---------------------------------------------------------------------*
*& Form fill_bdc_table
*&---------------------------------------------------------------------*
* bdc session is created in SM35
*----------------------------------------------------------------------*
* -->P_T_DATA correct data
* -->P_T_BDCDATA bdcdata
* -->P_P_SESSN session name
*----------------------------------------------------------------------*
FORM FILL_BDC_TABLE TABLES P_T_DATA STRUCTURE W_DATA
P_T_BDCDATA STRUCTURE BDCDATA
USING P_P_SESSN.
DATA : L_W_DATA TYPE TY_DATA. "workarea for t_data
CONSTANTS: C_EUR(3) TYPE C VALUE 'EUR'.
*open batch
PERFORM OPEN_GROUP USING P_P_SESSN.
LOOP AT P_T_DATA INTO L_W_DATA.
*clear the bdc table
REFRESH P_T_BDCDATA.
*initial screen
PERFORM BDC_DYNPRO TABLES P_T_BDCDATA
USING 'SAPMF05A' '0106'.
PERFORM : BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_CURSOR' 'BKPF-WAERS',
BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_OKCODE' '/00', "enter
BDC_FIELD TABLES P_T_BDCDATA USING 'BKPF-BUKRS' L_W_DATA-BUKRS, "company code
BDC_FIELD TABLES P_T_BDCDATA USING 'BKDF-DBBDT' L_W_DATA-DBBDT, "first run on
BDC_FIELD TABLES P_T_BDCDATA USING 'BKDF-DBATR' L_W_DATA-DBATR, "next run on
BDC_FIELD TABLES P_T_BDCDATA USING 'BKDF-DBEDT' L_W_DATA-DBEDT, "last run on
BDC_FIELD TABLES P_T_BDCDATA USING 'BKDF-DBMON' L_W_DATA-DBMON, "run frequency
BDC_FIELD TABLES P_T_BDCDATA USING 'BKDF-DBTAG' L_W_DATA-DBTAG, "run date
BDC_FIELD TABLES P_T_BDCDATA USING 'BKPF-BLART' L_W_DATA-BLART, "document type
BDC_FIELD TABLES P_T_BDCDATA USING 'BKPF-WAERS' C_EUR, "currency
BDC_FIELD TABLES P_T_BDCDATA USING 'BKPF-XBLNR' L_W_DATA-XBLNR, "reference
BDC_FIELD TABLES P_T_BDCDATA USING 'BKPF-BKTXT' L_W_DATA-BKTXT, "document header data
BDC_FIELD TABLES P_T_BDCDATA USING 'RF05A-NEWBS' L_W_DATA-BSCHL_1,"posting key
BDC_FIELD TABLES P_T_BDCDATA USING 'RF05A-NEWKO' L_W_DATA-HKONT_1."account no
*second screen (First line item)
PERFORM BDC_DYNPRO TABLES P_T_BDCDATA
USING 'SAPMF05A' '0302'.
PERFORM : BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_CURSOR' 'RF05A-NEWKO',
BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_OKCODE' '/00', "enter
BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-WRBTR' L_W_DATA-MWSTS2_1, "amount in LC
BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-MWSKZ' L_W_DATA-MWSKZ_1, "tax code
BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-ZUONR' L_W_DATA-ZUONR_1, "assignment
BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-SGTXT' L_W_DATA-SGTXT_1, "item level text
BDC_FIELD TABLES P_T_BDCDATA USING 'RF05A-NEWBS' L_W_DATA-BSCHL_2, "posting key
BDC_FIELD TABLES P_T_BDCDATA USING 'RF05A-NEWKO' L_W_DATA-HKONT_2. "account no
*third screen (Second line item)
PERFORM BDC_DYNPRO TABLES P_T_BDCDATA
USING 'SAPMF05A' '0300'.
PERFORM : BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_CURSOR' 'BSEG-EBELN',
BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_OKCODE' '=AB', "overview button
BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-WRBTR' L_W_DATA-MWSTS2_2, "amount in LC
BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-MWSKZ' L_W_DATA-MWSKZ_2, "tax code
BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-ZUONR' L_W_DATA-ZUONR_2, "assigment
BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-SGTXT' L_W_DATA-SGTXT_2. "item text
*fourth screen (pop up)
PERFORM BDC_DYNPRO TABLES P_T_BDCDATA
USING 'SAPLKACB' '0002'.
PERFORM : BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_CURSOR' 'COBL-KOSTL',
BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_OKCODE' '=ENTE', "ok button
BDC_FIELD TABLES P_T_BDCDATA USING 'COBL-KOSTL' L_W_DATA-KOSTL, "cost center
BDC_FIELD TABLES P_T_BDCDATA USING 'COBL-AUFNR' L_W_DATA-AUFNR. "order number
*fifth screen
PERFORM BDC_FIELD TABLES P_T_BDCDATA
USING 'SAPMF05A' '0070'.
PERFORM : BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_CURSOR' 'RF05A-NEWBS',
BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_OKCODE' '=BU'. "save document
PERFORM BDC_INSERT TABLES P_T_BDCDATA
USING 'ZREC_ENTRY'.
ENDLOOP.
*close the batch.
PERFORM CLOSE_GROUP.
ENDFORM. " fill_bdc_table
*&---------------------------------------------------------------------*
*& Form bdc_dynpro
*&---------------------------------------------------------------------*
* bdc screen insert sub routine
*----------------------------------------------------------------------*
* -->P_T_BDCDATA BDC table
* -->P_PROGRAM Program name
* -->P_SCREEN Screen no
*----------------------------------------------------------------------*
FORM BDC_DYNPRO TABLES P_T_BDCDATA STRUCTURE BDCDATA
USING VALUE(P_PROGRAM)
VALUE(P_SCREEN).
CONSTANTS C_X TYPE C VALUE 'X'.
DATA L_W_BDCDATA TYPE BDCDATA.
L_W_BDCDATA-PROGRAM = P_PROGRAM.
L_W_BDCDATA-DYNPRO = P_SCREEN.
L_W_BDCDATA-DYNBEGIN = C_X.
APPEND L_W_BDCDATA TO P_T_BDCDATA.
ENDFORM. " bdc_dynpro
*&---------------------------------------------------------------------*
*& Form bdc_field
*&---------------------------------------------------------------------*
* bdc field screen routine
*----------------------------------------------------------------------*
* -->P_T_BDCDATA BDC table
* -->P_FIELD Field name
* -->P_VALUE Value
*----------------------------------------------------------------------*
FORM BDC_FIELD TABLES P_T_BDCDATA STRUCTURE BDCDATA
USING VALUE(P_FIELD)
VALUE(P_VALUE).
DATA L_W_BDCDATA TYPE BDCDATA. "Work area
L_W_BDCDATA-FNAM = P_FIELD.
L_W_BDCDATA-FVAL = P_VALUE.
APPEND L_W_BDCDATA TO P_T_BDCDATA.
ENDFORM. " bdc_field
*&---------------------------------------------------------------------*
*& Form open_group
*&---------------------------------------------------------------------*
* bdc open group in sm35
*----------------------------------------------------------------------*
* -->P_P_SESSN session name
*----------------------------------------------------------------------*
FORM OPEN_GROUP USING P_P_SESSN.
CONSTANTS C_X TYPE C VALUE 'X'.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT
GROUP = P_P_SESSN
KEEP = C_X
USER = SY-UNAME
PROG = SY-CPROG
EXCEPTIONS
CLIENT_INVALID = 1
DESTINATION_INVALID = 2
GROUP_INVALID = 3
GROUP_IS_LOCKED = 4
HOLDDATE_INVALID = 5
INTERNAL_ERROR = 6
QUEUE_ERROR = 7
RUNNING = 8
SYSTEM_LOCK_ERROR = 9
USER_INVALID = 10
OTHERS = 11.
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. " open_group
*&---------------------------------------------------------------------*
*& Form bdc_insert
*&---------------------------------------------------------------------*
* bdc insert in sm35
*----------------------------------------------------------------------*
* -->P_T_BDCDATA bdcdata table
* -->P_tcode transaction
*----------------------------------------------------------------------*
FORM BDC_INSERT TABLES P_T_BDCDATA STRUCTURE BDCDATA
USING VALUE(P_TCODE).
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = P_TCODE
TABLES
DYNPROTAB = P_T_BDCDATA
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
*&---------------------------------------------------------------------*
*& Form close_group
*&---------------------------------------------------------------------*
* bdc close group in sm35
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
FORM CLOSE_GROUP .
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
NOT_OPEN = 1
QUEUE_ERROR = 2
OTHERS = 3.
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. " close_group
*&---------------------------------------------------------------------*
*& Form pre_process_record
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_W_DATAIN text
* <--P_W_DATA text
*----------------------------------------------------------------------*
FORM pre_process_record USING P_W_DATAIN
CHANGING P_W_DATA structure w_data.
move p_w_datain to p_w_data-bukrs.
ENDFORM. " pre_process_record