REPORT Z1.REPORT zsbxc_fi_0014.TABLES:sscrfields.*&---------------------------------------------------------------------*
*& 定义结构、内表、工作区
*&---------------------------------------------------------------------*
TYPES:BEGIN OF ty_upload,box TYPE C, "选择框light TYPE char4, "状态灯mesg TYPE char200,
END OF ty_upload.TYPES:BEGIN OF ty_alv,box TYPE C, "选择框light TYPE char4, "状态灯mesg TYPE char200,
END OF ty_alv.DATA:gt_fieldcat TYPE lvc_t_fcat,gs_fieldcat TYPE lvc_s_fcat,gs_layout TYPE lvc_s_layo.DATA:gt_excel TYPE alsmex_tabline OCCURS 0 WITH HEADER LINE,gs_excel TYPE alsmex_tabline.DATA:gt_upload TYPE STANDARD TABLE OF ty_upload WITH HEADER LINE,gs_upload TYPE ty_upload.DATA:gt_alv TYPE TABLE OF ty_alv,gs_alv TYPE ty_alv.*&---------------------------------------------------------------------*
*& 按钮
*&---------------------------------------------------------------------*
DATA:functxt TYPE smp_dyntxt.
DATA:p_down TYPE rlgrap-filename.*&---------------------------------------------------------------------*
*& 屏幕
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE TEXT-001.PARAMETERS:p_file LIKE rlgrap-filename MODIF ID m1. "文件
SELECTION-SCREEN END OF BLOCK bk1.SELECTION-SCREEN: FUNCTION KEY 1.*&---------------------------------------------------------------------*
*& 初始化
*&---------------------------------------------------------------------*
INITIALIZATION.
MOVE '@49@模板下载' TO sscrfields-functxt_01.AT SELECTION-SCREEN OUTPUT.AT SELECTION-SCREEN.
CASE sscrfields-ucomm.
WHEN 'FC01'.PERFORM frm_get_filepath.PERFORM frm_file_down. "下载模板
WHEN OTHERS....
ENDCASE.AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
PERFORM frm_bro_form. "选择文件START-OF-SELECTION.PERFORM frm_upload_data."解析上传的EXCEL文件
PERFORM frm_deal_data."处理导入的数据
PERFORM frm_alv_display.*&---------------------------------------------------------------------*
*& Form frm_get_filepath
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_get_filepath .DATA: it_file TYPE filetable,wa_file TYPE file_table,p_type TYPE C VALUE 'A'.DATA:l_rc TYPE I,l_extension TYPE string,l_default TYPE string,l_filter TYPE string,l_filename TYPE string,l_path TYPE string,l_fullpath TYPE string,l_action TYPE I.CLEAR:p_down.l_filter = 'Excel Files (*.xls)|*.xls|'.l_extension = '*.xls,*.*'. "CALL METHOD cl_gui_frontend_services=>file_save_dialogEXPORTINGwindow_title = '选择文件'default_extension = l_extensiondefault_file_name = '统计指标批量录入模板'file_filter = l_filterinitial_directory = 'D:\'CHANGINGfilename = l_filenamepath = l_pathfullpath = l_fullpathuser_action = l_actionEXCEPTIONScntl_error = 1error_no_gui = 2not_supported_by_gui = 3OTHERS = 4.IF sy-subrc = 0.p_down = l_fullpath.ENDIF.IF l_action <> 0.STOP.ENDIF.ENDFORM. " frm_get_filepath
*&---------------------------------------------------------------------*
*& Form frm_file_down
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_file_down .DATA: lv_objdata LIKE wwwdatatab,lv_mime LIKE w3mime,lv_destination LIKE rlgrap-filename,lv_objnam TYPE string,lv_rc LIKE sy-subrc,lv_errtxt TYPE string.DATA: lv_filename TYPE string,lv_result,lv_subrc TYPE sy-subrc.DATA: lv_objid TYPE wwwdatatab-objid .lv_objid = 'ZTJZB'. "上传的模版名称*&---查找文件是否存在。SELECT SINGLE relid objidFROM wwwdataINTO CORRESPONDING FIELDS OF lv_objdataWHERE srtf2 = 0AND relid = 'MI'AND objid = lv_objid.*&---判断模版不存在则报错IF sy-subrc NE 0 OR lv_objdata-objid EQ space.CONCATENATE '模板文件:' lv_objid '不存在,请用TCODE:SMW0进行加载' INTO lv_errtxt.MESSAGE lv_errtxt TYPE 'E'.ENDIF.lv_destination = p_down.CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'EXPORTINGKEY = lv_objdatadestination = lv_destinationIMPORTINGrc = lv_rc.IF lv_rc NE 0.MESSAGE '模板文件下载失败' TYPE 'E'.ENDIF.ENDFORM. " frm_file_down
*&---------------------------------------------------------------------*
*& Form FRM_BRO_FORM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_bro_form .CALL FUNCTION 'WS_FILENAME_GET'EXPORTINGMASK = ',Excel Files,*.XLS,All Files,*.*.'TITLE = '选择上传文件'IMPORTINGfilename = p_fileEXCEPTIONSinv_winsys = 1no_batch = 2selection_cancel = 3selection_error = 4OTHERS = 5.IF sy-subrc <> 0 AND sy-subrc <> 3.MESSAGE '选择文件出错!' TYPE 'E'.ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_upload_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_upload_data .DATA: begin_row TYPE I VALUE '2',begin_col TYPE I VALUE '1',end_row TYPE I VALUE '9999',end_col TYPE I VALUE '8'.DATA: g_row TYPE I.CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'EXPORTINGfilename = p_filei_begin_col = begin_col "列i_begin_row = begin_row "行i_end_col = end_coli_end_row = end_rowTABLESintern = gt_excel.IF gt_excel[] IS INITIAL.MESSAGE '请填充数据 ' TYPE 'S' DISPLAY LIKE 'E' .LEAVE LIST-PROCESSING .ENDIF.SORT gt_excel BY row col VALUE.LOOP AT gt_excel INTO gs_excel.ON CHANGE OF gs_excel-row.IF sy-tabix NE 1.APPEND gs_upload TO gt_upload.CLEAR gs_upload.ENDIF.ENDON.ASSIGN COMPONENT gs_excel-col OF STRUCTURE gs_upload TO FIELD-SYMBOL(<fs>).IF <fs> IS ASSIGNED.<fs> = gs_excel-VALUE.UNASSIGN <fs>.ENDIF.ENDLOOP.APPEND gs_upload TO gt_upload.
ENDFORM. " frm_upload_data
*&---------------------------------------------------------------------*
*& Form FRM_DEAL_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_deal_data .MOVE-CORRESPONDING gt_upload[] TO gt_alv[].
ENDFORM.*&---------------------------------------------------------------------*
*& Form FRM_ALV_DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_alv_display .DEFINE m_fieldcat.gs_fieldcat-fieldname = &1.gs_fieldcat-coltext = &2.gs_fieldcat-ref_table = &3.gs_fieldcat-ref_field = &4.gs_fieldcat-no_zero = &5.gs_fieldcat-EDIT = &6.gs_fieldcat-CHECKBOX = &7.APPEND gs_fieldcat TO gt_fieldcat.CLEAR gs_fieldcat.END-OF-DEFINITION.m_fieldcat 'BOX' '选择框' '' '' '' 'X' 'X' .gs_layout-zebra = 'X'. "颜色间隔gs_layout-cwidth_opt = 'X'. "自适应宽度CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGit_fieldcat_lvc = gt_fieldcati_callback_pf_status_set = 'FRM_GUI_STATUS'i_callback_user_command = 'FRM_USER_COMMAND'i_callback_program = sy-repidis_layout_lvc = gs_layouti_save = 'A'TABLESt_outtab = gt_alvEXCEPTIONSprogram_error = 1OTHERS = 2.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_gui_status
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PT_EXTAB text
*----------------------------------------------------------------------*
FORM frm_gui_status USING pt_extab TYPE slis_t_extab.SET PF-STATUS 'STANDARD'. "gui状态
ENDFORM. "frm_gui_status
*&---------------------------------------------------------------------*
*& Form frm_user_command
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PV_UCOMM text
* -->PW_SELFIELD text
*----------------------------------------------------------------------*
FORM frm_user_command USING pv_ucomm LIKE sy-ucommpw_selfield TYPE slis_selfield.DATA:lo_grid TYPE REF TO cl_gui_alv_grid.CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'IMPORTINGe_grid = lo_grid. "获取全局变量CALL METHOD lo_grid->check_changed_data.pw_selfield-REFRESH = 'X'. "刷新界面CASE pv_ucomm.WHEN 'ALL'. "全选PERFORM frm_all.WHEN 'SAL'. "删除PERFORM frm_sal.WHEN OTHERS.ENDCASE.pw_selfield-REFRESH = 'X'. "刷新界面
ENDFORM. "frm_user_command
*&---------------------------------------------------------------------*
*& Form FRM_ALL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_all .LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(<fs_01>).<fs_01>-box = 'X'.ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SAL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_sal .LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(<fs_02>).<fs_02>-box = ''.ENDLOOP.ENDFORM.