2批量导入数据

批量导入数据
1.定义屏幕按钮和文件输入框
在这里插入图片描述
定义选择按钮

PARAMETERS:
            p_cx RADIOBUTTON GROUP g1 DEFAULT 'X' USER-COMMAND SINGLECLICK,
            p_dr RADIOBUTTON GROUP g1 ,                       
            p_dr2 RADIOBUTTON GROUP g1.

 "注意:设置其他按钮的输入框不显示
 AT SELECTION-SCREEN OUTPUT.
  PERFORM frm_hide.

FORM frm_hide .
   LOOP AT SCREEN.
     CASE 'X'.
       WHEN p_cx.
        IF screen-group1 = 'TY' OR screen-group1 = 'TY1'.
          screen-invisible = '1'.
          screen-active = '0'.
        ELSE.
          screen-invisible = '0'.
          screen-active = '1'.
        ENDIF.
       WHEN p_dr.
       WHEN p_dr2.
     ENDCASE.
     MODIFY SCREEN.
   ENDLOOP.
ENDFORM.

用于获取导入的 EXCEL 文件路径

PARAMETERS:p_path   LIKE rlgrap-filename MODIF ID TY.
PARAMETERS:p_path2  LIKE rlgrap-filename MODIF ID TY1.     "ID可用与隐藏按钮的内容

通过文件选择框的形式获的文件路径该文件即为待导入的文件

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path2.
  PERFORM frm_get_path2.

FORM frm_get_path2.
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      mode             = 'O'
      title            = '导入模板'
    IMPORTING
      filename         = p_path2         !!这里要改
    EXCEPTIONS
      inv_winsys       = 1
      no_batch         = 2
      selection_cancel = 3
      selection_error  = 4
      OTHERS           = 5.
ENDFORM.

2.获取文件数据

FORM get_excel_data2.
    TYPES: BEGIN OF ty_cols_rows,
             begin_col TYPE i,
             begin_row TYPE i,
             end_col   TYPE i,
             end_row   TYPE i,
           END OF ty_cols_rows.

    DATA: ls_cols_rows TYPE ty_cols_rows.
    DATA: lv_file LIKE rlgrap-filename.
    DATA: excel    TYPE ole2_object,
          lv_index TYPE i.

    DATA: lt_excel LIKE TABLE OF alsmex_tabline,
          ls_excel LIKE alsmex_tabline,
          temp TYPE ztsd015m-zdno.

    FIELD-SYMBOLS: <fs>.

    lv_file = p_path2.                  !!文件路径,要改

    ls_cols_rows-begin_col = 1.          !!也要改
    ls_cols_rows-begin_row = 5.
    ls_cols_rows-end_col = 4.
    ls_cols_rows-end_row = 30000.

    CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
      EXPORTING
        filename                = lv_file
        i_begin_col             = ls_cols_rows-begin_col
        i_begin_row             = ls_cols_rows-begin_row
        i_end_col               = ls_cols_rows-end_col
        i_end_row               = ls_cols_rows-end_row
      TABLES
        intern                  = lt_excel
      EXCEPTIONS
        inconsistent_parameters = 1
        upload_ole              = 2
        OTHERS                  = 3.
    SET PROPERTY OF excel 'DisplayAlerts' = 0.

    SORT lt_excel BY row col.

    LOOP AT lt_excel INTO ls_excel.
      lv_index = ls_excel-col.
      ASSIGN COMPONENT lv_index OF STRUCTURE gs_data1 TO <fs>.
      <fs> = ls_excel-value.
      AT END OF row.                                "这个后面可以处理导入的一行数据
        SELECT SINGLE ZDNO FROM ZTSD015M INTO TEMP WHERE ZDNO = GS_DATA1-ZDNO.
          IF TEMP = ''.
            GS_DATA1-LIGHT = icon_red_light.
            GS_DATA1-REMARK = '不正确的出运单号,请检查出运单号'.
          ELSE.
            GS_DATA1-LIGHT = icon_green_light.
          UPDATE ZTSD015M SET ZTD = @gs_data1-ZTD ,  "把导入的数据放入底表
                            ZWLGS = @gs_data1-ZWLGS
                            WHERE ZDNO = @gs_data1-ZDNO.
          ENDIF.
       APPEND gs_data1 TO gt_data1.
       CLEAR gs_data1 .
       CLEAR temp.                                   "要注意清空,不然END ROW里的数据会出现问题
      ENDAT.
    ENDLOOP.

ENDFORM.

3.展示导入的数据

FORM frm_dis_alv2.
  gs_layout-cwidth_opt = 'X'.
  gs_layout-zebra = 'X'.

  PERFORM FRM_GET_FIELDCATALOG_DES3 USING   'LIGHT'     '信号灯'    '' ''.   !!!要改
  PERFORM FRM_GET_FIELDCATALOG_DES3 USING   'ZDNO'     '出运单号'    '' ''.
  PERFORM FRM_GET_FIELDCATALOG_DES3 USING 'ZTD'        '提单号' ''  '' .
  PERFORM FRM_GET_FIELDCATALOG_DES3 USING 'ZWLGS'      '物流公司' ''  '' .
  PERFORM FRM_GET_FIELDCATALOG_DES3 USING   'REMARK'     '返回消息'    '' ''.


   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM       = SY-REPID
      I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
      is_layout_lvc            = GS_LAYOUT
      it_fieldcat_lvc          = GT_FIELDCAT
      I_SAVE                   = 'X'
    TABLES
      T_OUTTAB                 = gt_data1                          !!!这里要改,而且gt_data1要自己定义,且要展示的字段与定义的顺序一致
    EXCEPTIONS
      PROGRAM_ERROR            = 1
      OTHERS                   = 2.
  IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
ENDFORM.

4.主程序调用

START-OF-SELECTION.      "开始选择
  PERFORM FRM_MAIN_PROCESS.   "执行主流程

FORM FRM_MAIN_PROCESS .
  IF p_cx = 'X'.
  ELSEIF p_dr =  'X'
    PERFORM get_excel_data.
    PERFORM frm_dis_alv.
  ELSE.
    PERFORM get_excel_data2.
    PERFORM frm_dis_alv2.
  ENDIF.
ENDFORM.            

5.在底表定义要加入的字段和数据元素,这一步必须要有,应为要插入数据到底表
在这里插入图片描述
字段自己命名,数据元素可以通过代码中定义的类型中参考的底表数据元素

    ZTD     TYPE ZTSD015M-ZTD,       "提单号       "在底表类型中定义一下,要用
      ZWLGS   TYPE ZTSD015M-ZWLGS,      "物流公司

gt_data1的类型定义

BEGIN OF ty_data1,
    ZDNO TYPE ZTSD015M-ZDNO,      "字段顺序要与展示输出的一致
    ZTD     TYPE ZTSD015M-ZTD,
    ZWLGS   TYPE ZTSD015M-ZWLGS,
    remark      TYPE char50,
    light       TYPE icon_d,
  END OF ty_data1,

GT_DATA1  TYPE TABLE OF ty_data1,
      GS_DATA1 TYPE ty_data1,
  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值