Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

syntax error

Former Member
0 Likes
1,208

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

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
946

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

6 REPLIES 6
Read only

Former Member
0 Likes
947

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

Read only

0 Likes
946

Thanks it works

Regards

Narendiran Rathinavelu

Read only

Former Member
0 Likes
946

W_data is a structure , but its saying it is not a workarea.

Regards

Narendiran Rathinavelu

Read only

Former Member
0 Likes
946

Hi Naren,

Let me know what syntax error is occured?

Regards,

Vinod.

Read only

RichHeilman
Developer Advocate
Developer Advocate
0 Likes
946

I think the syntax error that you are referring to is coming from here, you need to specify the structure of P_W_DATA.

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

Regards,

Rich Heilman

Read only

Former Member
0 Likes
946
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