ABAP 数据导入功能demo

*&---------------------------------------------------------------------*
*& 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值