SAP模板下载与路径上传导入
2026/6/6 11:02:16 网站建设 项目流程

操作步骤如下:
1、事务码:SMW0
选择二进制数据:

创建对象描述,执行:

选中空白行,点击创建,在创建过程中选择自己希望传入的EXCEL模板:

这样我们就预先把EXCEL模板存入SAP系统当中

程序代码编写:

*&---------------------------------------------------------------------* *& Report ZPP_R_CJ_071 *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT zpp_r_cj_071. TABLES:sscrfields,lv50c,marc,vbak,ztcertification. SELECTION-SCREEN FUNCTION KEY: 1,2. DATA: gs_layout TYPE lvc_s_layo. DATA: gs_fieldcat TYPE lvc_s_fcat, gt_fieldcat TYPE TABLE OF lvc_s_fcat. DATA: ok_code TYPE sy-ucomm . DATA: ls_style TYPE lvc_s_styl. *TYPES:BEGIN OF ty_data, * check TYPE char1, "选择 * supplier_code TYPE ztcertification-suppliercode, "供应商代码 * supplier_name TYPE ztcertification-, "供应商名称 * plant_id TYPE ztcertification-, "工厂代码 * plant_name TYPE ztcertification-, "工厂名称 * workshop_id TYPE ztcertification-, "车间代码 * workshop_name TYPE ztcertification-, "车间名称 * production_line_id TYPE string, "产线代码 * production_line_name TYPE string, "产线名称 * station_id TYPE string, "工位代码 * station_name TYPE string, "工位名称 * operator_id TYPE string, "工位人员账号 * operator_name TYPE string, "工位人员名称 * have_quantity TYPE string, "是否有资质(Y/N) * data_update_time TYPE string, "供应商修改时间 * position_id TYPE string, "岗位代码 * position_name TYPE string, "岗位名称 * qualification_level TYPE string, "资质等级 * checkin_time TYPE string, "资质获取时间 * check_out_time TYPE string, "资质失去时间 * END OF ty_data. TYPES:BEGIN OF ty_data, check TYPE char1, "选择 supplier_code TYPE ztcertification-suppliercode, "供应商代码 supplier_name TYPE ztcertification-suppliername, "供应商名称 plant_id TYPE ztcertification-plantid, "工厂代码 plant_name TYPE ztcertification-plantname, "工厂名称 workshop_id TYPE ztcertification-workshopid, "车间代码 workshop_name TYPE ztcertification-workshopname, "车间名称 production_line_id TYPE ztcertification-productionlineid, "产线代码 production_line_name TYPE ztcertification-productionlinename, "产线名称 station_id TYPE ztcertification-stationid, "工位代码 station_name TYPE ztcertification-stationname, "工位名称 operator_id TYPE ztcertification-operatorid, "工位人员账号 operator_name TYPE ztcertification-operatorname, "工位人员名称 have_quantity TYPE ztcertification-havequantity, "是否有资质(Y/N) data_update_time TYPE ztcertification-dataupdatetime, "供应商修改时间 position_id TYPE ztcertification-positionid, "岗位代码 position_name TYPE ztcertification-positionname, "岗位名称 qualification_level TYPE ztcertification-qualificationlevel, "资质等级 checkin_time TYPE ztcertification-checkintime, "资质获取时间 check_out_time TYPE ztcertification-checkouttime, "资质失去时间 END OF ty_data. DATA:gt_data TYPE TABLE OF ty_data, gs_data TYPE ty_data. DATA:gt_alv TYPE TABLE OF ztcertification, gs_alv TYPE ztcertification. TYPES:BEGIN OF ty_data1, workshop_name TYPE string, "车间名称 production_line_name TYPE string, "产线名称车间名称 station_name TYPE string, "工位名称 operator_id TYPE string, "工位人员账号 operator_name TYPE string, "工位人员名称 have_quantity TYPE string, "是否有资质(Y/N) position_name TYPE string, "岗位名称 qualification_level TYPE string, "资质等级 checkin_time TYPE string, "资质获取时间 check_out_time TYPE string, "资质失去时间 END OF ty_data1. DATA:gt_data1 TYPE TABLE OF ty_data1, gs_data1 TYPE ty_data1. SELECTION-SCREEN BEGIN OF BLOCK blk2 WITH FRAME TITLE text-002. PARAMETERS: p_check TYPE char1 AS CHECKBOX DEFAULT 'X' . PARAMETERS:p_file TYPE rlgrap-filename. SELECTION-SCREEN END OF BLOCK blk2. INITIALIZATION. sscrfields-functxt_01 = '导入模版下载'. sscrfields-functxt_02 = '人员资质对照表'. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. PERFORM frm_f4_file. AT SELECTION-SCREEN. CASE sscrfields-ucomm. WHEN 'FC01'. PERFORM frm_down_template. WHEN 'FC02'. PERFORM form_maintain_matrel. ENDCASE. START-OF-SELECTION. PERFORM frm_import_data. FORM frm_import_data . "导入文件,信息存储 PERFORM frm_upload_data. "下载EXCEL数据信息至岚图表中 PERFORM frm_show_alv. "将导入参数以ALV形式展示 ENDFORM. FORM frm_f4_file . DATA lt_filetable TYPE filetable. DATA lv_filter TYPE string. DATA lv_rc TYPE i. DATA lv_action TYPE i. lv_filter = 'Excel 文件(*.xlsx)|*.xlsx|所有文件(*.*)|*.*|'. CALL METHOD cl_gui_frontend_services=>file_open_dialog EXPORTING default_extension = 'xlsx' file_filter = lv_filter multiselection = abap_false CHANGING file_table = lt_filetable rc = lv_rc user_action = lv_action EXCEPTIONS file_open_dialog_failed = 1 cntl_error = 2 error_no_gui = 3 not_supported_by_gui = 4 OTHERS = 5. IF sy-subrc <> 0. * Implement suitable error handling here MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ELSE. CHECK lv_action <> 9. READ TABLE lt_filetable INTO DATA(ls_file) INDEX 1. p_file = ls_file. ENDIF. ENDFORM. FORM frm_down_template . DATA: ls_objdata TYPE wwwdatatab, ls_mime TYPE w3mime, lf_filename TYPE string VALUE '人员资质对照表导入模版', lf_fullpath TYPE string, lf_path TYPE string, lf_destination TYPE rlgrap-filename, lf_objnam TYPE string, lf_rc TYPE sy-subrc, lf_errtxt TYPE string. DATA: lf_objid TYPE wwwdatatab-objid, lf_dest LIKE sapb-sappfad. lf_objid = 'ZPP_R_CJ_071'. "EXCLE模板-----未上传 ,上传后才能下载成功 CALL METHOD cl_gui_frontend_services=>file_save_dialog "对话框 EXPORTING default_extension = 'XLSX' file_filter = 'Excel Files(XLS)' default_file_name = lf_filename CHANGING filename = lf_filename path = lf_path fullpath = lf_fullpath EXCEPTIONS cntl_error = 1 error_no_gui = 2 not_supported_by_gui = 3 OTHERS = 4. IF lf_fullpath <> ''. IF sy-subrc = 0. lf_dest = lf_fullpath. CONDENSE lf_objnam NO-GAPS. SELECT SINGLE relid objid FROM wwwdata INTO CORRESPONDING FIELDS OF ls_objdata WHERE srtf2 = 0 AND relid = 'MI' AND objid = lf_objid. *检查表wwwdata中是否存在所指定的模板文件 IF sy-subrc NE 0 OR ls_objdata-objid EQ space."如果不存在,则给出错误提示 CONCATENATE '模板文件' lf_objnam '不存在' INTO lf_errtxt. MESSAGE lf_errtxt TYPE 'I'. ENDIF. lf_destination = lf_dest. "保存路径 *如果存在,调用DOWNLOAD_WEB_OBJECT 函数下载模板到路径下 CALL FUNCTION 'DOWNLOAD_WEB_OBJECT' EXPORTING key = ls_objdata destination = lf_destination IMPORTING rc = lf_rc. IF lf_rc NE 0. CONCATENATE '模板文件:' lf_objnam '下载失败' INTO lf_errtxt . MESSAGE lf_errtxt TYPE 'E'. EXIT . ENDIF. ENDIF. ENDIF. ENDFORM. FORM form_maintain_matrel . CALL FUNCTION 'VIEW_MAINTENANCE_CALL' EXPORTING action = 'U' view_name = 'ZTCERTIFICATION'. ENDFORM. FORM frm_upload_data . DATA lt_intern TYPE STANDARD TABLE OF alsmex_tabline . DATA ls_file LIKE gs_data1. DATA:gt_mara TYPE TABLE OF mara WITH NON-UNIQUE KEY matnr, gs_mara TYPE mara. DATA:gt_makt TYPE TABLE OF makt WITH NON-UNIQUE KEY matnr, gs_makt TYPE makt. FIELD-SYMBOLS <lfs_data> TYPE any. CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE' EXPORTING filename = p_file i_begin_col = 1 i_begin_row = 2 i_end_col = 10 i_end_row = 65536 TABLES intern = lt_intern EXCEPTIONS inconsistent_parameters = 1 upload_ole = 2 OTHERS = 3. IF sy-subrc <> 0. MESSAGE '导入文件有错误' TYPE 'S' DISPLAY LIKE 'E'. LEAVE LIST-PROCESSING. ENDIF. LOOP AT lt_intern INTO DATA(ls_intern). ASSIGN COMPONENT ls_intern-col OF STRUCTURE ls_file TO <lfs_data>. <lfs_data> = ls_intern-value. AT END OF row. APPEND INITIAL LINE TO gt_data1 ASSIGNING FIELD-SYMBOL(<lfs_alv>). MOVE-CORRESPONDING ls_file TO <lfs_alv>. CLEAR ls_file. ENDAT. ENDLOOP. IF gt_data1 IS INITIAL. MESSAGE '无导入数据' TYPE 'S' DISPLAY LIKE 'E'. ENDIF. SORT gt_data1 BY operator_id. DELETE ADJACENT DUPLICATES FROM gt_data1 COMPARING workshop_name production_line_name station_name operator_id operator_name. ENDFORM. FORM frm_show_alv. DATA:lv_timestamp TYPE string. CONCATENATE sy-datum+0(4) '-' sy-datum+4(2) '-' sy-datum+6(2) ' ' sy-uzeit+0(2) ':' sy-uzeit+2(2) ':' sy-uzeit+4(2) INTO lv_timestamp RESPECTING BLANKS. DATA:gt_ztcheryposition TYPE TABLE OF ztcheryposition WITH NON-UNIQUE KEY positionname, gs_ztcheryposition TYPE ztcheryposition. DATA:gt_ztcherystation TYPE TABLE OF ztcherystation WITH NON-UNIQUE KEY stationname, gs_ztcherystation TYPE ztcherystation. DATA:gt_ztcertification TYPE TABLE OF ztcertification, gs_ztcertification TYPE ztcertification. DATA:gt_ztcheryworkshop TYPE TABLE OF ztcheryworkshop WITH NON-UNIQUE KEY workshopname, gs_ztcheryworkshop TYPE ztcheryworkshop. DATA:gt_crtx TYPE TABLE OF crtx WITH NON-UNIQUE KEY ktext, gs_crtx TYPE crtx. DATA:gt_crhd TYPE TABLE OF crhd WITH NON-UNIQUE KEY objid, gs_crhd TYPE crhd. SELECT * FROM crtx INTO TABLE gt_crtx. SELECT * FROM crhd INTO TABLE gt_crhd. SELECT * FROM ztcheryposition INTO TABLE gt_ztcheryposition. "岗位信息表 SELECT * FROM ztcherystation INTO TABLE gt_ztcherystation. "工位信息表 SELECT * FROM ztcertification INTO TABLE gt_ztcertification. "人员资质信息表 SELECT * FROM ztcheryworkshop INTO TABLE gt_ztcheryworkshop. "车间生产信息表 MOVE-CORRESPONDING gt_data1 TO gt_data. LOOP AT gt_data ASSIGNING FIELD-SYMBOL(<data>). CASE <data>-qualification_level. WHEN '一级'. <data>-qualification_level = 'Level_1' . WHEN '二级'. <data>-qualification_level = 'Level_2' . WHEN '三级'. <data>-qualification_level = 'Level_3' . WHEN '四级'. <data>-qualification_level = 'Level_4' . WHEN '五级'. <data>-qualification_level = 'Level_5' . ENDCASE. <data>-supplier_code = '4AB'. <data>-supplier_name = '南阳淅减汽车减振器有限公司'. <data>-plant_id = '8000'. <data>-plant_name = '南阳淅减汽车减振器有限公司'. <data>-data_update_time = lv_timestamp. READ TABLE gt_ztcheryposition INTO gs_ztcheryposition WITH TABLE KEY positionname = <data>-position_name. IF sy-subrc EQ 0. <data>-position_id = gs_ztcheryposition-positionid. "岗位ID ENDIF. READ TABLE gt_ztcheryworkshop INTO gs_ztcheryworkshop WITH TABLE KEY workshopname = <data>-workshop_name. IF sy-subrc EQ 0. <data>-workshop_id = gs_ztcheryworkshop-workshopid. "车间生产 ENDIF. READ TABLE gt_ztcherystation INTO gs_ztcherystation WITH TABLE KEY stationname = <data>-station_name. IF sy-subrc EQ 0. <data>-station_id = gs_ztcherystation-stationid. ENDIF. READ TABLE gt_crtx INTO gs_crtx WITH TABLE KEY ktext = <data>-production_line_name. IF sy-subrc EQ 0. READ TABLE gt_crhd INTO gs_crhd WITH TABLE KEY objid = gs_crtx-objid. IF sy-subrc EQ 0. <data>-production_line_id = gs_crhd-arbpl. ENDIF. ENDIF. ENDLOOP. PERFORM frm_fieldcat_init. CLEAR gs_layout. gs_layout-zebra = 'X'. gs_layout-box_fname = 'CHECK'. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING i_callback_program = sy-repid i_callback_pf_status_set = 'SET_PF_STATUS' i_callback_user_command = 'FRM_USER_COMMAND_ALV' is_layout_lvc = gs_layout it_fieldcat_lvc = gt_fieldcat[] i_save = 'U' TABLES t_outtab = gt_data. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. . IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. ENDFORM. FORM frm_fieldcat_init. CLEAR:gs_fieldcat,gt_fieldcat,gt_fieldcat[] . PERFORM prepare_fieldcat USING: 'SUPPLIER_CODE' 'TY_DATA' '' '' '10' '供应商代码' , 'SUPPLIER_NAME' 'TY_DATA' '' '' '20' '供应商名称' , 'PLANT_ID' 'TY_DATA' '' '' '8' '工厂代码' , 'PLANT_NAME' 'TY_DATA' '' '' '20' '工厂名称', 'WORKSHOP_ID' 'TY_DATA' '' '' '8' '车间代码' , 'WORKSHOP_NAME' 'TY_DATA' '' '' '20' '车间名称' , 'PRODUCTION_LINE_ID' 'TY_DATA' '' '' '20' '产线代码' , 'PRODUCTION_LINE_NAME' 'TY_DATA' '' '' '20' '产线名称' , 'STATION_ID' 'TY_DATA' '' '' '10' '工位代码' , 'STATION_NAME' 'TY_DATA' '' '' '12' '工位名称' , 'OPERATOR_ID' 'TY_DATA' '' '' '12' '工位人员账号' , 'OPERATOR_NAME' 'TY_DATA' '' '' '12' '工位人员名称', 'HAVE_QUANTITY' 'TY_DATA' '' '' '10' '是否有资质', 'DATA_UPDATE_TIME' 'TY_DATA' '' '' '20' '供应商修改时间', 'POSITION_ID' 'TY_DATA' '' '' '12' '岗位代码', 'POSITION_NAME' 'TY_DATA' '' '' '12' '岗位名称', 'QUALIFICATION_LEVEL' 'TY_DATA' '' '' '8' '资质等级', 'CHECKIN_TIME' 'TY_DATA' '' '' '20' '资质获取时间', 'CHECK_OUT_TIME' 'TY_DATA' '' '' '20' '资质失去时间'. ENDFORM. FORM set_pf_status USING ft_extab TYPE slis_t_extab. DATA: ls_extab TYPE slis_extab . CLEAR: ft_extab , ft_extab[] . SET PF-STATUS 'STANDARD1' EXCLUDING ft_extab . ENDFORM. "SET_PF_STATUS FORM frm_user_command_alv USING fu_ucomm TYPE sy-ucomm fu_selfield TYPE slis_selfield. CASE sy-ucomm. WHEN '&TB'. PERFORM frm_tb_data. WHEN OTHERS. ENDCASE. ENDFORM. FORM prepare_fieldcat USING fu_fieldname TYPE c fu_tabname TYPE c fu_key TYPE c fu_edit TYPE c fu_outputlen TYPE i fu_scrtext_m TYPE c. gs_fieldcat-fieldname = fu_fieldname . gs_fieldcat-tabname = fu_tabname . gs_fieldcat-key = fu_key . gs_fieldcat-outputlen = fu_outputlen . gs_fieldcat-scrtext_m = fu_scrtext_m . gs_fieldcat-edit = fu_edit . APPEND gs_fieldcat TO gt_fieldcat . CLEAR gs_fieldcat. ENDFORM . FORM frm_tb_data. DATA:lv_flag TYPE char1. LOOP AT gt_data INTO gs_data WHERE check = 'X'. gs_alv-suppliercode = gs_data-supplier_code . gs_alv-suppliername = gs_data-supplier_name . gs_alv-plantid = gs_data-plant_id . gs_alv-plantname = gs_data-plant_name . gs_alv-workshopid = gs_data-workshop_id . gs_alv-workshopname = gs_data-workshop_name . gs_alv-productionlineid = gs_data-production_line_id . gs_alv-productionlinename = gs_data-production_line_name. gs_alv-stationid = gs_data-station_id . gs_alv-stationname = gs_data-station_name . gs_alv-operatorid = gs_data-operator_id . gs_alv-operatorname = gs_data-operator_name . gs_alv-havequantity = gs_data-have_quantity . gs_alv-dataupdatetime = gs_data-data_update_time . gs_alv-positionid = gs_data-position_id . gs_alv-positionname = gs_data-position_name . * CASE gs_data-qualification_level. * WHEN '一级'. * gs_alv-qualificationlevel = ' Level_1' . * WHEN '二级'. * gs_alv-qualificationlevel = ' Level_2' . * WHEN '三级'. * gs_alv-qualificationlevel = ' Level_3' . * WHEN '四级'. * gs_alv-qualificationlevel = ' Level_4' . * WHEN '五级'. * gs_alv-qualificationlevel = ' Level_5' . * ENDCASE. gs_alv-qualificationlevel = gs_data-qualification_level. gs_alv-checkintime = gs_data-checkin_time . gs_alv-checkouttime = gs_data-check_out_time . APPEND gs_alv TO gt_alv. lv_flag = 'X'. ENDLOOP. IF lv_flag = 'X'. MODIFY ztcertification FROM TABLE gt_alv. MESSAGE '导入成功!' TYPE 'S'. ELSE. MESSAGE '您尚未选择数据进行导入!' TYPE 'E'. ENDIF. ENDFORM.

这段代码演示的是将表数据信息通过EXCEL导入后存储到人员资质表当中。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询