Application Development 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: 

bdc for me01

Former Member
0 Kudos

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

8 REPLIES 8

h_senden2
Active Contributor
0 Kudos

Use transaction SHDB a record the wanted transaction.

You can generate source code for the bim program.

regards,

Hans

Please reward all helpful answers !!!!!

Former Member
0 Kudos

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

Former Member
0 Kudos

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.

0 Kudos

now you have BDC on ME01. if yes plz send me. i need same BDC as you define

Former Member
0 Kudos

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

JL23
Active Contributor
0 Kudos

or you could use LSMW with IDOC import method SRCLST

Former Member
0 Kudos

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

harshdd57
Explorer
0 Kudos

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