ABAP批导程序

*&---------------------------------------------------------------------*
*& Report  ZUPLOAD_TEST
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT  zupload_test.
*----------------------------------------------------------------------*
* 类型池声明
*----------------------------------------------------------------------*
TYPE-POOLS: slis,
            ole2,
            vrm,
            icon.
*----------------------------------------------------------------------*
* 数据库表声明
*----------------------------------------------------------------------*
TABLES: sscrfields.                 " 选择屏幕上的字段
DATA: l_filetab TYPE filetable,
      l_rc      TYPE i.
DATA: gt_tab TYPE TABLE OF makt WITH HEADER LINE.
DATA: BEGIN OF i_excel OCCURS 0.
        INCLUDE STRUCTURE alsmex_tabline.
DATA: END OF i_excel.
DATA: l_answer(1) TYPE c.
DATA: l_column TYPE i.
FIELD-SYMBOLS: <fs>.
DATA: l_pathname LIKE rlgrap-filename.
DATA: gv_ucomm TYPE sy-ucomm.
CONSTANTS:
  c_begin_row TYPE i VALUE 1,       "Beginning row of excel file
  c_begin_col TYPE i VALUE 1,       "Beginning column of excel file
  c_end_row   TYPE i VALUE 9999,    "Ending row of excel file
  c_end_col   TYPE i VALUE 55.      "Ending column of excel file

DATA: gt_fieldcat TYPE STANDARD TABLE OF lvc_s_fcat.  " 字段目录的内表
DATA: ls_fieldcat TYPE lvc_s_fcat.                   " 字段目录的工作区
DATA: gs_layout TYPE lvc_s_layo.                       " ALV布局

DATA: c_path TYPE char128 .

*----------------------------------------------------------------------*
* 宏定义
*----------------------------------------------------------------------*
DEFINE fillfiedcat.

  ls_fieldcat-fieldname     = &1.    " ALV 控制: 内部表字段的字段名称
  ls_fieldcat-scrtext_l     = &2.    " 长字段标签
  ls_fieldcat-no_zero       = &3.    " 无前导零
  ls_fieldcat-outputlen     = &4.    " 输出长度
  append ls_fieldcat to gt_fieldcat.
  clear ls_fieldcat.

END-OF-DEFINITION.

*&---------------------------------------------------------------------*
*& Selection Screen/选择屏幕
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK bl01 WITH FRAME TITLE text-000.
PARAMETERS: p_fname  LIKE rlgrap-filename MEMORY ID m01.      " 获取文件路径
SELECTION-SCREEN END OF BLOCK bl01.
SELECTION-SCREEN: FUNCTION KEY 1.
*&---------------------------------------------------------------------*
*& INITIALIZATION/选择屏幕前初始化
*&---------------------------------------------------------------------*
INITIALIZATION.
  "初始化屏幕
  PERFORM frm_init_sel_screen.

AT SELECTION-SCREEN.
  "响应选择屏幕的按钮功能
  PERFORM frm_excue_button.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname.
  PERFORM get_p_fname USING p_fname.              "把需要导入的文件的路径存放在P_name 中

START-OF-SELECTION.
*    上载数据
  PERFORM frm_uploaddata.

END-OF-SELECTION.
*&---展示ALV
  PERFORM frm_display_alv.
*&---------------------------------------------------------------------*
*&      Form  frm_init_sel_screen
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_init_sel_screen .
  DATA: lv_functxt TYPE smp_dyntxt.
  lv_functxt-icon_id   = icon_xxl.
  lv_functxt-icon_text = '导入模板下载'.
  sscrfields-functxt_01 = lv_functxt.
ENDFORM.                    " frm_init_sel_screen
*&---------------------------------------------------------------------*
*&      Form  frm_excue_button
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_excue_button .
  CLEAR: gv_ucomm.
  CASE sscrfields-ucomm.
    WHEN 'FC01'.
      PERFORM frm_download_template.
    WHEN OTHERS.
  ENDCASE.
ENDFORM.                    " frm_excue_button
*&---------------------------------------------------------------------*
*&      Form  frm_download_template
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_download_template .
  DATA: ls_wwwdatatab     LIKE wwwdatatab,
        lt_mime           LIKE w3mime OCCURS 10,
        lv_filename       TYPE string,
        lv_path           TYPE string,
        lv_fullpath       TYPE string,
        window_title      TYPE string,
        default_file_name TYPE string.
  DATA: lv_destination TYPE rlgrap-filename,
        lv_subrc       TYPE sy-subrc.

  CLEAR: ls_wwwdatatab,lt_mime[],lv_filename,lv_path,lv_fullpath,window_title,default_file_name.

  ls_wwwdatatab-relid = 'MI'.         "IMPORT/EXPORT 数据表中的区域
  ls_wwwdatatab-objid = ''.    "这里写入刚刚让记住的模板对象名
  ls_wwwdatatab-text  = ''.  "WWWDATA 对象的短文本
  window_title = '下载导入模板'.
  default_file_name = 'SAP批量导入模板'.

  CALL FUNCTION 'WWWDATA_IMPORT'                            "#EC *
    EXPORTING
      key               = ls_wwwdatatab
    TABLES
      mime              = lt_mime
    EXCEPTIONS
      wrong_object_type = 1
      import_error      = 2
      OTHERS            = 3.

  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      window_title         = window_title
      default_extension    = 'xlsx'
      default_file_name    = default_file_name
*     file_filter          = 'EXCEL'
    CHANGING
      filename             = lv_filename
      path                 = lv_path
      fullpath             = lv_fullpath
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.

  IF sy-subrc <> 0.
    STOP.
  ENDIF.

  IF lv_fullpath IS NOT INITIAL.
    lv_destination = lv_fullpath.
    CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
      EXPORTING
        key         = ls_wwwdatatab
        destination = lv_destination
      IMPORTING
        rc          = lv_subrc.
    IF lv_subrc <> 0.
      MESSAGE '下载失败' TYPE 'S' DISPLAY LIKE 'E'.
    ENDIF.
  ENDIF.
ENDFORM.                    " frm_download_template
*&---------------------------------------------------------------------*
*&      Form  get_p_fname
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_P_FNAME  text
*----------------------------------------------------------------------*
FORM get_p_fname  USING    p_p_fname.
  CLEAR l_filetab.
  REFRESH l_filetab.
* Open dialog
  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
*     WINDOW_TITLE         = 'SAP Custom - Open File'
*     DEFAULT_EXTENSION    =
      default_filename     = '*.xls'
*     FILE_FILTER          = '*.xls'
      initial_directory    = 'd:\'
      multiselection       = ''
    CHANGING
      file_table           = l_filetab
      rc                   = l_rc
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.
* Get file path
  CHECK l_rc EQ 1.
  READ TABLE l_filetab INDEX 1 INTO  p_fname.
ENDFORM.                    " get_p_fname
*&---------------------------------------------------------------------*
*&      Form  frm_uploaddata
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_uploaddata .
  DATA :v1(20) TYPE c,
        v2(20) TYPE n,
        v3     LIKE vbap-netwr.
  CLEAR i_excel[].
  MOVE p_fname TO l_pathname.
  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename                = l_pathname
      i_begin_col             = c_begin_col
      i_begin_row             = c_begin_row
      i_end_col               = c_end_col
      i_end_row               = c_end_row
    TABLES
      intern                  = i_excel
    EXCEPTIONS
      inconsistent_parameters = 1
      upload_ole              = 2
      OTHERS                  = 3.
  IF sy-subrc <> 0.
*    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*          WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ELSE.
    IF i_excel[] IS INITIAL.
      CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE'
        EXPORTING
*         DEFAULTOPTION = 'Y'
          diagnosetext1 = 'No data in excel'
*         DIAGNOSETEXT2 = ' '
*         DIAGNOSETEXT3 = ' '
          textline1     = 'No data in excel'
*         TEXTLINE2     = ' '
          titel         = 'Confirm'
*         START_COLUMN  = 25
*         START_ROW     = 6
*         CANCEL_DISPLAY       = 'X'
        IMPORTING
          answer        = l_answer.
    ELSE.
      DELETE i_excel WHERE row = '0001'.
      SORT i_excel BY row col.
      LOOP AT i_excel.
        MOVE i_excel-col TO l_column.
        ASSIGN COMPONENT l_column OF STRUCTURE gt_tab TO <fs>.
        MOVE i_excel-value TO <fs>.
        AT END OF row.
          APPEND gt_tab.
          CLEAR gt_tab.
        ENDAT.
      ENDLOOP.
    ENDIF.
  ENDIF.
ENDFORM.                    " frm_uploaddata
*&---------------------------------------------------------------------*
*&      Form  frm_display_alv
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_display_alv .
  gs_layout-zebra                = 'X'.    " 表格斑马线
  gs_layout-cwidth_opt       = 'X'.
*&---设置ALV的字段目录
  PERFORM frm_set_fieldcat.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = sy-repid
      is_layout_lvc            = gs_layout
      it_fieldcat_lvc          = gt_fieldcat
      i_save                   = 'A'
      i_callback_pf_status_set = 'PF_STATUS_SET'
      i_callback_user_command  = 'USER_COMMAND'
    TABLES
      t_outtab                 = gt_tab
    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.                    " frm_display_alv
*&---------------------------------------------------------------------*
*&      Form  frm_set_fieldcat
*&---------------------------------------------------------------------*
*       设置ALV的字段目录
*----------------------------------------------------------------------*
FORM frm_set_fieldcat.

  fillfiedcat 'MANDT' text-001 '' 25 .
  fillfiedcat 'MATNR' text-002 '' 25 .
  fillfiedcat 'SPRAS' text-003 '' 25 .
  fillfiedcat 'MAKTX' text-004 '' 25 .
  fillfiedcat 'MAKTG' text-005 '' 25 .

ENDFORM.                    "frm_set_fieldcat
*&---------------------------------------------------------------------*
*&      Form  pf_status_set
*&---------------------------------------------------------------------*
*        ALV工具栏状态
*----------------------------------------------------------------------*
*      -->RT_EXTAB   text
*----------------------------------------------------------------------*
FORM pf_status_set USING rt_extab TYPE slis_t_extab.
  SET PF-STATUS '1000' .
ENDFORM.                    "pf_status_set
*&---------------------------------------------------------------------*
*&      Form  user_command
*&---------------------------------------------------------------------*
*       ALV工具栏命令
*----------------------------------------------------------------------*
*      -->R_UCOMM      text
*      -->RS_SELFIELD  text
*----------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
                        rs_selfield TYPE slis_selfield.
  rs_selfield-col_stable = 'X'.
  rs_selfield-row_stable = 'X'.
  rs_selfield-refresh = 'X'.
  CASE r_ucomm.
    WHEN 'CHECK'.

    WHEN 'POST'.

    WHEN 'BACK'.
      LEAVE TO SCREEN 0.
    WHEN 'EXIT' OR 'CANCEL'.
      LEAVE PROGRAM.
  ENDCASE.
ENDFORM.                    "user_command

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值