*&---------------------------------------------------------------------*
*& Report ZMM_R_073
*&ZMMK011 物料号查询范围上传程序。
*&---------------------------------------------------------------------*
*&Created by Chaiyuanze on 20150312
*&上传的文件问"txt"格式,并且用 制表符(Tab键)分割。
*&---------------------------------------------------------------------*
REPORT ZMM_R_073.
TYPE-POOLS: slis.
TABLES:ZMM_T_073."Material Number
TYPES:BEGIN OF typ_dfile,
MATNR TYPE ZMM_T_073-MATNR,"Material Number
END OF typ_dfile.
DATA:tab_dfile TYPE STANDARD TABLE OF typ_dfile.
DATA:wa_dfile TYPE typ_dfile.
DATA: g_filename TYPE string.
*-----------------ALV 用数据表和全局变量
DATA: i_fieldcat TYPE slis_t_fieldcat_alv,
i_layout TYPE slis_layout_alv,
i_events TYPE slis_t_event.
*******************************************************************
*外部准备的制表符文本文件按上述顺序准备
*******************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: p1 RADIOBUTTON GROUP grp1 DEFAULT 'X'.
PARAMETERS:pfile TYPE string.
PARAMETERS: p2 RADIOBUTTON GROUP grp1.
SELECTION-SCREEN END OF BLOCK b1.
INITIALIZATION.
AT SELECTION-SCREEN.
IF p1 = 'X' AND pfile IS INITIAL.
MESSAGE '请选择文件路径' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pfile.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = ' '
def_path = 'C:\'
mode = 'O'
title = sy-title
IMPORTING
filename = pfile
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
MESSAGE '文件路径取得失败' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
START-OF-SELECTION.
IF p1 = 'X'.
IF pfile IS INITIAL.
MESSAGE '请选择文件路径' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
PERFORM get_data CHANGING tab_dfile.
PERFORM save_data USING tab_dfile.
ELSE.
PERFORM get_hisdata CHANGING tab_dfile.
PERFORM build_fieldcat CHANGING i_fieldcat.
PERFORM buile_i_layout CHANGING i_layout.
PERFORM alv_display USING i_fieldcat
i_layout.
ENDIF.
*&---------------------------------------------------------------------*
*& Form save_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->C_TAB_DFILE text
*----------------------------------------------------------------------*
FORM get_data CHANGING c_tab_dfile LIKE tab_dfile.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = pfile
filetype = 'ASC'
codepage = '8400'
has_field_separator = 'X'
TABLES
data_tab = c_tab_dfile
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 '文件打开失败' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDFORM. "save_data
*&---------------------------------------------------------------------*
*& Form save_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->C_TAB_DFILE text
*----------------------------------------------------------------------*
FORM save_data USING u_tab_dfile TYPE STANDARD TABLE.
DATA: L_TAB_DFILE TYPE STANDARD TABLE OF TYP_DFILE,
L_WA_DFILE LIKE LINE OF L_TAB_DFILE.
DELETE FROM ZMM_T_073.
COMMIT WORK.
MOVE u_tab_dfile TO L_TAB_DFILE.
LOOP AT L_TAB_DFILE INTO L_WA_DFILE.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = L_WA_DFILE-MATNR
IMPORTING
OUTPUT = L_WA_DFILE-MATNR
.
MODIFY L_TAB_DFILE FROM L_WA_DFILE INDEX sy-tabix.
ENDLOOP.
MODIFY ZMM_T_073 FROM TABLE L_TAB_DFILE.
COMMIT WORK.
MESSAGE '数据导入成功' TYPE 'S'.
ENDFORM . "save_data
*&---------------------------------------------------------------------*
*& Form get_HISdata
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->TAB_DFILE text
*----------------------------------------------------------------------*
FORM get_hisdata CHANGING c_tab_dfile LIKE tab_dfile.
SELECT MATNR "Material Number
FROM ZMM_T_073
INTO TABLE c_tab_dfile.
sort c_tab_dfile by MATNR.
ENDFORM. "get_HISdata
*&---------------------------------------------------------------------*
*& Form build_fieldcat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->C_I_FIELDCAT text
*----------------------------------------------------------------------*
FORM build_fieldcat CHANGING c_i_fieldcat TYPE slis_t_fieldcat_alv.
DATA:l_wa_fieldcat TYPE slis_fieldcat_alv. " 相当于工作区
l_wa_fieldcat-col_pos = '1' . " 指定列数
l_wa_fieldcat-fieldname = 'MATNR' . " 需要输出的内表的字段名
l_wa_fieldcat-seltext_m = 'Material No' . " 字段的描述-长字段标签
l_wa_fieldcat-fix_column = 'X' . " 是否是固定列
APPEND l_wa_fieldcat TO c_i_fieldcat .
CLEAR l_wa_fieldcat .
ENDFORM. "build_fieldcat
*&---------------------------------------------------------------------*
*& Form buile_i_layout
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->C_I_LAYOUT text
*----------------------------------------------------------------------*
FORM buile_i_layout CHANGING c_i_layout TYPE slis_layout_alv.
c_i_layout-colwidth_optimize = 'X'.
ENDFORM. "BUILE_i_layout
*&---------------------------------------------------------------------*
*& Form alv_display
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->U_I_FIELDCAT text
* -->U_I_LAYOUT text
*----------------------------------------------------------------------*
FORM alv_display USING u_i_fieldcat TYPE slis_t_fieldcat_alv
u_i_layout TYPE slis_layout_alv.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
is_layout = u_i_layout
it_fieldcat = u_i_fieldcat[]
TABLES
t_outtab = tab_dfile
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'wrong' TYPE 'i'.
ENDIF.
ENDFORM. "ALV_DISPLAY