‎2006 Jun 30 9:17 AM
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???
‎2006 Jun 30 9:18 AM
Yes,.
You can put a checkbox for it and then based on selection either call FM BDC_INSERT ot CALL TRANSACTION
‎2006 Jun 30 9:24 AM
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
‎2006 Jun 30 9:32 AM
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
‎2006 Jun 30 9:37 AM
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
‎2006 Jun 30 12:34 PM
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.