REPORT z_update_price.
TABLES:sscrfields,t100.
*&-------------------------------------------------------------------
* data declaration
*&------------------------------------------------------------------*
***定义装载EXCEL表数据的内表
DATA:excelitab LIKE alsmex_tabline OCCURS 0 WITH HEADER LINE.
DATA: result TYPE i,
j TYPE i,
l_mstring(480), "消息字符串
msgtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE."定义消息内表
DATA: BEGIN OF bdcdata OCCURS 0.
INCLUDE STRUCTURE bdcdata.
DATA: END OF bdcdata.
DATA:BEGIN OF wa,
werks(4),
matnr(18),
price(15),
END OF wa.
DATA itab LIKE wa OCCURS 0 WITH HEADER LINE.
*&------------------------------------------------------------------*
*& SELECT-OPTIONS
*&------------------------------------------------------------------*
SELECTION-SCREEN:BEGIN OF BLOCK b1 WITH FRAME TITLE tt1 NO INTERVALS,
BEGIN OF LINE,
COMMENT (10) text1.
PARAMETERS p_file LIKE rlgrap-filename VISIBLE LENGTH 30.
SELECTION-SCREEN:
PUSHBUTTON 44(10) btn1 USER-COMMAND cli1,
END OF LINE,
END OF BLOCK b1.
*&------------------------------------------------------------------*
*& at selection-screen “F4 for PC Input file
*&------------------------------------------------------------------*
AT SELECTION-SCREEN .
CASE sscrfields.
WHEN 'CLI1'.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = ''
def_path = 'D:\'
mask = ',*.XLS,*.XLS.'
* MODE = '0'
title = '选择需要导入的文件'
IMPORTING
filename = p_file
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
ENDCASE.
*&------------------------------------------------------------------*
*& Initialization
*&------------------------------------------------------------------*
INITIALIZATION.
tt1 = '请选择要上传的文件'.
text1 = '上传文件:'.
btn1 = '浏览…'.
*&---------------------------------------------------------------------*
* START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM check_file.
PERFORM read_file.
PERFORM input_data.
END-OF-SELECTION.
PERFORM write_msg.
**&---------------------------------------------------------------------*
* START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM check_file.
PERFORM read_file.
PERFORM input_data.
END-OF-SELECTION.
PERFORM write_msg.
*&---------------------------------------------------------------------*
*& Form CHECK_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM check_file .
CALL FUNCTION 'WS_QUERY'
EXPORTING
filename = p_file
query = 'FE'
IMPORTING
return = result
EXCEPTIONS
inv_query = 1
no_batch = 2
frontend_error = 3
OTHERS = 4.
IF result = 0.
MESSAGE i888(sabapdocu) WITH p_file '上传文件不存在!'.
STOP.
ENDIF.
ENDFORM. " CHECK_FILE
*&---------------------------------------------------------------------*
*& Form READ_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM read_file .
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_file
i_begin_col = 1 "开始列
i_begin_row = 2 "开始行
i_end_col = 20 "结束列
i_end_row = 9999 "结束行
TABLES
intern = excelitab
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE i888(sabapdocu) WITH 'UPLOAD ERROR!'.
ENDIF.
SORT excelitab BY row col.
REFRESH itab.
CLEAR itab.
LOOP AT excelitab.
CASE excelitab-col.
WHEN '0001'.
wa-werks = excelitab-value. "工厂
WHEN '0002'.
wa-matnr = excelitab-value. "
WHEN '0003'.
wa-price = excelitab-value. "
ENDCASE.
AT END OF row.
APPEND wa TO itab..
CLEAR wa.
ENDAT.
ENDLOOP.
ENDFORM. " READ_FILE
*&---------------------------------------------------------------------*
*& Form INPUT_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM input_data .
LOOP AT itab INTO wa.
***第一个屏幕
PERFORM bdc_dynpro USING 'SAPRCKM_MR21' '0201'.
PERFORM bdc_field USING 'BDC_OKCODE' '=ENTR'.
PERFORM bdc_field USING 'MR21HEAD-BUDAT' '2012.02.29'.
PERFORM bdc_field USING 'MR21HEAD-BUKRS' '4000'.
PERFORM bdc_field USING 'MR21HEAD-WERKS' wa-werks.
*********
PERFORM bdc_dynpro USING 'SAPRCKM_MR21' '0201'.
PERFORM bdc_field USING 'BDC_OKCODE' '=ENTR'.
PERFORM bdc_field USING 'CKI_MR21_0250-MATNR(01)' wa-matnr.
PERFORM bdc_field USING 'CKI_MR21_0250-NEWVALPR(01)' wa-price.
*******
PERFORM bdc_dynpro USING 'SAPRCKM_MR21' '0201'.
PERFORM bdc_field USING 'BDC_OKCODE' '=SAVE'.
********
CALL TRANSACTION 'MR21' USING bdcdata MODE 'E' MESSAGES INTO msgtab.
CLEAR bdcdata[].
ENDLOOP.
ENDFORM. " INPUT_DATA
*&---------------------------------------------------------------------*
*& Form BDC_DYNPRO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0416 text
* -->P_0417 text
*----------------------------------------------------------------------*
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
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0421 text
* -->P_0422 text
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
ENDFORM. " BDC_FIELD
*&---------------------------------------------------------------------*
*& Form WRITE_MSG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM write_msg .
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. " WRITE_MSG