DATA:t_intern TYPE STANDARD TABLE OF ALSMEX_TABLINE.
DATA:w_intern TYPE ALSMEX_TABLINE.
DATA:BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINe.
DATA:MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
PARAMETERS:p_path TYPE string."定义一个接收文件的路径变量
AT SELECTION-SCREEN on VALUE-REQUEST FOR p_path.
PERFORM f_get_path.
START-OF-SELECTION.
PERFORM f_upload_data.
PERFORM f_bdc.
*&---------------------------------------------------------------------*
*& Form F_GET_PATH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM F_GET_PATH .
CALL FUNCTION 'WS_FILENAME_GET'"获取稳健路径到一个比变量中
EXPORTING
* DEF_FILENAME = ' '
DEF_PATH = '' "'D:\课程\课件\10'"对话框初始路径
* MASK = ' '
MODE = 'O' "对话框模式是打开文件
TITLE = '打开路径'"对话框的标题,获得稳健路径放于改变量中
IMPORTING
FILENAME = p_path
* RC =
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4
OTHERS = 5
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM. " F_GET_PATH
*&---------------------------------------------------------------------*
*& Form F_UPLOAD_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM F_UPLOAD_DATA .
DATA:lw_filename LIKE rlgrap-filename.
lw_filename = p_path.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = lw_filename "获得稳健路径
I_BEGIN_COL = '1' "定义内表起始列
I_BEGIN_ROW = '1' "定义内标起始行
I_END_COL = '100' "定义内表中之列
I_END_ROW = '100'"定义内表终止行
TABLES
INTERN = t_intern
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM. " F_UPLOAD_DATA
*&---------------------------------------------------------------------*
*& Form F_BDC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM F_BDC .
LOOP AT t_intern into w_intern.
IF w_intern-row = '1'."去除第一行列标题数据
CONTINUE.
ENDIF.
CASE w_intern-col.
when '1'.
perform bdc_dynpro using 'SAPMM60X' '0100'.
* perform bdc_field using 'BDC_CURSOR'
* 'RM60X-ENTLU'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'AM60X-MATAW'
'X'." record-MATAW_001'.
perform bdc_field using 'AM60X-MATNR'
w_intern-value.
when '2'.
perform bdc_field using 'AM60X-WERKS'
w_intern-value. " record-WERKS_003.
when '3'.
perform bdc_field using 'RM60X-VERSB'
'00'.
perform bdc_field using 'RM60X-DATVE'
w_intern-value.
when '4'.
perform bdc_field using 'RM60X-DATBE'
w_intern-value.
when '5'.
perform bdc_field using 'RM60X-ENTLU'
w_intern-value.
when OTHERS.
perform bdc_dynpro using 'SAPLM60E' '0200'.
perform bdc_field using 'BDC_OKCODE'
'=S+'.
*perform bdc_field using 'BDC_CURSOR'
* 'RM60X-PLN01(01)'.
perform bdc_field using 'RM60X-PLN01(01)'
w_intern-value." record-PLN01_01_008.
*perform bdc_dynpro using 'SAPLM60E' '0200'.
*perform bdc_field using 'BDC_OKCODE'
* '=S+'.
*perform bdc_field using 'BDC_CURSOR'
* 'RM60X-PLN01(01)'.
*perform bdc_field using 'RM60X-PLN01(01)'
* record-PLN01_01_009.
*perform bdc_dynpro using 'SAPLM60E' '0200'.
*perform bdc_field using 'BDC_OKCODE'
* '=S+'.
*perform bdc_field using 'BDC_CURSOR'
* 'RM60X-PLN01(01)'.
*perform bdc_field using 'RM60X-PLN01(01)'
* record-PLN01_01_010.
at END OF row.
perform bdc_dynpro using 'SAPLM60E' '0200'.
perform bdc_field using 'BDC_OKCODE'
'=SICH'.
CALL TRANSACTION 'MD61' using bdcdata
mode 'A'
update 'S'
messages into messtab.
CLEAR bdcdata[].
endat.
*perform bdc_field using 'BDC_CURSOR'
* 'PBPT-MATNR(01)'.
*perform bdc_transaction using 'MD61'.
ENDCASE.
ENDLOOP.
ENDFORM. " F_BDC
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM = PROGRAM.
BDCDATA-DYNPRO = DYNPRO.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA.
ENDFORM.
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
* IF FVAL <> NODATA.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
APPEND BDCDATA.
* ENDIF.
ENDFORM.
DATA:w_intern TYPE ALSMEX_TABLINE.
DATA:BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINe.
DATA:MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
PARAMETERS:p_path TYPE string."定义一个接收文件的路径变量
AT SELECTION-SCREEN on VALUE-REQUEST FOR p_path.
PERFORM f_get_path.
START-OF-SELECTION.
PERFORM f_upload_data.
PERFORM f_bdc.
*&---------------------------------------------------------------------*
*& Form F_GET_PATH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM F_GET_PATH .
CALL FUNCTION 'WS_FILENAME_GET'"获取稳健路径到一个比变量中
EXPORTING
* DEF_FILENAME = ' '
DEF_PATH = '' "'D:\课程\课件\10'"对话框初始路径
* MASK = ' '
MODE = 'O' "对话框模式是打开文件
TITLE = '打开路径'"对话框的标题,获得稳健路径放于改变量中
IMPORTING
FILENAME = p_path
* RC =
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4
OTHERS = 5
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM. " F_GET_PATH
*&---------------------------------------------------------------------*
*& Form F_UPLOAD_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM F_UPLOAD_DATA .
DATA:lw_filename LIKE rlgrap-filename.
lw_filename = p_path.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = lw_filename "获得稳健路径
I_BEGIN_COL = '1' "定义内表起始列
I_BEGIN_ROW = '1' "定义内标起始行
I_END_COL = '100' "定义内表中之列
I_END_ROW = '100'"定义内表终止行
TABLES
INTERN = t_intern
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM. " F_UPLOAD_DATA
*&---------------------------------------------------------------------*
*& Form F_BDC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM F_BDC .
LOOP AT t_intern into w_intern.
IF w_intern-row = '1'."去除第一行列标题数据
CONTINUE.
ENDIF.
CASE w_intern-col.
when '1'.
perform bdc_dynpro using 'SAPMM60X' '0100'.
* perform bdc_field using 'BDC_CURSOR'
* 'RM60X-ENTLU'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'AM60X-MATAW'
'X'." record-MATAW_001'.
perform bdc_field using 'AM60X-MATNR'
w_intern-value.
when '2'.
perform bdc_field using 'AM60X-WERKS'
w_intern-value. " record-WERKS_003.
when '3'.
perform bdc_field using 'RM60X-VERSB'
'00'.
perform bdc_field using 'RM60X-DATVE'
w_intern-value.
when '4'.
perform bdc_field using 'RM60X-DATBE'
w_intern-value.
when '5'.
perform bdc_field using 'RM60X-ENTLU'
w_intern-value.
when OTHERS.
perform bdc_dynpro using 'SAPLM60E' '0200'.
perform bdc_field using 'BDC_OKCODE'
'=S+'.
*perform bdc_field using 'BDC_CURSOR'
* 'RM60X-PLN01(01)'.
perform bdc_field using 'RM60X-PLN01(01)'
w_intern-value." record-PLN01_01_008.
*perform bdc_dynpro using 'SAPLM60E' '0200'.
*perform bdc_field using 'BDC_OKCODE'
* '=S+'.
*perform bdc_field using 'BDC_CURSOR'
* 'RM60X-PLN01(01)'.
*perform bdc_field using 'RM60X-PLN01(01)'
* record-PLN01_01_009.
*perform bdc_dynpro using 'SAPLM60E' '0200'.
*perform bdc_field using 'BDC_OKCODE'
* '=S+'.
*perform bdc_field using 'BDC_CURSOR'
* 'RM60X-PLN01(01)'.
*perform bdc_field using 'RM60X-PLN01(01)'
* record-PLN01_01_010.
at END OF row.
perform bdc_dynpro using 'SAPLM60E' '0200'.
perform bdc_field using 'BDC_OKCODE'
'=SICH'.
CALL TRANSACTION 'MD61' using bdcdata
mode 'A'
update 'S'
messages into messtab.
CLEAR bdcdata[].
endat.
*perform bdc_field using 'BDC_CURSOR'
* 'PBPT-MATNR(01)'.
*perform bdc_transaction using 'MD61'.
ENDCASE.
ENDLOOP.
ENDFORM. " F_BDC
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM = PROGRAM.
BDCDATA-DYNPRO = DYNPRO.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA.
ENDFORM.
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
* IF FVAL <> NODATA.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
APPEND BDCDATA.
* ENDIF.
ENDFORM.