04-02-2007 4:54 AM
hi experts,
please help me out in ceating a bdc program for me01,
i have to upload data for me01.as there is a table control i was stuck up ,plz help me out.
tnx u in advance
04-02-2007 7:35 AM
Use transaction SHDB a record the wanted transaction.
You can generate source code for the bim program.
regards,
Hans
Please reward all helpful answers !!!!!
04-02-2007 8:21 AM
HI,
As said earlier, use SHDB tranaction to record the datas. Then get the program code from there. There you include your requirements. Here is a sample code of recording using transaction sm30.
Use it if it helps you... Reward points if helpful
REPORT zrecord02
NO STANDARD PAGE HEADING LINE-SIZE 255.
CONSTANTS: gc_x TYPE c VALUE 'X', "constants for true value
gc_dynbegin TYPE c VALUE 'X', "constants used in call transaction
gc_mode TYPE c VALUE 'A', "constants used in call transaction
gc_mode1 TYPE c VALUE 'N', "constants used in call transaction
gc_sucess TYPE c VALUE 'S', "constants used in call transaction
gc_flag TYPE c VALUE 'X', "constants used in call transaction
gc_read TYPE dxfields-fileoper VALUE 'R', "Constants used in form file selection.
gc_applic TYPE dxfields-location VALUE 'A', "application server location
gc_presen TYPE dxfields-location VALUE 'P', "Presentation server location
gc_root(01) TYPE c VALUE '/'. "constant used in file selection
DATA: gv_datab TYPE char12, "Varible to hold the data
gv_date TYPE char2,
gv_mon TYPE char2,
gv_year TYPE char4,
gv_no_succs TYPE i,
gv_no_error TYPE i,
gv_msg TYPE char100,
gv_id TYPE i.
SELECTION-SCREEN BEGIN OF BLOCK b WITH FRAME TITLE text-t01.
PARAMETERS: p_upl_ps RADIOBUTTON GROUP g DEFAULT 'X', "radiobutton for presentation server
p_upl_as RADIOBUTTON GROUP g, "radiobutton for application server
p_file TYPE rlgrap-filename, "file name
p_test AS CHECKBOX. "for testmode
SELECTION-SCREEN END OF BLOCK b.
TYPES: BEGIN OF gs_itab , " structure containing the fields of flat file.
land1 TYPE v_t604-land1,
stawn TYPE v_t604-stawn,
text1 TYPE v_t604-text1,
bemeh TYPE v_t604-bemeh,
impma TYPE v_t604-impma,
minol TYPE v_t604-minol,
END OF gs_itab.
DATA: gi_itab TYPE TABLE OF gs_itab , "internal table for the structure gs_itab
gi_valid_itab TYPE TABLE OF gs_itab, "internal table for the structure gs_itab with valid fields alone.
gi_dup_itab TYPE TABLE OF gs_itab, "internal table for the structure gs_itab to capture the duplicate values
gw_itab TYPE gs_itab, " work area of gs_itab
gw_validitab TYPE gs_itab.
TYPES: BEGIN OF gs_e_itab, " structure containing the error fields of flat file.
land1 TYPE v_t604-land1,
stawn TYPE v_t604-stawn,
text1 TYPE v_t604-text1,
bemeh TYPE v_t604-bemeh,
impma TYPE v_t604-impma,
minol TYPE v_t604-minol,
err(30) TYPE c,
END OF gs_e_itab.
DATA: gi_err_itab TYPE TABLE OF gs_e_itab, " internal table for the structure gs_e_itab.
gw_err_itab TYPE gs_e_itab. "work area for the structure gs_itab
TYPES: BEGIN OF gs_land_stawn, "structure containing land and import codes of flat file.
land1 TYPE t005-land1,
stawn TYPE t604-stawn,
END OF gs_land_stawn.
DATA: gi_land_stawn TYPE TABLE OF gs_land_stawn, " internal table containing valid land and import codes of flat file
gi_err_land_stawn TYPE TABLE OF gs_land_stawn, " internal table containing error land and import codes of flat file
gw_land_stawn TYPE gs_land_stawn. " work area for the above internal table.
TYPES: BEGIN OF gs_land, "structure containing land field alone
land1 TYPE t005-land1,
END OF gs_land.
DATA: gi_land TYPE TABLE OF gs_land, " internal table for the structure gs_land
gi_c_land TYPE TABLE OF gs_land, " gi_b_land, " internal table for the structure gs_land with only valid land fields
gw_land TYPE gs_land. "work area for gs_land
DATA: BEGIN OF gs_temp, "structure containing the fields of legacy file.
line(1000) TYPE c,
END OF gs_temp.
DATA: gi_temp LIKE TABLE OF gs_temp, "internal table for the structure gs_temp,
gw_temp LIKE gs_temp. "work area for gs_temp
DATA: gi_bdcdata TYPE TABLE OF bdcdata, "internal table for bdcdata
gi_msg TYPE TABLE OF bdcmsgcoll. "internal table for bdcmsgcoll
DATA: gw_bdcdata TYPE bdcdata, "workarea for bdcdata
gw_msg TYPE bdcmsgcoll. "workarea for bdcmsgcoll
*********************************************************************************
&----
AT SELECTION-SCREEN
----
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
PERFORM file_selection. "Selecting the file from the server
&----
TOP-OF-PAGE
----
TOP-OF-PAGE.
PERFORM gf_header. "Calling the header Section
&----
END-OF-PAGE
----
END-OF-PAGE.
EXIT.
&----
START-OF-SELECTION
----
START-OF-SELECTION.
PERFORM upload. "Uploading the file to internal table
PERFORM get_data. "Splitting the pipe delimited data
IF p_test = gc_x. "In test mode
PERFORM validations.
PERFORM remove_duplicate.
PERFORM display.
ELSE. "not in test mode
PERFORM validations.
PERFORM remove_duplicate.
PERFORM bdc.
PERFORM display.
ENDIF.
PERFORM no_of_records.
&----
END-OF-SELECTION
----
END-OF-SELECTION.
EXIT.
&----
*& Form file_selection.
&----
text
----
FORM file_selection.
CONSTANTS: lc_slash(2) TYPE c VALUE '//'.
DATA : lv_file_path TYPE dxfields-longpath,
lv_location TYPE dxfields-location,
lv_server TYPE msxxlist-name,
ls_rfcsi TYPE rfcsi.
CLEAR:lv_server,lv_location, lv_file_path.
MOVE gc_read TO lv_file_path.
IF lv_file_path IS INITIAL.
lv_file_path = gc_root.
ENDIF.
IF NOT p_upl_ps IS INITIAL.
lv_location = gc_presen. "if presentation server is selected
ELSE.
lv_location = gc_applic. "if application server is selected
ENDIF.
CALL FUNCTION 'RFC_SYSTEM_INFO'
IMPORTING
rfcsi_export = ls_rfcsi.
lv_server = ls_rfcsi-rfcdest.
CALL FUNCTION 'F4_DXFILENAME_TOPRECURSION'
EXPORTING
i_location_flag = lv_location
i_server = lv_server
i_path = lv_file_path
FILEMASK = '.'
fileoperation = p_upl_ps
IMPORTING
O_LOCATION_FLAG =
O_SERVER =
o_path = lv_file_path
ABEND_FLAG =
EXCEPTIONS
rfc_error = 1
ERROR_WITH_GUI = 2
OTHERS = 2
.
IF sy-subrc <> 0.
EXIT.
ELSE.
MOVE lv_file_path TO p_file.
ENDIF.
IF p_file(2) EQ lc_slash.
SHIFT p_file LEFT.
ENDIF.
ENDFORM. " FILE_SELECTION
&----
*& Form upload
&----
text
----
FORM upload.
DATA: lv_file TYPE string.
lv_file = p_file.
IF NOT p_upl_ps IS INITIAL. "if presentation server is selected
CLEAR gi_itab.
REFRESH gi_itab.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = lv_file
filetype = 'ASC'
has_field_separator = ''
HEADER_LENGTH = 0
READ_BY_LINE = 'X'
dat_mode = 'X'
CODEPAGE = ' '
IGNORE_CERR = ABAP_TRUE
REPLACEMENT = '#'
CHECK_BOM = ' '
VIRUS_SCAN_PROFILE =
NO_AUTH_CHECK = ' '
IMPORTING
FILELENGTH =
HEADER =
TABLES
data_tab = gi_temp
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
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ELSE. "If application server is selected
OPEN DATASET p_file FOR INPUT IN TEXT MODE ENCODING DEFAULT "If the data is available on the UNIX/Appl. server get the data
WITH SMART LINEFEED.
IF sy-subrc <> 0.
EXIT.
ENDIF.
DO.
READ DATASET p_file INTO gw_temp-line. "read file which is opened.
APPEND gw_temp TO gi_temp.
IF sy-subrc NE 0.
EXIT.
ENDIF.
ENDDO.
CLOSE DATASET p_file. "close the file.
ENDIF.
ENDFORM. "upload
*
&----
*& Form get_data
&----
text
----
FORM get_data.
DATA:lv_id TYPE sy-tabix.
gv_id = 0.
IF gi_temp[] IS INITIAL. "If the uploaded internal table is empty.
WRITE: /5 text-001.
EXIT.
ELSE.
LOOP AT gi_temp INTO gw_temp.
lv_id = sy-tabix.
SPLIT gw_temp-line
AT '|'
INTO gw_itab-land1
gw_itab-stawn
gw_itab-text1 "Splitting the pipe delimited data.
gw_itab-bemeh
gw_itab-impma
gw_itab-minol.
IF gw_itab-land1 IS INITIAL. " If the user fails to enter land key
gw_itab-land1 = 'CA'. " Default land to 'CA'.
ENDIF.
IF gw_itab-stawn IS NOT INITIAL. " If import code is present
APPEND gw_itab TO gi_itab.
ELSE.
APPEND gw_itab TO gi_itab.
CLEAR gw_itab.
READ TABLE gi_itab
INTO gw_itab WITH KEY stawn = space. "Read the internal table with empty import code
IF sy-subrc = 0.
gw_err_itab-land1 = gw_itab-land1.
gw_err_itab-stawn = gw_itab-stawn.
gw_err_itab-text1 = gw_itab-text1.
gw_err_itab-bemeh = gw_itab-bemeh.
gw_err_itab-impma = gw_itab-impma.
gw_err_itab-minol = gw_itab-minol.
gw_err_itab-err = text-032.
APPEND gw_err_itab TO gi_err_itab.
gv_id = gv_id + 1.
DELETE gi_itab INDEX lv_id.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM. "get_data
&----
*& Form gf_header
&----
text
----
FORM gf_header.
NEW-LINE. " Dispalay the header section
ULINE.
WRITE:/ text-006.
WRITE:/ text-019.
SKIP 1.
WRITE: AT /1 'PROGRAM NAME:'(022),sy-repid,
'DATE :'(023),sy-datum,
AT 100 'TIME :'(024),sy-timlo.
WRITE: AT /1 'FILENAME:'(025),p_file.
ULINE.
SKIP 1.
WRITE:/ text-008.
WRITE:/ text-009.
WRITE:/ text-010.
WRITE: AT 20 text-011.
WRITE: AT 33 text-012.
WRITE: AT 55 text-013.
WRITE: AT 70 text-014.
WRITE: AT 95 text-015.
WRITE: AT 120 text-016.
ULINE.
NEW-LINE.
NEW-LINE.
ENDFORM. "gf_header
&----
*& Form validations
&----
text
----
FORM validations.
DATA: lv_id TYPE sy-tabix.
LOOP AT gi_itab INTO gw_itab.
APPEND gw_itab-land1 TO gi_land. "Land code alone is taken into internal table
ENDLOOP.
LOOP AT gi_itab INTO gw_itab.
gw_land_stawn-land1 = gw_itab-land1. "land along with import code is taken into another internal table
gw_land_stawn-stawn = gw_itab-stawn.
APPEND gw_land_stawn TO gi_land_stawn.
ENDLOOP.
SORT gi_land BY land1.
REFRESH gi_c_land.
IF gi_land[] IS INITIAL.
SELECT land1
FROM t005
INTO TABLE gi_c_land
FOR ALL ENTRIES IN gi_land
WHERE land1 EQ gi_land-land1.
ENDIF.
IF sy-subrc = 0.
LOOP AT gi_itab INTO gw_itab.
READ TABLE gi_c_land "Read table with correct land keys
INTO gw_land
WITH KEY land1 = gw_itab-land1 BINARY SEARCH.
IF sy-subrc = 0.
gw_validitab-land1 = gw_itab-land1.
gw_validitab-stawn = gw_itab-stawn.
gw_validitab-text1 = gw_itab-text1.
gw_validitab-bemeh = gw_itab-bemeh.
gw_validitab-impma = gw_itab-impma.
gw_validitab-minol = gw_itab-minol.
APPEND gw_validitab TO gi_valid_itab. "appending correct values to internal table.
ELSE.
gw_err_itab-land1 = gw_itab-land1.
gw_err_itab-stawn = gw_itab-stawn.
gw_err_itab-text1 = gw_itab-text1.
gw_err_itab-bemeh = gw_itab-bemeh.
gw_err_itab-impma = gw_itab-impma.
gw_err_itab-minol = gw_itab-minol.
gw_err_itab-err = text-033.
APPEND gw_err_itab TO gi_err_itab. "Appending incorrect values.
ENDIF.
ENDLOOP.
ENDIF.
IF gi_land_stawn[] IS INITIAL.
SELECT land1 stawn
FROM t604 "Selecting already present land and import codes from gi_land_stawn
INTO TABLE gi_err_land_stawn
FOR ALL ENTRIES IN gi_land_stawn
WHERE land1 = gi_land_stawn-land1 AND stawn = gi_land_stawn-stawn.
ENDIF.
IF sy-subrc <> 0.
EXIT.
ELSE.
LOOP AT gi_valid_itab INTO gw_validitab. " gi_itab_a into gw_validitab.
CLEAR gw_err_itab.
lv_id = sy-tabix.
READ TABLE gi_err_land_stawn
INTO gw_land_stawn "Reading internal table containing error import codes
WITH KEY land1 = gw_validitab-land1
stawn = gw_validitab-stawn.
IF sy-subrc = 0.
gw_err_itab-land1 = gw_validitab-land1.
gw_err_itab-stawn = gw_validitab-stawn.
gw_err_itab-text1 = gw_validitab-text1.
gw_err_itab-bemeh = gw_validitab-bemeh.
gw_err_itab-impma = gw_validitab-impma.
gw_err_itab-minol = gw_validitab-minol.
gw_err_itab-err = text-034.
APPEND gw_err_itab TO gi_err_itab. "Appending error values to error internal table.
DELETE gi_valid_itab INDEX lv_id.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM. "validations
&----
*& Form remove_duplicate
&----
text
----
FORM remove_duplicate.
DATA: lv_id TYPE sy-tabix.
LOOP AT gi_valid_itab INTO gw_itab.
APPEND gw_itab TO gi_dup_itab.
ENDLOOP.
CLEAR gw_itab.
SORT gi_valid_itab BY land1 stawn ASCENDING.
SORT gi_dup_itab BY land1 stawn ASCENDING.
DELETE ADJACENT DUPLICATES FROM gi_valid_itab COMPARING land1 stawn. "deleting duplicates from gi_valid_itab.
LOOP AT gi_valid_itab INTO gw_itab.
lv_id = sy-tabix.
READ TABLE gi_dup_itab
INTO gw_validitab
WITH TABLE KEY land1 = gw_itab-land1 "Reading from the internal table containing duplicate values.
stawn = gw_itab-stawn
text1 = gw_itab-text1
bemeh = gw_itab-bemeh
impma = gw_itab-impma
minol = gw_itab-minol.
IF sy-subrc = 0.
DELETE gi_dup_itab
WHERE land1 = gw_itab-land1
AND stawn = gw_itab-stawn "Deleting the correct values from duplicated internal table.
AND text1 = gw_itab-text1
AND bemeh = gw_itab-bemeh "Now it has only duplicaed values.
AND impma = gw_itab-impma
AND minol = gw_itab-minol.
ENDIF.
ENDLOOP.
LOOP AT gi_dup_itab INTO gw_itab.
gw_err_itab-land1 = gw_itab-land1.
gw_err_itab-stawn = gw_itab-stawn.
gw_err_itab-text1 = gw_itab-text1.
gw_err_itab-bemeh = gw_itab-bemeh.
gw_err_itab-impma = gw_itab-impma.
gw_err_itab-minol = gw_itab-minol.
gw_err_itab-err = text-035.
APPEND gw_err_itab TO gi_err_itab. "Appending the duplicate errors to gi_err_itab
ENDLOOP.
ENDFORM. "remove_duplicate
&----
*& Form no_of_records
&----
text
----
FORM no_of_records.
DATA: lv_line TYPE i,
lv_line1 TYPE i,
lv_corr TYPE i,
lv_dup TYPE i,
lv_tot TYPE i,
lv_total TYPE i.
DESCRIBE TABLE gi_itab LINES lv_tot. "Total number of records in the flat file
lv_total = lv_tot + gv_id.
WRITE: /5 text-002, 44 lv_total. "'Total number of Records from flat file:', 44 lv_total.
DESCRIBE TABLE gi_valid_itab LINES lv_line. "Total number of valid records.
WRITE: /5 text-003, 44 lv_line. " 'No of correctly processed records:', 44 lv_line.
DESCRIBE TABLE gi_err_itab LINES lv_line1. "Total number of error records.
WRITE: /5 text-004, 44 lv_line1. "'No of Error Records:', 44 lv_line1.
lv_corr = lv_line + lv_line1. "Total number of duplicate records.
lv_dup = lv_total - lv_corr.
WRITE: /5 text-030, 44 lv_dup. "'Total number of exact duplicates:', 44 lv_dup.
ENDFORM. "validations
&----
*& Form display
&----
text
----
FORM display.
IF gi_err_itab[] IS INITIAL. "If error internal table is empty
WRITE: / sy-uline.
WRITE: /5 text-031."'All the datas are successfully uploaded'.
WRITE: / sy-uline.
ELSE.
LOOP AT gi_err_itab INTO gw_err_itab.
WRITE: / gw_err_itab-land1, 21 gw_err_itab-stawn, 34 gw_err_itab-text1,56 gw_err_itab-bemeh, 71 gw_err_itab-impma, 97 gw_err_itab-minol, 121 gw_err_itab-err.
ENDLOOP.
WRITE: / sy-uline.
ENDIF.
ENDFORM. "display
&----
*& Form bdc
&----
text
----
FORM bdc.
DATA: lv_tcode(4) TYPE c VALUE 'SM30'.
IF gi_valid_itab[] IS INITIAL. "If correct internal table is empty, exit.
EXIT.
ELSE.
CONSTANTS: lc_slash TYPE c VALUE '/'.
CLEAR: gv_year, gv_mon, gv_date, gi_bdcdata, gv_datab.
REFRESH gi_bdcdata.
MOVE: sy-datum+0(4) TO gv_year, "Todays data.
sy-datum+4(2) TO gv_mon,
sy-datum+6(2) TO gv_date.
CONCATENATE gv_mon lc_slash gv_date lc_slash gv_year INTO gv_datab.
LOOP AT gi_valid_itab INTO gw_itab.
PERFORM bdc_dynpro USING 'SAPMSVMA' '0100'.
PERFORM bdc_field USING 'BDC_CURSOR'
'VIEWNAME'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=UPD'.
PERFORM bdc_field USING 'VIEWNAME'
'V_T604'.
PERFORM bdc_field USING 'VIMDYNFLDS-LTD_DTA_NO'
'X'.
PERFORM bdc_dynpro USING 'SAPL080E' '0020'.
PERFORM bdc_field USING 'BDC_CURSOR'
'V_T604-BEMEH(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=NEWL'.
PERFORM bdc_dynpro USING 'SAPL080E' '0040'.
PERFORM bdc_field USING 'BDC_CURSOR'
'V_T604-MINOL'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=UEBE'.
PERFORM bdc_field USING 'V_T604-LAND1'
gw_itab-land1.
PERFORM bdc_field USING 'V_T604-STAWN'
gw_itab-stawn.
PERFORM bdc_field USING 'V_T604-TEXT1'
gw_itab-text1.
PERFORM bdc_field USING 'V_T604-BEMEH'
gw_itab-bemeh.
PERFORM bdc_field USING 'V_T604-IMPMA'
gw_itab-impma.
PERFORM bdc_field USING 'V_T604-MINOL'
gw_itab-minol.
PERFORM bdc_dynpro USING 'SAPL080E' '0020'.
PERFORM bdc_field USING 'BDC_CURSOR'
'V_T604-BEMEH(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=BACK'.
PERFORM bdc_dynpro USING 'SAPLSPO1' '0100'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=YES'.
PERFORM bdc_dynpro USING 'SAPLSTRD' '0300'.
PERFORM bdc_field USING 'BDC_CURSOR'
'KO008-TRKORR'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=INSA'.
PERFORM bdc_field USING 'KO008-TRKORR'
'BS7K900776'.
PERFORM bdc_dynpro USING 'SAPLSTR8' '0102'.
PERFORM bdc_field USING 'BDC_CURSOR'
'KO013-PROJECT'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=DOUBLECLICK'.
PERFORM bdc_field USING 'KO013-TARSYSTEM'
'BS7.200'.
PERFORM bdc_dynpro USING 'SAPLSTR8' '0102'.
PERFORM bdc_field USING 'BDC_CURSOR'
'KO013-AS4TEXT'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=CREA'.
PERFORM bdc_field USING 'KO013-AS4TEXT'
'another req'.
PERFORM bdc_field USING 'KO013-TARSYSTEM'
'BS7.200'.
PERFORM bdc_dynpro USING 'SAPLSTRD' '0300'.
PERFORM bdc_field USING 'BDC_CURSOR'
'KO008-TRKORR'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=LOCK'.
PERFORM bdc_field USING 'KO008-TRKORR'
'BS7K900778'.
PERFORM bdc_dynpro USING 'SAPMSVMA' '0100'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/EBACK'.
PERFORM bdc_field USING 'BDC_CURSOR'
'VIEWNAME'.
PERFORM bdc_transaction USING lv_tcode
.
REFRESH gi_bdcdata.
ENDLOOP.
ENDIF.
ENDFORM. "bdc
&----
*& Form bdc_dynpro
&----
text
----
-->X_PROGRAM text
-->X_DYNPRO text
----
FORM bdc_dynpro USING x_program TYPE any x_dynpro TYPE any. " BDC sturucture
CLEAR gw_bdcdata.
gw_bdcdata-program = x_program.
gw_bdcdata-dynpro = x_dynpro.
gw_bdcdata-dynbegin = gc_dynbegin.
APPEND gw_bdcdata TO gi_bdcdata.
ENDFORM. "bdc_dynpro
&----
*& Form bdc_field
&----
text
----
-->X_FNAM text
-->X_FVAL text
----
FORM bdc_field USING x_fnam TYPE any x_fval TYPE any.
IF NOT x_fval IS INITIAL.
CLEAR gw_bdcdata.
gw_bdcdata-fnam = x_fnam.
gw_bdcdata-fval = x_fval.
APPEND gw_bdcdata TO gi_bdcdata.
ENDIF.
ENDFORM. "BDC_FIELD
&----
*& Form bdc_transaction
&----
text
----
-->X_TCODE text
----
FORM bdc_transaction USING x_tcode TYPE any. "BDC Transaction
DATA: lv_flag TYPE c.
CALL TRANSACTION x_tcode USING gi_bdcdata
MODE gc_mode
UPDATE gc_mode1
MESSAGES INTO gi_msg.
IF sy-subrc NE 0.
EXIT.
ENDIF.
CLEAR: lv_flag.
LOOP AT gi_msg INTO gw_msg.
IF gw_msg-msgtyp EQ gc_sucess.
IF lv_flag EQ space.
gv_no_succs = gv_no_succs + 1.
lv_flag = gc_flag.
ENDIF.
ELSE.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = gw_msg-msgid
msgnr = gw_msg-msgnr
msgv1 = gw_msg-msgv1
msgv2 = gw_msg-msgv2
msgv3 = gw_msg-msgv3
msgv4 = gw_msg-msgv4
IMPORTING
message_text_output = gv_msg.
APPEND gv_msg TO gi_msg.
IF lv_flag EQ space.
gv_no_error = gv_no_error + 1.
lv_flag = gc_flag.
ENDIF.
ENDIF.
ENDLOOP.
REFRESH gi_bdcdata.
ENDFORM. "bdc_transaction
08-30-2007 2:09 PM
hello ,
I have stuck up in bdc for me01
S Field EORD-VDATU . not found in loop of screen SAPLMEOR 0205
S Field EORD-BDATU . not found in loop of screen SAPLMEOR 0205
S Field EORD-LIFNR . not found in loop of screen SAPLMEOR 0205
S Field EORD-EKORG . not found in loop of screen SAPLMEOR 0205
S Field EORD-EBELN . not found in loop of screen SAPLMEOR 0205
S Field EORD-EBELP . not found in loop of screen SAPLMEOR 0205
S Field RM06W-FESKZ . not found in loop of screen SAPLMEOR 0205
S Field EORD-NOTKZ . not found in loop of screen SAPLMEOR 0205
S Field EORD-AUTET . not found in loop of screen SAPLMEOR 0205
This error is coming .For u how was the error how did u get it solved.
05-03-2011 6:52 AM
now you have BDC on ME01. if yes plz send me. i need same BDC as you define
05-03-2011 10:11 AM
Hi Naveen,
You could use the menu options EDIT-->Position Cursor OR Go to --> Details when recording. Alternatively, you could use the funciton modules in function group MEOR
ME_DIRECT_INPUT_SOURCE_LIST
ME_INITIALIZE_SOURCE_LIST
ME_MAINTAIN_SOURCE_LIST_NEW
ME_POST_SOURCE_LIST_NEW
Hope this helps!
Regards,
Shyam
05-03-2011 11:54 AM
02-12-2016 3:09 PM
Hello,
there's a problem in standard IDOC inbound processing - it can handle only INSERT entries into the source list. Not modify, not delete entries.
If you are ok with only inserting new entries, I'd suggest you to go th IDOC way.
Otherwise you can use BDC, but here you can face issues with adressing the correct row with its index (e.g. you can't modify line item on 50th row)
But I managed to create own code to manipulate with source list items via FM ME_DIRECT_INPUT_SOURCE_LIST - you can check at my blog oprsteny.com
12-04-2020 6:26 AM
Program-REPORT zmm_maintain_sl_bdc
NO STANDARD PAGE HEADING LINE-SIZE 255.
TABLES: t100 ,sscrfields.
DATA: BEGIN OF it_message OCCURS 0.
INCLUDE STRUCTURE bdcmsgcoll.
DATA: END OF it_message.
DATA: l_nodata(1),
l_index TYPE i.
FIELD-SYMBOLS : <fs>.
DATA: filename_exl TYPE rlgrap-filename.
DATA it_messagex LIKE TABLE OF it_message WITH HEADER LINE.
DATA it_message1 LIKE TABLE OF it_message WITH HEADER LINE.
DATA: it_fieldcat TYPE lvc_t_fcat, "slis_t_fieldcat_alv WITH HEADER LINE,
wa_fieldcat TYPE lvc_s_fcat,
gd_layout TYPE lvc_s_layo.
DATA: BEGIN OF git_bdcdata OCCURS 0.
INCLUDE STRUCTURE bdcdata.
DATA: END OF git_bdcdata.
DATA : it_excel TYPE STANDARD TABLE OF alsmex_tabline WITH HEADER LINE.
* wa_excel TYPE alsmex_tabline.
DATA icon_create TYPE iconname.
DATA rslt(255) TYPE c.
DATA : ind TYPE sy-tabix.
DATA str TYPE string.
DATA num TYPE char3.
DATA ct_prm TYPE ctu_params.
DATA: BEGIN OF record OCCURS 0,
* data element: MATNR
matnr(040),
* data element: EWERK
werks(004),
* data element: ORDAB
vdatu(010),
* data element: ORDBI
bdatu(010),
* data element: ELIFN
lifnr(010),
* data element: EKORG
ekorg(004),
END OF record.
DATA record1 LIKE TABLE OF record WITH HEADER LINE .
PARAMETERS: p_file TYPE rlgrap-filename OBLIGATORY,
p_mode LIKE ctu_params-dismode DEFAULT 'N'.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
field_name = ' '
IMPORTING
file_name = p_file.
START-OF-SELECTION.
MOVE p_file TO filename_exl.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = filename_exl
i_begin_col = '1'
i_begin_row = '3'
i_end_col = '256'
i_end_row = '10000'
TABLES
intern = it_excel[]
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc NE 0.
FORMAT COLOR COL_BACKGROUND INTENSIFIED.
MESSAGE 'FILE ERROR' TYPE 'S' DISPLAY LIKE 'E' .
STOP.
ELSE.
SORT it_excel BY row col.
LOOP AT it_excel.
MOVE it_excel-col TO l_index.
ASSIGN COMPONENT l_index OF STRUCTURE record TO <fs>.
MOVE it_excel-value TO <fs>.
AT END OF row.
APPEND record.
CLEAR record.
ENDAT.
ENDLOOP.
ENDIF.
ct_prm-dismode = p_mode.
ct_prm-updmode = 'X'.
ct_prm-cattmode = 'X'.
ct_prm-defsize = 'X'.
ct_prm-racommit = 'X'.
ct_prm-nobinpt = 'X'.
ct_prm-nobiend = 'X'.
record1[] = record[].
SORT record[] ASCENDING.
SORT record1[] ASCENDING.
DELETE ADJACENT DUPLICATES FROM record1[] COMPARING matnr werks.
LOOP AT record1.
PERFORM bdc_dynpro USING 'SAPLMEOR' '0200'.
PERFORM bdc_field USING 'BDC_CURSOR'
'EORD-WERKS'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'EORD-MATNR'
record1-matnr.
PERFORM bdc_field USING 'EORD-WERKS'
record1-werks.
PERFORM bdc_dynpro USING 'SAPLMEOR' '0205'.
PERFORM bdc_field USING 'BDC_CURSOR'
'EORD-EKORG(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
CLEAR num.
LOOP AT record WHERE matnr = record1-matnr AND werks = record1-werks.
IF num = '007'.
num = '001'.
ENDIF.
num = num + '001' .
UNPACK num TO num.
IF num NE '007'.
CONCATENATE 'EORD-VDATU(' num ')' INTO str . CONDENSE str NO-GAPS.
PERFORM bdc_field USING str"'EORD-VDATU(01)'
record-vdatu.
CONCATENATE 'EORD-BDATU(' num ')' INTO str . CONDENSE str NO-GAPS.
PERFORM bdc_field USING str"'EORD-BDATU(01)'
record-bdatu.
CONCATENATE 'EORD-LIFNR(' num ')' INTO str . CONDENSE str NO-GAPS.
PERFORM bdc_field USING str"'EORD-LIFNR(01)'
record-lifnr.
CONCATENATE 'EORD-EKORG(' num ')' INTO str . CONDENSE str NO-GAPS.
PERFORM bdc_field USING str"'EORD-EKORG(01)'
record-ekorg.
ELSE.
PERFORM bdc_dynpro USING 'SAPLMEOR' '0205'.
PERFORM bdc_field USING 'BDC_CURSOR'
'EORD-EKORG(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=NS'.
CONCATENATE 'EORD-VDATU(' num ')' INTO str . CONDENSE str NO-GAPS.
PERFORM bdc_field USING str"'EORD-VDATU(01)'
record-vdatu.
CONCATENATE 'EORD-BDATU(' num ')' INTO str . CONDENSE str NO-GAPS.
PERFORM bdc_field USING str"'EORD-BDATU(01)'
record-bdatu.
CONCATENATE 'EORD-LIFNR(' num ')' INTO str . CONDENSE str NO-GAPS.
PERFORM bdc_field USING str"'EORD-LIFNR(01)'
record-lifnr.
CONCATENATE 'EORD-EKORG(' num ')' INTO str . CONDENSE str NO-GAPS.
PERFORM bdc_field USING str"'EORD-EKORG(01)'
record-ekorg.
PERFORM bdc_dynpro USING 'SAPLMEOR' '0205'.
PERFORM bdc_field USING 'BDC_CURSOR'
'EORD-EKORG(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
ENDIF.
ENDLOOP.
PERFORM bdc_dynpro USING 'SAPLMEOR' '0205'.
PERFORM bdc_field USING 'BDC_CURSOR'
'EORD-EKORG(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=BU'.
CALL TRANSACTION 'ME01' USING git_bdcdata OPTIONS FROM ct_prm MESSAGES INTO it_message.
REFRESH git_bdcdata.
FREE git_bdcdata.
DELETE ADJACENT DUPLICATES FROM it_message COMPARING msgtyp msgid msgnr msgv4.
it_messagex[] = it_message[].
DELETE it_message[] WHERE msgtyp NE 'E' .
DELETE it_messagex[] WHERE msgtyp NE 'S' .
DELETE it_messagex[] WHERE msgv1 EQ ' ' .
IF it_message[] IS NOT INITIAL.
SORT it_message[] BY fldname DESCENDING.
READ TABLE it_message INDEX 1.
it_message1-msgv4 = ind.
it_message1-fldname = it_message-fldname.
it_message1-msgtyp = it_message-msgtyp.
it_message1-msgv2 = 'Check Details'.
WRITE icon_red_light AS ICON TO it_message1-tcode.
APPEND it_message1.
CLEAR it_message1.
ELSE.
IF it_messagex[] IS NOT INITIAL.
READ TABLE it_messagex INDEX 1.
ENDIF.
it_message1-msgv4 = ind.
it_message1-msgtyp = 'S'.
it_message1-msgv1 = it_messagex-msgv1.
it_message1-msgv2 = 'Successfully Saved' .
WRITE icon_green_light AS ICON TO it_message1-tcode.
APPEND it_message1.
CLEAR it_message1.
ENDIF.
REFRESH: it_message[], it_messagex[].
CLEAR: it_messagex ,it_message.
ENDLOOP.
FORM bdc_dynpro USING program TYPE any "Program
screen TYPE any. "Dynpro
CLEAR git_bdcdata.
git_bdcdata-program = program.
git_bdcdata-dynpro = screen.
git_bdcdata-dynbegin = 'x'.
APPEND git_bdcdata.
ENDFORM.
FORM bdc_field USING fname TYPE any "Field name (value(p_0509))
fval TYPE any. "Field Value (p_header_data_lifnr)
CLEAR git_bdcdata.
git_bdcdata-fnam = fname.
git_bdcdata-fval = fval.
APPEND git_bdcdata.
ENDFORM.
FORM message .
it_message[] = it_message1[].
wa_fieldcat-fieldname = 'TCODE'.
wa_fieldcat-scrtext_m = 'Status'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'MSGV4'.
wa_fieldcat-scrtext_l = 'Line No.'.
wa_fieldcat-scrtext_m = 'Line'.
wa_fieldcat-scrtext_s = 'L'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'MSGTYP'.
wa_fieldcat-scrtext_m = 'Message Type'.
wa_fieldcat-scrtext_s = 'T'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'MSGV1'.
wa_fieldcat-scrtext_m = 'Document No'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'MSGV2'.
wa_fieldcat-scrtext_m = 'Message Text1'.
wa_fieldcat-scrtext_s = 'M1'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'MSGV3'.
wa_fieldcat-scrtext_m = 'Message Text2'.
wa_fieldcat-scrtext_s = 'M2'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'FLDNAME'.
wa_fieldcat-scrtext_m = 'Message Field Name'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
gd_layout-cwidth_opt = 'X'.
gd_layout-zebra = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
* I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
* I_CALLBACK_PF_STATUS_SET = 'GUI_11'
is_layout_lvc = gd_layout
it_fieldcat_lvc = it_fieldcat
i_save = 'A'
* IT_EVENTS = LT_EVENTS
TABLES
t_outtab = it_message
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
ENDFORM.
I have created a BDC for ME01.I know this is too late for the comment but i am commenting on this for the further help to consultants. I have attached the code and excel file image
Best Regards,
Harvardhan Rathore