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

bdc

Former Member
0 Likes
706

hi friends,

i wanted to make a prog which uses both the methods(session & call transaction). if user selects session then processing is for session & if it is call transaction then call transaction.

how to make a prog for this???

5 REPLIES 5
Read only

Former Member
0 Likes
655

Yes,.

You can put a checkbox for it and then based on selection either call FM BDC_INSERT ot CALL TRANSACTION

Read only

Former Member
0 Likes
655

Hai Salil

Check the following Code

report Z_CALLTRANS_VENDOR_01

no standard page heading line-size 255.

      • Generated data section with specific formatting - DO NOT CHANGE ***

data: begin of it_lfa1 occurs 0,

KTOKK like lfa1-ktokk,

NAME1 like lfa1-name1,

SORTL like lfa1-sortl,

LAND1 like lfa1-land1,

end of it_lfa1.

      • End generated data section ***

data : it_bdc like bdcdata occurs 0 with header line.

*DATA: IT_MESSAGES TYPE TABLE OF BDCMSGCOLL WITH HEADER LINE.

*DATA: LV_MESSAGE(255).

data : it_messages like bdcmsgcoll occurs 0 with header line.

data : V_message(255).

data : V_flag.

data : V_datum1 type sy-datum.

data : begin of it_mesg occurs 0,

message(100),

end of it_mesg.

*V_datum1 = sy-datum-1.

parameters : P_Sess like APQI-GROUPID.

start-of-selection.

perform Get_data.

*perform open_group.

loop at it_lfa1.

perform bdc_dynpro using 'SAPMF02K' '0100'.

perform bdc_field using 'BDC_CURSOR'

'RF02K-KTOKK'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'RF02K-KTOKK'

it_lfa1-KTOKK.

perform bdc_dynpro using 'SAPMF02K' '0110'.

perform bdc_field using 'BDC_CURSOR'

'LFA1-LAND1'.

perform bdc_field using 'BDC_OKCODE'

'=UPDA'.

perform bdc_field using 'LFA1-NAME1'

it_lfa1-name1.

perform bdc_field using 'LFA1-SORTL'

it_lfa1-sortl.

perform bdc_field using 'LFA1-LAND1'

it_lfa1-land1.

call transaction 'XK01' using it_bdc

mode 'N'

update 'S'

messages into it_messages.

if sy-subrc <> 0.

if V_flag <> 'X'.

perform open_group.

V_flag = 'X'.

endif.

perform bdc_transaction. "using 'XK01'.

endif.

perform format_messages.

refresh : it_bdc,it_messages.

.

endloop.

if V_flag = 'X'.

perform close_group.

endif.

&----


*& Form Get_data

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM Get_data .

CALL FUNCTION 'UPLOAD'

EXPORTING

FILENAME = 'C:\srinu_vendor.txt'

FILETYPE = 'DAT'

TABLES

DATA_TAB = it_lfa1

EXCEPTIONS

CONVERSION_ERROR = 1

INVALID_TABLE_WIDTH = 2

INVALID_TYPE = 3

NO_BATCH = 4

UNKNOWN_ERROR = 5

GUI_REFUSE_FILETRANSFER = 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. " Get_data

&----


*& Form bdc_dynpro

&----


  • text

----


  • -->P_0061 text

  • -->P_0062 text

----


FORM BDC_DYNPRO USING PROGRAM DYNPRO.

CLEAR it_BDC.

it_BDC-PROGRAM = PROGRAM.

it_BDC-DYNPRO = DYNPRO.

it_BDC-DYNBEGIN = 'X'.

APPEND it_BDC.

ENDFORM.

----


  • Insert field *

----


FORM BDC_FIELD USING FNAM FVAL.

CLEAR it_BDC.

it_BDC-FNAM = FNAM.

it_BDC-FVAL = FVAL.

APPEND it_BDC.

ENDFORM.

&----


*& Form format_messages

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM format_messages .

loop at it_messages.

CALL FUNCTION 'FORMAT_MESSAGE'

EXPORTING

ID = it_messages-MSGID

LANG = 'EN'

NO = it_messages-MSGNR

V1 = it_messages-MSGV1

V2 = it_messages-MSGV2

V3 = it_messages-MSGV3

V4 = it_messages-MSGV4

IMPORTING

MSG = V_message

EXCEPTIONS

NOT_FOUND = 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.

write : / V_message.

clear : V_message.

endloop.

ENDFORM. " format_messages

&----


*& Form open_group

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM open_group .

CALL FUNCTION 'BDC_OPEN_GROUP'

EXPORTING

CLIENT = SY-MANDT

GROUP = P_Sess

  • HOLDDATE = V_datum1

KEEP = 'X'

USER = SY-UNAME

.

IF SY-SUBRC = 0.

write : / 'Session Creating wit Name : ',P_Sess.

ENDIF.

ENDFORM. " open_group

&----


*& Form close_group

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM close_group .

CALL FUNCTION 'BDC_CLOSE_GROUP'.

ENDFORM. " close_group

&----


*& Form bdc_transaction

&----


  • text

----


  • -->P_0132 text

----


FORM bdc_transaction. "USING VALUE(P_0132).

CALL FUNCTION 'BDC_INSERT'

EXPORTING

TCODE = 'XK01'

  • POST_LOCAL = NOVBLOCAL

  • PRINTING = NOPRINT

  • SIMUBATCH = ' '

  • CTUPARAMS = ' '

TABLES

DYNPROTAB = it_bdc

  • 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_transaction

Thanks & regards

Sreenivasulu P

Read only

Former Member
0 Likes
655

Hi,

For this you have to use "INCLUDE bdcrecx1." in your BDC program. This is a standard BDC program which will give you a selection screen to choose between call transaction or session. Don't forge to copy the SELECTION texts from any standard program.

Chek the following sample code.

-


*----include

INCLUDE bdcrecx1.

*---Passing data to BDC tabel.

PERFORM open_group.

LOOP AT it_output INTO wa_output.

PERFORM bdc_dynpro USING 'MP000600' '2000'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=UPD'.

PERFORM bdc_field USING 'P0006-BEGDA' wa_output-begda.

PERFORM bdc_field USING 'P0006-ENDDA' wa_output-endda.

PERFORM bdc_field USING 'P0006-NAME2' wa_output-name2.

PERFORM bdc_field USING 'P0006-STRAS' wa_output-stras.

PERFORM bdc_field USING 'P0006-HSNMR' wa_output-hsnmr.

PERFORM bdc_field USING 'P0006-LOCAT' wa_output-locat.

PERFORM bdc_field USING 'P0006-PSTLZ' wa_output-pstlz.

PERFORM bdc_field USING 'P0006-ORT01' wa_output-ort01.

PERFORM bdc_field USING 'P0006-ORT02' wa_output-ort02.

PERFORM bdc_field USING 'P0006-STATE' wa_output-state.

PERFORM bdc_field USING 'P0006-LAND1' wa_output-land1.

PERFORM bdc_field USING 'P0006-TELNR' wa_output-telnr.

<u><i><b> PERFORM bdc_transaction USING 'PA30'.</b></i></u>(this is important)

CLEAR wa_output.

ENDLOOP.

PERFORM close_group.

Thanks and Regards,

Bharat Kumar Reddy.V

Message was edited by: Bharat Kumar Reddy Vaka

Read only

Former Member
0 Likes
655

Hi Salil,

Copy and paste this code.

Create a .CSV file and put any of your Zprogram name.Execute this code and press F4 on parameter and accept thsi file and execute

REPORT ztest_bdc.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

PARAMETERS: p_ifile TYPE dxfile-filename.

SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-002.

PARAMETERS: p_sess RADIOBUTTON GROUP g3 "create session

DEFAULT 'X' USER-COMMAND bdc,

p_ctu RADIOBUTTON GROUP g3. "call transaction

SELECTION-SCREEN END OF BLOCK b3.

DATA : BEGIN OF itab OCCURS 0,

str TYPE string,

END OF itab.

data : l_file TYPE string,

t_bdcdata TYPE STANDARD TABLE OF bdcdata,

wa_bdcdata LIKE LINE OF t_bdcdata.

*----


  • AT SELECTION SCREEN ON VALUE REQUEST

*----


  • Value request for the filename.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_ifile.

PERFORM help_input_file.

START-OF-SELECTION.

CLEAR l_file.

l_file = p_ifile.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

filename = l_file

filetype = 'ASC'

TABLES

data_tab = itab

EXCEPTIONS

file_open_error = 1

file_read_error = 2

no_batch = 3

gui_refuse_filetransfer = 4

invalid_type = 5

no_authority = 6

unknown_error = 7

bad_data_format = 8

header_not_allowed = 9

separator_not_allowed = 10

header_too_long = 11

unknown_dp_error = 12

access_denied = 13

dp_out_of_memory = 14

disk_full = 15

dp_timeout = 16

OTHERS = 17.

*Start new session

IF p_sess = 'X'.

PERFORM bdc_open.

ENDIF.

LOOP AT itab.

PERFORM creat_batch_input.

PERFORM bdc_insert.

IF p_ctu = 'X'.

CALL TRANSACTION 'SE38' USING t_bdcdata MODE 'A'.

ENDIF.

ENDLOOP.

IF p_sess = 'X'.

PERFORM bdc_close .

IF SY-SUBRC EQ 0.

MESSAGE I001(ZM) WITH 'Session created check in transaction SM35'.

ENDIF.

ENDIF.

&----


*& Form bdc_open

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM bdc_open .

CALL FUNCTION 'BDC_OPEN_GROUP'

EXPORTING

client = sy-mandt

group = 'ZMUK'

user = sy-uname

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.

ENDFORM. " bdc_open

&----


*& Form creat_batch_input

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM creat_batch_input .

PERFORM bdc_dynpro USING 'SAPLWBABAP' '0100'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=STRT'.

PERFORM bdc_field USING 'RS38M-PROGRAMM'

itab-str.

PERFORM bdc_field USING 'RS38M-FUNC_EDIT'

'X'.

PERFORM bdc_dynpro USING 'SAPLSLVC_FULLSCREEN' '0500'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=&F03'.

PERFORM bdc_dynpro USING 'SAPLWBABAP' '0100'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=BACK'.

PERFORM bdc_field USING 'RS38M-PROGRAMM'

itab-str.

PERFORM bdc_field USING 'RS38M-FUNC_EDIT'

'X'.

ENDFORM. " creat_batch_input

&----


*& Form bdc_insert

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM bdc_insert .

CALL FUNCTION 'BDC_INSERT'

EXPORTING

tcode = 'SE38'

TABLES

dynprotab = t_bdcdata

EXCEPTIONS

internal_error = 1

not_open = 2

queue_error = 3

tcode_invalid = 4

printing_invalid = 5

posting_invalid = 6

OTHERS = 7.

ENDFORM. " bdc_insert

&----


*& Form bdc_dynpro

&----


  • text

----


  • -->P_0168 text

  • -->P_0169 text

----


FORM bdc_dynpro USING p_program TYPE any

p_dynpro TYPE any.

CLEAR wa_bdcdata.

wa_bdcdata-program = p_program.

wa_bdcdata-dynpro = p_dynpro.

wa_bdcdata-dynbegin = 'X'.

APPEND wa_bdcdata TO t_bdcdata.

ENDFORM. " bdc_dynpro

&----


*& Form bdc_field

&----


  • text

----


  • -->P_0179 text

  • -->P_0180 text

----


FORM bdc_field USING p_fnam TYPE any

p_fval TYPE any.

CLEAR wa_bdcdata.

wa_bdcdata-fnam = p_fnam.

wa_bdcdata-fval = p_fval.

CONDENSE wa_bdcdata-fval.

APPEND wa_bdcdata TO t_bdcdata.

ENDFORM. " bdc_field

&----


*& Form bdc_close

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM bdc_close .

CALL FUNCTION 'BDC_CLOSE_GROUP'

EXCEPTIONS

not_open = 1

queue_error = 2

OTHERS = 3.

ENDFORM. " bdc_close

*&----


**& Form help_input_file

*&----


    • text

*----


    • --> p1 text

    • <-- p2 text

*----


FORM help_input_file .

DATA: lt_file_table TYPE filetable,

la_file_table LIKE LINE OF lt_file_table,

l_rc TYPE i,

l_pcdsn TYPE cffile-filename.

REFRESH lt_file_table.

CLEAR la_file_table.

CALL METHOD cl_gui_frontend_services=>file_open_dialog

CHANGING

file_table = lt_file_table

rc = l_rc.

READ TABLE lt_file_table INTO la_file_table INDEX 1.

l_pcdsn = la_file_table-filename.

MOVE l_pcdsn TO p_ifile.

ENDFORM. " help_input_file

Message was edited by: mukesh kumar

Read only

Former Member
0 Likes
655

Hi Salil,

Try this code it will definetly work out...

DATA: F_STOP, " Flag used to stop processing

*--- Internal table for input file for ascii data load

DATA: BEGIN OF I_INFILE_ASC OCCURS 0,

STRING(500) TYPE C,

END OF I_INFILE_ASC.

*--- Internal table to store messages from Call Transaction.

DATA : I_BDCMSGCOLL TYPE STANDARD TABLE OF BDCMSGCOLL WITH HEADER LINE,

*--- Internal table for BDC data

IT_BDCTAB TYPE BDCDATA OCCURS 0 WITH HEADER LINE,

*--- Internal table to hold standard text

I_TDLINES LIKE TLINE OCCURS 0 WITH HEADER LINE.

*--- Internal to hold the records in the text file

DATA : BEGIN OF IT_DATA OCCURS 10,

MATNR(18), " Material Code

MBRSH(1), " Industry sector

MTART(4), " Material Type

WERKS(4), " Plant

LGORT(4), " Storage Location

MAKTX(40), " Material Description

BISMT(18), " Old Material Number

MEINS(3), " Base unit of Measure

MATKL(9), " Material Group

EKGRP(3), " Purchase grp

DISMM(2), " MRP Type

BESKZ(1), " Procurement type

BKLAS(4), " Valuation Class

VPRSV(1), " Price Control

MTVFP(2), " Availability check

END OF IT_DATA.

*--- Internal table to hold the error records.

DATA : BEGIN OF IT_ERROR OCCURS 0.

INCLUDE STRUCTURE IT_DATA.

DATA : MESSAGE(80) TYPE C,

END OF IT_ERROR.

*--- Internal table for session names

DATA : BEGIN OF IT_SESSION OCCURS 0,

NAME(12),

END OF IT_SESSION.

*--- Internal table to hold Collecting messages in the SAP System

DATA : IT_MSG LIKE BDCMSGCOLL OCCURS 10 WITH HEADER LINE.

*--- Internal table to hold error records to be downloaded

DATA : BEGIN OF I_FINAL OCCURS 0,

STRING(1000),

END OF I_FINAL.

*Internal table for session names

DATA : BEGIN OF I_SESSION OCCURS 0,

NAME(12),

END OF I_SESSION.

----


  • CONSTANTS *

----


CONSTANTS : C_FILETYPE LIKE RLGRAP-FILETYPE VALUE 'DAT', " Filetype

C_TCODE LIKE TSTC-TCODE VALUE 'MM01', " Transaction

C_MODE(1) VALUE 'A', " Mode

C_UPDATE(1) VALUE 'S', " Update

C_SESS(9) TYPE C VALUE 'LEGACY'.

----


  • DATA DECLARATIONS *

----


DATA : V_TABIX LIKE SY-TABIX, " Table Index

V_MESG(80), " Message,

V_ERROR TYPE I, " No.of Errors

V_SUCCESS TYPE I, " No.of successes

V_BDC_SESS TYPE APQI-GROUPID VALUE 'UPLOAD',

V_MAX TYPE I VALUE '900', " Max records

V_LINES TYPE I, " No.of records

V_INSERT TYPE I,

V_COUNTER(2) TYPE N, " Sessions

F_OPENSESSION TYPE C,

V_RECORDS TYPE I.

DATA: V_EMPTY TYPE I, " No. of empty records

V_TOTAL TYPE I, " Total no. of records with data

V_SESSION TYPE APQI-GROUPID, " Session name

V_DEL TYPE X VALUE '09'. " To seperate fields in case of Dat

DATA: IT_INTERN TYPE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE.

DATA: V_SFILE(255), " File path

V_EXT(3). " File Extension

----


  • SELECTION SCREEN. *

----


SELECTION-SCREEN BEGIN OF BLOCK SCR1 WITH FRAME TITLE TEXT_001.

PARAMETER : P_FILE TYPE RLGRAP-FILENAME OBLIGATORY DEFAULT " Input File

'C:\Material_master.TXT',

P_ERR TYPE RLGRAP-FILENAME OBLIGATORY DEFAULT " Error File

'C:\Material_master_ERR.TXT'.

PARAMETER: P_FTYPE LIKE RLGRAP-FILETYPE DEFAULT 'DAT'. " File Type

SELECTION-SCREEN END OF BLOCK SCR1.

SELECTION-SCREEN BEGIN OF BLOCK MODE WITH FRAME TITLE TEXT-002.

PARAMETER : P_CT RADIOBUTTON GROUP BDC, " Call Trans

P_BDC RADIOBUTTON GROUP BDC DEFAULT 'X'. " Create BDC sess

PARAMETER : P_SESS1 TYPE APQI-GROUPID OBLIGATORY

DEFAULT C_SESS. " Session name

PARAMETER : P_MAX(4) OBLIGATORY DEFAULT '100', " no.of recs in a session

P_TEST AS CHECKBOX DEFAULT 'X'. " Test mode

PARAMETERS: P_HEADER TYPE I DEFAULT 0. " Header Lines

PARAMETERS: P_BEGCOL TYPE I DEFAULT 1 NO-DISPLAY,

P_BEGROW TYPE I DEFAULT 1 NO-DISPLAY,

P_ENDCOL TYPE I DEFAULT 100 NO-DISPLAY,

P_ENDROW TYPE I DEFAULT 32000 NO-DISPLAY.

SELECTION-SCREEN END OF BLOCK MODE.

----


  • AT SELECTION-SCREEN *

----


AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.

*--- Validating file

PERFORM VALIDATE_FILE USING P_FILE.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_ERR.

*--- Validating file

PERFORM VALIDATE_FILE USING P_ERR.

----


  • START-OF-SELECTION

----


START-OF-SELECTION.

*--- Perform to store the data to an internal table

PERFORM READ_INPUT_DATA.

*--- Perform to get values from the text file

PERFORM FILE_VALIDATION.

*--- Process data in non test mode only

IF P_TEST = SPACE.

IF NOT IT_DATA[] IS INITIAL.

PERFORM PROCESS_DATA.

ELSE.

MESSAGE S003(ZLKPL_MSGCLASS).

F_STOP = 'X'.

STOP.

ENDIF.

ENDIF.

----


  • END OF SELECTION. *

----


END-OF-SELECTION.

IF F_STOP = SPACE.

*--- Perform to display the selection screen report

PERFORM DISPLAY_SEL_SCR_REPORT.

*---- Perform to display the no.of records,success and error records

PERFORM DISPLAY_SUMMARY_REPORT.

*--- Perform to display the session report

PERFORM SESSION_REPORT.

*--- Downloading error records.

PERFORM DOWNLOAD_ERROR_FILES.

*---- Perform to display the error records

PERFORM DISPLAY_ERROR_RECORDS.

ENDIF.

----


  • Form : validate_input_file

----


  • Description : To provide F4 help for file if read from PC

----


FORM VALIDATE_FILE USING F_FILE TYPE RLGRAP-FILENAME.

CALL FUNCTION 'KD_GET_FILENAME_ON_F4'

CHANGING

FILE_NAME = F_FILE

EXCEPTIONS

MASK_TOO_LONG = 1

OTHERS = 2.

IF SY-SUBRC <> 0.

MESSAGE S010(ZLKPL_MSGCLASS). " 'Error in getting filename'.

ENDIF.

ENDFORM. " validate_input_file

----


  • Form : Read_inputfile

----


  • Description : To upload the data into internal table

----


FORM READ_INPUTFILE TABLES F_INFILE

USING F_FILE TYPE RLGRAP-FILENAME

F_FILTYP TYPE RLGRAP-FILETYPE.

CLEAR F_INFILE.

REFRESH F_INFILE.

*--- Function module to upload the input file

CALL FUNCTION 'WS_UPLOAD'

EXPORTING

FILENAME = F_FILE

FILETYPE = F_FILTYP

TABLES

DATA_TAB = F_INFILE

EXCEPTIONS

CONVERSION_ERROR = 1

FILE_OPEN_ERROR = 2

FILE_READ_ERROR = 3

INVALID_TYPE = 4

NO_BATCH = 5

UNKNOWN_ERROR = 6

INVALID_TABLE_WIDTH = 7

GUI_REFUSE_FILETRANSFER = 8

CUSTOMER_ERROR = 9

OTHERS = 10.

IF SY-SUBRC <> 0.

MESSAGE I011(ZLKPL_MSGCLASS). " 'Error in uploading the file'.

F_STOP = 'X'.

STOP.

ENDIF.

ENDFORM. "Read_inputfile

&----


*& Form FORMAT_ASC_DATA

&----


  • To format the ASCII data

----


FORM FORMAT_ASC_DATA.

LOOP AT I_INFILE_ASC.

IT_DATA-MATNR = I_INFILE_ASC-STRING+0(18).

IT_DATA-MBRSH = I_INFILE_ASC-STRING+18(1).

IT_DATA-MTART = I_INFILE_ASC-STRING+19(4).

IT_DATA-WERKS = I_INFILE_ASC-STRING+23(4).

IT_DATA-LGORT = I_INFILE_ASC-STRING+27(4).

IT_DATA-MAKTX = I_INFILE_ASC-STRING+31(40).

IT_DATA-BISMT = I_INFILE_ASC-STRING+71(18).

IT_DATA-MEINS = I_INFILE_ASC-STRING+88(3).

IT_DATA-MATKL = I_INFILE_ASC-STRING+91(9).

IT_DATA-EKGRP = I_INFILE_ASC-STRING+100(3).

IT_DATA-DISMM = I_INFILE_ASC-STRING+103(2).

IT_DATA-BESKZ = I_INFILE_ASC-STRING+104(1).

IT_DATA-BKLAS = I_INFILE_ASC-STRING+108(4).

IT_DATA-VPRSV = I_INFILE_ASC-STRING+112(1).

IT_DATA-MTVFP = I_INFILE_ASC-STRING+113(2).

ENDLOOP.

ENDFORM. " FORMAT_ASC_DATA

----


  • Form FILE_VALIDATION

----


  • To validate data

----


FORM FILE_VALIDATION.

DATA: LV_TABIX LIKE SY-TABIX,

LV_FLAG(1).

LOOP AT IT_DATA.

CLEAR V_MESG.

  • ----- check for the mandatory fields

IF IT_DATA-MAKTX IS INITIAL

OR IT_DATA-MEINS IS INITIAL

OR IT_DATA-MATKL IS INITIAL

OR IT_DATA-EKGRP IS INITIAL

OR IT_DATA-DISMM IS INITIAL

OR IT_DATA-VPRSV IS INITIAL .

LV_TABIX = SY-TABIX.

V_MESG = 'Mandatory fields missing'(002).

  • ----- Perform to store the error record

PERFORM ERROR_PROCESSING. " USING IT_DATA V_MESG.

  • ----- Deleting the record which is initial

DELETE IT_DATA INDEX LV_TABIX.

ENDIF.

ENDLOOP.

CLEAR V_MESG.

ENDFORM. " DATA_VALIDATION

&----


*& Form error_processing

&----


  • To process the error records

----


FORM ERROR_PROCESSING. " USING F_IT_DATA

"F_MESG.

V_ERROR = V_ERROR + 1.

IT_ERROR = IT_DATA.

IT_ERROR-MESSAGE = V_MESG.

APPEND IT_ERROR.

CLEAR IT_ERROR.

ENDFORM. " error_processing

----


  • Form : process_data *

----


  • --- Populating the BDC Data *

----


FORM PROCESS_DATA .

LOOP AT IT_DATA.

CLEAR :IT_BDCTAB,

I_BDCMSGCOLL.

REFRESH:IT_BDCTAB,

I_BDCMSGCOLL.

*--- To fill the data from the text file

PERFORM FILL_BDCDATA.

IF P_CT EQ 'X'.

*--- Posts data using call transaction method.

PERFORM CALL_TRANSACTION.

ELSE.

*--- Posts data using session method.

PERFORM CALL_SESSION USING C_TCODE P_MAX P_SESS1.

ENDIF.

ENDLOOP.

IF F_OPENSESSION = 'X'.

PERFORM CLOSE_SESSION.

ENDIF.

ENDFORM. " PROCESS_DATA

&----


*& Form FILL_BDCDATA

&----


  • To populate the data

----


FORM FILL_BDCDATA.

*--- Perform to populate the data in screen 0060

PERFORM POPULATE_DATA_SCREEN_0060.

*--- Perform to populate the data in screen 0070

PERFORM POPULATE_DATA_SCREEN_0070.

*--- Perform to populate the data in screen 0080

PERFORM POPULATE_DATA_SCREEN_0080.

*--- Perform to populate the data in screen 4004

PERFORM POPULATE_DATA_SCREEN_4004.

*--- Perform to populate the BASIC data 2 in screen 4004

PERFORM POPULATE_BDATA2_SCREEN_4004.

*--- Perform to populate the Purchasing data in screen 4000

PERFORM POPULATE_PURCHASE_SCREEN_4000.

*--- Perform to populate the Purchase order text data in screen 4040

PERFORM POPULATE_PURORDTXT_SCREEN_4040.

*--- Perform to populate the MRP1 in screen 4000

PERFORM POPULATE_MRP1_SCREEN_4000.

*--- Perform to populate the MRP2 in screen 4000

PERFORM POPULATE_MRP2_SCREEN_4000.

*--- Perform to populate the MRP3 in screen 4000

PERFORM POPULATE_MRP3_SCREEN_4000.

*--- Perform to populate the MRP4 in screen 4000

PERFORM POPULATE_MRP4_SCREEN_4000.

*--- Perform to populate the Plant Data & Storage loc in screen 4000

PERFORM POPULATE_P_SL1_SCREEN_4000.

*--- Perform to populate the Plant Data & Storage loc in screen 4000

PERFORM POPULATE_P_SL2_SCREEN_4000.

*--- Perform to populate the Accounting 1 in screen 4000

PERFORM POPULATE_ACC1_SCREEN_4000.

*--- Perform to populate the Accounting 2 in screen 4000

PERFORM POPULATE_ACC2_SCREEN_4000.

ENDFORM. " FILL_BDCDATA

----


  • Start new screen *

----


FORM BDC_DYNPRO USING F_PROGRAM F_DYNPRO.

CLEAR IT_BDCTAB.

IT_BDCTAB-PROGRAM = F_PROGRAM.

IT_BDCTAB-DYNPRO = F_DYNPRO.

IT_BDCTAB-DYNBEGIN = 'X'.

APPEND IT_BDCTAB.

ENDFORM.

----


  • Insert field *

----


FORM BDC_FIELD USING FNAM FVAL.

IF FVAL <> SPACE.

CLEAR IT_BDCTAB.

IT_BDCTAB-FNAM = FNAM.

IT_BDCTAB-FVAL = FVAL.

APPEND IT_BDCTAB.

ENDIF.

ENDFORM.

----


  • Form : call_transaction *

----


*--- Posts data using call transaction method. *

----


FORM CALL_TRANSACTION .

CLEAR: V_LINES,

V_MESG.

*----- call transaction method to upload data

CALL TRANSACTION C_TCODE USING IT_BDCTAB

MODE C_MODE

UPDATE C_UPDATE

MESSAGES INTO I_BDCMSGCOLL.

IF SY-SUBRC <> 0.

DESCRIBE TABLE I_BDCMSGCOLL LINES V_LINES.

READ TABLE I_BDCMSGCOLL INDEX V_LINES TRANSPORTING ALL FIELDS.

*--- Formats message returned by Call transaction.

PERFORM FORMAT_MESSAGE.

*--- Perform to process error processing

PERFORM ERROR_PROCESSING." USING IT_DATA V_MESG.

PERFORM CALL_SESSION USING C_TCODE P_MAX P_SESS1.

ELSE. "If call transaction is successful.

V_SUCCESS = V_SUCCESS + 1.

ENDIF.

ENDFORM. " call_transaction

&----


*& Form format_message

&----


*-------Reading messages

----


FORM FORMAT_MESSAGE.

CLEAR V_MESG.

*--- Function module to get the message.

CALL FUNCTION 'FORMAT_MESSAGE'

EXPORTING

ID = I_BDCMSGCOLL-MSGID

LANG = SY-LANGU

NO = I_BDCMSGCOLL-MSGNR

V1 = I_BDCMSGCOLL-MSGV1

V2 = I_BDCMSGCOLL-MSGV2

V3 = I_BDCMSGCOLL-MSGV3

V4 = I_BDCMSGCOLL-MSGV4

IMPORTING

MSG = V_MESG.

ENDFORM. " format_message

----


  • Form : call_session

----


  • Description : To call the session either for FSP0 or FSP2

----


FORM CALL_SESSION USING FP_TCODE TYPE ANY

F_MAX TYPE ANY

F_SESS1 TYPE ANY.

  • To open the session

PERFORM OPEN_SESSION USING F_MAX F_SESS1.

  • Perform Insert BDC Session

PERFORM BDC_INSERT USING FP_TCODE.

  • To close the session

IF V_INSERT = F_MAX .

PERFORM CLOSE_SESSION.

ENDIF.

ENDFORM. " call_session

----


  • Form : open_session

----


  • Description : Form to open BDC open group.

----


FORM OPEN_SESSION USING F_MAX TYPE ANY

F_SESS1 TYPE ANY.

IF V_INSERT = F_MAX OR F_OPENSESSION = SPACE.

V_COUNTER = V_COUNTER + 1.

CLEAR V_SESSION.

CONCATENATE F_SESS1 '_' V_COUNTER INTO V_SESSION.

  • Opening the BDC Session

CALL FUNCTION 'BDC_OPEN_GROUP'

EXPORTING

CLIENT = SY-MANDT

GROUP = V_SESSION

KEEP = 'X'

USER = SY-UNAME

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 I007(ZLKPL_MSGCLASS). " 'Error in Opening the Session'.

EXIT.

ELSE.

CLEAR V_INSERT.

F_OPENSESSION = 'X'.

ENDIF.

ENDIF.

ENDFORM. " open_session

----


  • Form : bdc_insert

----


  • Description : Form to Insert data.

----


FORM BDC_INSERT USING FP_TCODE TYPE ANY.

  • Inserting BDC

CALL FUNCTION 'BDC_INSERT'

EXPORTING

TCODE = FP_TCODE

TABLES

DYNPROTAB = IT_BDCTAB

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 I007(ZLKPL_MSGCLASS). " 'Error in inserting the record'.

ELSE.

V_INSERT = V_INSERT + 1.

ENDIF.

ENDFORM. " bdc_insert

----


  • Form : close_session

----


  • Description : To close the session

----


FORM CLOSE_SESSION.

CALL FUNCTION 'BDC_CLOSE_GROUP'

EXCEPTIONS

NOT_OPEN = 1

QUEUE_ERROR = 2

OTHERS = 3.

IF SY-SUBRC <> 0.

MESSAGE I007(ZLKPL_MSGCLASS). " 'Session cannot be closed'.

ELSE.

I_SESSION-NAME = V_SESSION.

APPEND I_SESSION.

CLEAR I_SESSION.

CLEAR F_OPENSESSION.

ENDIF.

ENDFORM. " close_session

&----


*& Form DISPLAY_SUCCESS_ERROR_DATA

&----


  • To display the no.of records,success and error records

----


FORM DISPLAY_SUMMARY_REPORT.

SKIP 3.

FORMAT COLOR COL_HEADING INTENSIFIED ON.

WRITE :/1(132) SY-ULINE.

WRITE :/1(1) SY-VLINE,

65 'SUMMARY REPORT'(003),

132(1) SY-VLINE.

FORMAT INTENSIFIED OFF.

PERFORM COLOR_FILL.

WRITE :/1(132) SY-ULINE.

WRITE :/1(1) SY-VLINE,

2(24) 'Processed Records'(004),

27(2) ' : ',

30 V_TOTAL,

132(1) SY-VLINE.

PERFORM COLOR_FILL.

WRITE :/1(1) SY-VLINE,

2(24) 'Successfully Uploaded'(005),

27(2) ' : ',

30 V_SUCCESS,

132(1) SY-VLINE.

PERFORM COLOR_FILL.

WRITE :/1(1) SY-VLINE,

2(24) 'Error Records'(006),

27(2) ' : ',

30 V_ERROR,

132(1) SY-VLINE.

PERFORM COLOR_FILL.

WRITE :/1(1) SY-VLINE,

2(24) 'Empty Records'(007),

27(2) ' : ',

30 V_EMPTY,

132(1) SY-VLINE.

WRITE :/1(132) SY-ULINE.

ENDFORM. " DISPLAY_SUCCESS_ERROR_DATA

&----


*& Form DISPLAY_ERROR_RECORDS

&----


  • To display the error records

----


FORM DISPLAY_ERROR_RECORDS.

IF V_ERROR > 0.

  • ---- Perform to display the error header

PERFORM DISPLAY_ERROR_HEADER.

  • ---- Perform to display the error records

PERFORM DISPLAY_ERROR_DETAIL.

ENDIF.

ENDFORM. " DISPLAY_ERROR_RECORDS

&----


*& Form DISPLAY_ERROR_HEADER

&----


  • To display the error header

----


FORM DISPLAY_ERROR_HEADER.

  • WRITE :/1(89) SY-ULINE.

SKIP.

WRITE :/1(132) SY-ULINE.

WRITE :/1(1) SY-VLINE,

40 'ERROR RECORDS'(008),

132(1) SY-VLINE.

WRITE :/1(132) SY-ULINE.

WRITE : /1(1) SY-VLINE,

2(18) 'Material Number'(009),

20(1) SY-VLINE,

21(4) 'Type'(010),

25(1) SY-VLINE,

26(5) 'Plant'(011),

31(1) SY-VLINE,

32(16) 'storage location'(012),

48(1) SY-VLINE,

49(80) 'Message'(013),

132(1) SY-VLINE.

WRITE :/1(132) SY-ULINE.

ENDFORM. " DISPLAY_ERROR_HEADER

&----


*& Form DISPLAY_ERROR_DETAIL

&----


  • To display the error records

----


FORM DISPLAY_ERROR_DETAIL.

LOOP AT IT_ERROR.

WRITE : /1(1) SY-VLINE,

2(18) IT_ERROR-MATNR,

20(1) SY-VLINE,

21(4) IT_ERROR-MTART,

25(1) SY-VLINE,

26(5) IT_ERROR-WERKS,

31(1) SY-VLINE,

32(16) IT_ERROR-LGORT,

48(1) SY-VLINE,

49(80) IT_ERROR-MESSAGE,

132(1) SY-VLINE.

ENDLOOP.

WRITE :/1(132) SY-ULINE.

ENDFORM. " DISPLAY_ERROR_DETAIL

FORM DOWNLOAD_ERROR_FILES.

IF NOT IT_ERROR[] IS INITIAL.

IF P_FTYPE = 'DAT'.

LOOP AT IT_ERROR.

CONCATENATE IT_ERROR-MATNR

IT_ERROR-MBRSH

IT_ERROR-MTART

IT_ERROR-WERKS

IT_ERROR-LGORT

IT_ERROR-MAKTX

IT_ERROR-BISMT

IT_ERROR-MEINS

IT_ERROR-MATKL

IT_ERROR-EKGRP

IT_ERROR-DISMM

IT_ERROR-BESKZ

IT_ERROR-BKLAS

IT_ERROR-VPRSV

IT_ERROR-MTVFP

INTO I_FINAL-STRING SEPARATED BY V_DEL.

APPEND I_FINAL.

CLEAR I_FINAL.

ENDLOOP.

CLEAR I_FINAL.

ELSEIF P_FTYPE = 'ASC'.

LOOP AT IT_ERROR.

I_FINAL-STRING+0(18) = IT_ERROR-MATNR.

I_FINAL-STRING+18(1) = IT_ERROR-MBRSH.

I_FINAL-STRING+19(4) = IT_ERROR-MTART.

I_FINAL-STRING+23(4) = IT_ERROR-WERKS.

I_FINAL-STRING+27(4) = IT_ERROR-LGORT.

I_FINAL-STRING+31(40) = IT_ERROR-MAKTX.

I_FINAL-STRING+71(18) = IT_ERROR-BISMT.

I_FINAL-STRING+88(3) = IT_ERROR-MEINS.

I_FINAL-STRING+91(9) = IT_ERROR-MATKL.

I_FINAL-STRING+100(3) = IT_ERROR-EKGRP.

I_FINAL-STRING+103(2) = IT_ERROR-DISMM.

I_FINAL-STRING+104(1) = IT_ERROR-BESKZ.

I_FINAL-STRING+108(4) = IT_ERROR-BKLAS.

I_FINAL-STRING+112(1) = IT_ERROR-VPRSV.

I_FINAL-STRING+113(2) = IT_ERROR-MTVFP.

APPEND I_FINAL.

CLEAR I_FINAL.

ENDLOOP.

ENDIF. "IF P_FTYPE = 'DAT'.

CALL FUNCTION 'WS_DOWNLOAD'

EXPORTING

FILENAME = P_ERR

FILETYPE = P_FTYPE

TABLES

DATA_TAB = I_FINAL

EXCEPTIONS

FILE_OPEN_ERROR = 1

FILE_WRITE_ERROR = 2

INVALID_FILESIZE = 3

INVALID_TYPE = 4

NO_BATCH = 5

UNKNOWN_ERROR = 6

INVALID_TABLE_WIDTH = 7

GUI_REFUSE_FILETRANSFER = 8

CUSTOMER_ERROR = 9

OTHERS = 10.

IF SY-SUBRC <> 0.

  • MESSAGE I000 WITH 'Unable to download Error file'(054).

ENDIF.

ENDIF. "IF NOT I_FILE_ERROR[] IS INITIAL.

ENDFORM. " DOWNLOAD_ERROR_FILES

----


  • Form : session_report

----


  • Description : To display the list of sessions created

----


FORM SESSION_REPORT .

IF NOT I_SESSION[] IS INITIAL.

FORMAT COLOR COL_HEADING.

WRITE :/01(132) SY-ULINE.

WRITE :/01(01) SY-VLINE,

56 'Sessions created'(014),

132(01) SY-VLINE.

WRITE :/01(132) SY-ULINE.

FORMAT COLOR COL_NORMAL INTENSIFIED OFF.

WRITE :/01(132) SY-ULINE.

LOOP AT I_SESSION.

  • perform color_swap.

WRITE : /1 SY-VLINE.

AT FIRST.

WRITE : 5 'Session names'(015).

ENDAT.

WRITE : 50 ':', 52 I_SESSION-NAME,

132 SY-VLINE.

ENDLOOP.

WRITE : /01(132) SY-ULINE.

ENDIF.

ENDFORM. " session_report

&----


*& Form READ_INPUT_DATA

&----


  • text

----


FORM READ_INPUT_DATA.

*--- Splitting the filename and its extension

PERFORM SPLIT_FILENAME_EXT.

CASE V_EXT.

WHEN 'TXT'.

IF P_FTYPE = 'ASC'.

*--- Uploading the data from server

PERFORM READ_INPUTFILE TABLES I_INFILE_ASC

USING P_FILE P_FTYPE.

*--- Perform Formating ASC type data

PERFORM FORMAT_ASC_DATA.

ELSEIF P_FTYPE = 'DAT'.

*--- Uploading the data from server

PERFORM READ_INPUTFILE TABLES IT_DATA

USING P_FILE P_FTYPE.

ENDIF.

WHEN OTHERS.

MESSAGE S000(ZLKPL_MSGCLASS).

F_STOP = 'X'.

STOP.

ENDCASE.

IF NOT IT_DATA[] IS INITIAL.

*--- Perform to delete Header lines

PERFORM DELETE_HEADER_EMPTY_RECS.

ENDIF.

ENDFORM. " READ_INPUT_DATA

&----


*& Form SPLIT_FILENAME_EXT

&----


  • text

----


FORM SPLIT_FILENAME_EXT.

MOVE P_FILE TO V_SFILE.

*--- To get the extensions of the file

CALL FUNCTION 'CV120_SPLIT_FILE'

EXPORTING

PF_FILE = V_SFILE

IMPORTING

  • PFX_FILE =

PFX_EXTENSION = V_EXT

  • PFX_DOTEXTENSION =

.

*--- Checking the case of file extension

IF V_EXT NA SY-ABCDE.

TRANSLATE V_EXT TO UPPER CASE.

ENDIF.

ENDFORM. " SPLIT_FILENAME_EXT

&----


*& Form MOVE_DATA

&----


  • text

----


FORM MOVE_DATA.

DATA : LV_INDEX TYPE I.

FIELD-SYMBOLS <FS>.

*--- Sorting the internal table

SORT IT_INTERN BY ROW COL.

CLEAR IT_INTERN.

LOOP AT IT_INTERN.

MOVE IT_INTERN-COL TO LV_INDEX.

*--- Assigning the each record to an internal table row

ASSIGN COMPONENT LV_INDEX OF STRUCTURE IT_DATA TO <FS>.

*--- Asigning the field value to a field symbol

MOVE IT_INTERN-VALUE TO <FS>.

AT END OF ROW.

APPEND IT_DATA.

CLEAR IT_DATA.

ENDAT.

ENDLOOP.

ENDFORM. " MOVE_DATA

&----


*& Form DISPLAY_SEL_SCR_REPORT

&----


  • text

----


FORM DISPLAY_SEL_SCR_REPORT.

WRITE :/1(132) SY-ULINE.

FORMAT COLOR COL_HEADING INTENSIFIED ON.

WRITE :/1(1) SY-VLINE,

65(65) 'SELECTION SCREEN DATA'(016),

132(1) SY-VLINE.

WRITE :/1(132) SY-ULINE.

FORMAT INTENSIFIED OFF.

*--- Input file name

WRITE :/1(1) SY-VLINE,

2(24) 'Input File name'(017),

27(2) ' : ',

30(100) P_FILE,

132(1) SY-VLINE.

IF NOT IT_ERROR[] IS INITIAL.

*--- Setting the Error file name with .CSV

PERFORM COLOR_FILL.

IF V_EXT = 'XLS'.

IF NOT P_ERR CS '.XLS'.

IF P_ERR CA '.'.

P_ERR = P_ERR(SY-FDPOS).

CONCATENATE P_ERR '.CSV' INTO P_ERR.

ENDIF.

ENDIF.

P_FTYPE = 'DAT'.

V_DEL = '2C'. " Hexadecimal value for ','

ENDIF.

*--- Error File name

PERFORM COLOR_FILL.

WRITE :/1(1) SY-VLINE,

2(24) 'Error File name'(018),

27(2) ' : ',

30(100) P_ERR,

132(1) SY-VLINE.

ENDIF.

*--- File type

WRITE :/1(1) SY-VLINE,

2(24) 'File Type'(019),

27(2) ' : '.

IF V_EXT = 'XLS'.

WRITE :30 'XLS'(020),

132(1) SY-VLINE.

ELSE.

WRITE :30 P_FTYPE,

132(1) SY-VLINE.

ENDIF.

*--- BDC methods

IF P_CT = 'X'.

WRITE :/1(1) SY-VLINE,

2(24) 'Call Transaction'(021),

27(2) ' : ',

30 P_CT,

132(1) SY-VLINE.

ELSE.

WRITE :/1(1) SY-VLINE,

2(24) 'Create Session'(022),

27(2) ' : ',

30 P_BDC,

132(1) SY-VLINE.

ENDIF.

*--- Test Mode

WRITE :/1(1) SY-VLINE,

2(24) 'Test Mode'(023),

27(2) ' : ',

30 P_TEST,

132(1) SY-VLINE.

*--- Header lines

WRITE :/1(1) SY-VLINE,

2(24) 'Header Lines'(024),

27(2) ' : ',

30 P_HEADER LEFT-JUSTIFIED,

132(1) SY-VLINE.

WRITE :/1(132) SY-ULINE.

ENDFORM. " DISPLAY_SEL_SCR_REPORT

FORM DELETE_HEADER_EMPTY_RECS.

DATA: LV_TABIX LIKE SY-TABIX.

IF NOT P_HEADER IS INITIAL.

LOOP AT IT_DATA.

IF P_HEADER > 0 AND NOT IT_DATA IS INITIAL.

DELETE IT_DATA FROM 1 TO P_HEADER.

  • P_HEADER = 0.

EXIT.

ENDIF.

ENDLOOP.

ENDIF.

CLEAR IT_DATA.

*--- To delete the empty lines from internal table

LOOP AT IT_DATA.

LV_TABIX = SY-TABIX.

IF IT_DATA IS INITIAL.

V_EMPTY = V_EMPTY + 1.

DELETE IT_DATA INDEX LV_TABIX..

ENDIF.

ENDLOOP.

CLEAR IT_DATA.

*--- Total no of recs in file

DESCRIBE TABLE IT_DATA LINES V_TOTAL.

IF V_TOTAL = 0.

MESSAGE I012(ZLKPL_MSGCLASS). " No records in the file

F_STOP = 'X'.

STOP.

ENDIF.

ENDFORM.