REPORT z_bdc NO STANDARD PAGE HEADING MESSAGE-ID zm001.
TABLES : t100.
DATA: BEGIN OF inputdata_str ,
matnr(18),
mbrsh(1),
mtart(04),
maktx(40),
meins(03),
END OF inputdata_str,
basicdatatab LIKE inputdata_str OCCURS 100 WITH HEADER LINE.
DATA:bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE,"定义BDC内表
msgtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE,"定义消息内表
l_mstring(480). "消息字符串
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME.
PARAMETERS: filenam1(128) TYPE c.
SELECTION-SCREEN END OF BLOCK blk1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR filenam1.
PERFORM choose_input_file USING filenam1.
AT SELECTION-SCREEN.
PERFORM check_file_whether_exist USING filenam1.
START-OF-SELECTION.
PERFORM get_data_from_file TABLES basicdatatab USING filenam1.
LOOP AT basicdatatab INTO inputdata_str.
PERFORM proces_update_data USING inputdata_str.
CLEAR bdcdata[]. "清空BDCDATA的所有数据
ENDLOOP.
PERFORM list_return_message.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form choose_input_file
*&---------------------------------------------------------------------*
FORM choose_input_file USING pfile.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = '*.xls'
def_path = 'D:\'
mask = ',*.xls.'
mode = 'O'
title = 'Choose Input file'(002)
IMPORTING
filename = pfile
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
ENDFORM. " choose_input_file
*&---------------------------------------------------------------------*
*& Form check_file_whether_exist
*&---------------------------------------------------------------------*
FORM check_file_whether_exist USING filename.
DATA: inputfile TYPE string,
result TYPE c.
inputfile = filename.
CALL METHOD cl_gui_frontend_services=>file_exist
EXPORTING
file = inputfile
RECEIVING
result = result
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
wrong_parameter = 3
not_supported_by_gui = 4
OTHERS = 5.
IF result IS INITIAL.
MESSAGE e000 WITH 'File' inputfile ' does not exist'.
ENDIF.
ENDFORM. " check_file_whether_exist
*&---------------------------------------------------------------------*
*& Form proces_update_data
*&---------------------------------------------------------------------*
FORM proces_update_data USING record LIKE basicdatatab.
PERFORM bdc_dynpro USING 'SAPLMGMM' '0060'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RMMG1-MTART'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'RMMG1-MATNR'
record-matnr.
PERFORM bdc_field USING 'RMMG1-MBRSH'
record-mbrsh.
PERFORM bdc_field USING 'RMMG1-MTART'
record-mtart.
PERFORM bdc_dynpro USING 'SAPLMGMM' '0070'.
PERFORM bdc_field USING 'BDC_CURSOR'
'MSICHTAUSW-DYTXT(02)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=ENTR'.
PERFORM bdc_field USING 'MSICHTAUSW-KZSEL(01)'
'X'.
PERFORM bdc_field USING 'MSICHTAUSW-KZSEL(02)'
'X'.
PERFORM bdc_dynpro USING 'SAPLMGMM' '4004'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'MAKT-MAKTX'
record-maktx.
PERFORM bdc_field USING 'BDC_CURSOR'
'MARA-MEINS'.
PERFORM bdc_field USING 'MARA-MEINS'
record-meins.
PERFORM bdc_field USING 'MARA-MTPOS_MARA'
'NORM'.
PERFORM bdc_dynpro USING 'SAPLMGMM' '4004'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'BDC_CURSOR'
'MAKT-MAKTX'.
PERFORM bdc_field USING 'MAKT-MAKTX'
record-maktx.
PERFORM bdc_dynpro USING 'SAPLSPO1' '0300'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=YES'.
CALL TRANSACTION'MM01' USING bdcdata MODE 'N' MESSAGES INTO msgtab.
ENDFORM. " proces_update_data
*&---------------------------------------------------------------------*
*& Form list_return_message
*&---------------------------------------------------------------------*
FORM list_return_message .
***输出系统消息
WRITE : / '消息类型', 20 '消息内容'.
LOOP AT msgtab.
SELECT SINGLE *
FROM t100
WHERE sprsl = msgtab-msgspra
AND arbgb = msgtab-msgid
AND msgnr = msgtab-msgnr.
IF sy-subrc = 0.
l_mstring = t100-text.
IF l_mstring CS '&1'.
REPLACE '&1' WITH msgtab-msgv1 INTO l_mstring.
REPLACE '&2' WITH msgtab-msgv2 INTO l_mstring.
REPLACE '&3' WITH msgtab-msgv3 INTO l_mstring.
REPLACE '&4' WITH msgtab-msgv4 INTO l_mstring.
ELSE.
REPLACE '&' WITH msgtab-msgv1 INTO l_mstring.
REPLACE '&' WITH msgtab-msgv2 INTO l_mstring.
REPLACE '&' WITH msgtab-msgv3 INTO l_mstring.
REPLACE '&' WITH msgtab-msgv4 INTO l_mstring.
ENDIF.
CONDENSE l_mstring.
WRITE: / msgtab-msgtyp, 20 l_mstring.
ELSE.
WRITE: / msgtab.
ENDIF.
ENDLOOP.
ENDFORM. " list_return_message
*&---------------------------------------------------------------------*
*& Form get_data_from_file
*&---------------------------------------------------------------------*
FORM get_data_from_file TABLES datatab USING inputfile .
DATA: filename LIKE rlgrap-filename,
datacont LIKE alsmex_tabline OCCURS 0 WITH HEADER LINE,
maxcolno TYPE i.
FIELD-SYMBOLS <fs> TYPE ANY.
REFRESH datatab. CLEAR datatab.
DO.
ASSIGN COMPONENT sy-index OF STRUCTURE datatab TO <fs>.
IF sy-subrc NE 0.
maxcolno = sy-index - 1.
EXIT.
ENDIF.
ENDDO.
filename = inputfile.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = filename
i_begin_col = 1
i_begin_row = 3
i_end_col = maxcolno
i_end_row = 1000
TABLES
intern = datacont
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
LOOP AT datacont.
AT NEW row.
CLEAR datatab.
ENDAT.
ASSIGN COMPONENT datacont-col OF STRUCTURE datatab TO <fs>.
<fs> = datacont-value.
AT END OF row.
APPEND datatab. CLEAR datatab.
ENDAT.
ENDLOOP.
ENDFORM. " get_data_from_file
*&---------------------------------------------------------------------*
*& Form bdc_dynpro
*&---------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM. "BDC_DYNPRO
*&---------------------------------------------------------------------*
*& Form bdc_field
*&---------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
ENDFORM. "BDC_FIELD
TABLES : t100.
DATA: BEGIN OF inputdata_str ,
matnr(18),
mbrsh(1),
mtart(04),
maktx(40),
meins(03),
END OF inputdata_str,
basicdatatab LIKE inputdata_str OCCURS 100 WITH HEADER LINE.
DATA:bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE,"定义BDC内表
msgtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE,"定义消息内表
l_mstring(480). "消息字符串
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME.
PARAMETERS: filenam1(128) TYPE c.
SELECTION-SCREEN END OF BLOCK blk1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR filenam1.
PERFORM choose_input_file USING filenam1.
AT SELECTION-SCREEN.
PERFORM check_file_whether_exist USING filenam1.
START-OF-SELECTION.
PERFORM get_data_from_file TABLES basicdatatab USING filenam1.
LOOP AT basicdatatab INTO inputdata_str.
PERFORM proces_update_data USING inputdata_str.
CLEAR bdcdata[]. "清空BDCDATA的所有数据
ENDLOOP.
PERFORM list_return_message.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form choose_input_file
*&---------------------------------------------------------------------*
FORM choose_input_file USING pfile.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = '*.xls'
def_path = 'D:\'
mask = ',*.xls.'
mode = 'O'
title = 'Choose Input file'(002)
IMPORTING
filename = pfile
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
ENDFORM. " choose_input_file
*&---------------------------------------------------------------------*
*& Form check_file_whether_exist
*&---------------------------------------------------------------------*
FORM check_file_whether_exist USING filename.
DATA: inputfile TYPE string,
result TYPE c.
inputfile = filename.
CALL METHOD cl_gui_frontend_services=>file_exist
EXPORTING
file = inputfile
RECEIVING
result = result
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
wrong_parameter = 3
not_supported_by_gui = 4
OTHERS = 5.
IF result IS INITIAL.
MESSAGE e000 WITH 'File' inputfile ' does not exist'.
ENDIF.
ENDFORM. " check_file_whether_exist
*&---------------------------------------------------------------------*
*& Form proces_update_data
*&---------------------------------------------------------------------*
FORM proces_update_data USING record LIKE basicdatatab.
PERFORM bdc_dynpro USING 'SAPLMGMM' '0060'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RMMG1-MTART'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'RMMG1-MATNR'
record-matnr.
PERFORM bdc_field USING 'RMMG1-MBRSH'
record-mbrsh.
PERFORM bdc_field USING 'RMMG1-MTART'
record-mtart.
PERFORM bdc_dynpro USING 'SAPLMGMM' '0070'.
PERFORM bdc_field USING 'BDC_CURSOR'
'MSICHTAUSW-DYTXT(02)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=ENTR'.
PERFORM bdc_field USING 'MSICHTAUSW-KZSEL(01)'
'X'.
PERFORM bdc_field USING 'MSICHTAUSW-KZSEL(02)'
'X'.
PERFORM bdc_dynpro USING 'SAPLMGMM' '4004'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'MAKT-MAKTX'
record-maktx.
PERFORM bdc_field USING 'BDC_CURSOR'
'MARA-MEINS'.
PERFORM bdc_field USING 'MARA-MEINS'
record-meins.
PERFORM bdc_field USING 'MARA-MTPOS_MARA'
'NORM'.
PERFORM bdc_dynpro USING 'SAPLMGMM' '4004'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'BDC_CURSOR'
'MAKT-MAKTX'.
PERFORM bdc_field USING 'MAKT-MAKTX'
record-maktx.
PERFORM bdc_dynpro USING 'SAPLSPO1' '0300'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=YES'.
CALL TRANSACTION'MM01' USING bdcdata MODE 'N' MESSAGES INTO msgtab.
ENDFORM. " proces_update_data
*&---------------------------------------------------------------------*
*& Form list_return_message
*&---------------------------------------------------------------------*
FORM list_return_message .
***输出系统消息
WRITE : / '消息类型', 20 '消息内容'.
LOOP AT msgtab.
SELECT SINGLE *
FROM t100
WHERE sprsl = msgtab-msgspra
AND arbgb = msgtab-msgid
AND msgnr = msgtab-msgnr.
IF sy-subrc = 0.
l_mstring = t100-text.
IF l_mstring CS '&1'.
REPLACE '&1' WITH msgtab-msgv1 INTO l_mstring.
REPLACE '&2' WITH msgtab-msgv2 INTO l_mstring.
REPLACE '&3' WITH msgtab-msgv3 INTO l_mstring.
REPLACE '&4' WITH msgtab-msgv4 INTO l_mstring.
ELSE.
REPLACE '&' WITH msgtab-msgv1 INTO l_mstring.
REPLACE '&' WITH msgtab-msgv2 INTO l_mstring.
REPLACE '&' WITH msgtab-msgv3 INTO l_mstring.
REPLACE '&' WITH msgtab-msgv4 INTO l_mstring.
ENDIF.
CONDENSE l_mstring.
WRITE: / msgtab-msgtyp, 20 l_mstring.
ELSE.
WRITE: / msgtab.
ENDIF.
ENDLOOP.
ENDFORM. " list_return_message
*&---------------------------------------------------------------------*
*& Form get_data_from_file
*&---------------------------------------------------------------------*
FORM get_data_from_file TABLES datatab USING inputfile .
DATA: filename LIKE rlgrap-filename,
datacont LIKE alsmex_tabline OCCURS 0 WITH HEADER LINE,
maxcolno TYPE i.
FIELD-SYMBOLS <fs> TYPE ANY.
REFRESH datatab. CLEAR datatab.
DO.
ASSIGN COMPONENT sy-index OF STRUCTURE datatab TO <fs>.
IF sy-subrc NE 0.
maxcolno = sy-index - 1.
EXIT.
ENDIF.
ENDDO.
filename = inputfile.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = filename
i_begin_col = 1
i_begin_row = 3
i_end_col = maxcolno
i_end_row = 1000
TABLES
intern = datacont
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
LOOP AT datacont.
AT NEW row.
CLEAR datatab.
ENDAT.
ASSIGN COMPONENT datacont-col OF STRUCTURE datatab TO <fs>.
<fs> = datacont-value.
AT END OF row.
APPEND datatab. CLEAR datatab.
ENDAT.
ENDLOOP.
ENDFORM. " get_data_from_file
*&---------------------------------------------------------------------*
*& Form bdc_dynpro
*&---------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM. "BDC_DYNPRO
*&---------------------------------------------------------------------*
*& Form bdc_field
*&---------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
ENDFORM. "BDC_FIELD