批量上传EXCEL到自建表(包括查询删除功能)

复制代码
*&---------------------------------------------------------------------*
*& Report ZFFX001
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zfjw002.
TABLES:
  zfi_jh_gys_dj,sscrfields.
*&---------------------------------------------------------------------*
*& TYPE POOL
*&---------------------------------------------------------------------*
TYPE-POOLS: slis.

*&---------------------------------------------------------------------*
*& ALV varible
*&---------------------------------------------------------------------*
DATA: it_fields TYPE slis_t_fieldcat_alv.
DATA: wa_fields TYPE LINE OF slis_t_fieldcat_alv.

DATA: gs_layout           TYPE slis_layout_alv,
      wa_event            TYPE slis_alv_event,
      gt_event            TYPE slis_t_event,
      gs_variant          TYPE disvariant,
      gt_list_top_of_page TYPE slis_t_listheader,
      g_repid             LIKE sy-repid.

*&---------------------------------------------------------------------*
*& Excel Import global variable
*&---------------------------------------------------------------------*
DATA: g_filepath TYPE string.                      "保存文件路径
FIELD-SYMBOLS:<fs_unit> LIKE  alsmex_tabline.      "Excel单元格
FIELD-SYMBOLS:<fs_value> TYPE any.
DATA: g_lines LIKE sy-index VALUE 2.               "Excel数据的行数
DATA: g_index LIKE sy-index VALUE 1.               "message表的序号
DATA: g_sign TYPE c.                                "Excel一行是否写入成功的标志
DATA: g_succ LIKE sy-index.                         "成功更新条数
DATA g_fail TYPE i VALUE 0.                         "失败的行数
DATA g_flag TYPE char1.                             "标记


CONSTANTS : s_ctumode TYPE ctu_params-dismode VALUE 'N',  "屏幕不可见
            s_cupdate TYPE ctu_params-updmode VALUE 'S'.  "同步模式
DATA t_xlstmp TYPE alsmex_tabline OCCURS 0 WITH HEADER LINE. "保存Excel中读取的记录
DATA:BEGIN OF wa_message,
       znumb   TYPE int4,
       message TYPE char255,

     END OF wa_message.
DATA it_message LIKE wa_message OCCURS 0 WITH HEADER LINE."提示信息


DATA: BEGIN OF t_data OCCURS 0,
        znumb  TYPE int4, "该次上传的excel内的序号
        datab  TYPE  zfi_jh_gys_dj-ww100,
        zbzflx TYPE  zfi_jh_gys_dj-zbzflx,
        lifnr  TYPE  zfi_jh_gys_dj-lifnr,
        datbi  TYPE  zfi_jh_gys_dj-ww100,
        ww100  TYPE  zfi_jh_gys_dj-datbi,
        zdj    TYPE  zfi_jh_gys_dj-zdj,
        waers  TYPE  zfi_jh_gys_dj-waers,
        zsfcny TYPE  zfi_jh_gys_dj-zsfcny,


        lines  TYPE int4,          "保存行号
        flag   TYPE char1,          "标记该行数据是否合法
      END OF t_data.

DATA:BEGIN OF wa_itab.
    INCLUDE STRUCTURE zfi_jh_gys_dj.
DATA:

  sel  TYPE char1,
  flag TYPE char1,
  END OF wa_itab.


DATA t_itab LIKE  wa_itab OCCURS 0 WITH HEADER LINE.
DATA t_dj LIKE  zfi_jh_gys_dj OCCURS 0 WITH HEADER LINE.
DATA it_alv_d LIKE t_itab OCCURS 0 WITH HEADER LINE .


*DATA:BEGIN OF i_text OCCURS 0,
*       znumb    TYPE char10,
*       bukrs TYPE char10,
*       spmon    TYPE char10,
*       zylx     TYPE char10,
*       zdj      TYPE char10,
*       meins    TYPE char10,
*     END OF i_text.

DATA g_text TYPE char100.
DATA:wa_dj LIKE zfi_jh_gys_dj.

*&---------------------------------------------------------------------*
*& gloabel variable
*&---------------------------------------------------------------------*
DATA: ok_code LIKE sy-ucomm,
      save_ok LIKE sy-ucomm.
DATA:save_ok1 LIKE sy-ucomm.

*&---------------------------------------------------------------------*
*& Macro Definition
*&---------------------------------------------------------------------*
DEFINE macro_fieldcat.

  wa_fields-fieldname = &1.
  TRANSLATE wa_fields-fieldname TO UPPER CASE.
  wa_fields-seltext_l = &2.
  wa_fields-outputlen  = &3.
  wa_fields-edit  = &4.
  APPEND wa_fields  TO it_fields.
  CLEAR:wa_fields.

END-OF-DEFINITION.

*&---------------------------------------------------------------------*
*&  Selection Screen
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK block0 WITH FRAME TITLE TEXT-001.
PARAMETERS: r1 RADIOBUTTON GROUP g DEFAULT 'X'.
SELECT-OPTIONS:
*  s_bukrs FOR zfi_jh_gys_dj-bukrs,
*  s_spmon FOR zfi_jh_gys_dj-spmon,
*  s_zylx FOR zfi_jh_gys_dj-zylx,
*  s_zxhlx FOR zfi_jh_gys_dj-zxhlx.


  s_ww100 FOR zfi_jh_gys_dj-ww100,
  s_datab FOR zfi_jh_gys_dj-datab.



PARAMETERS: r2 RADIOBUTTON GROUP g .
PARAMETERS: g_fname LIKE rlgrap-filename.    "输入文件名称

*PARAMETERS: r3 RADIOBUTTON GROUP g .
*PARAMETERS:p_fname TYPE string DEFAULT 'C:/油类型单价信息维护上传模板.XLS'.


SELECTION-SCREEN END OF BLOCK block0.
SELECTION-SCREEN FUNCTION KEY 1.                       " Download template

*&---------------------------------------------------------------------*
*&  File Impoft screen
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR g_fname.
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      def_path         = 'c:\'
      " 对话框默认打开路径
      mask             = ',Excel Files,*.xls,'(101)
      "文件类型过滤
      mode             = 'O'
      "文件打开的目的
      title            = '请选择要导入的Excel文件!'     "对话框标题
    IMPORTING
      filename         = g_fname
    EXCEPTIONS
      inv_winsys       = 1
      no_batch         = 2
      selection_cancel = 3
      selection_error  = 4
      OTHERS           = 5.
  IF sy-subrc <> 0 .
    STOP.
  ENDIF.

  CLEAR g_filepath.
  g_filepath = g_fname.
* 判断是否为excel文件
  SEARCH  g_filepath  FOR '.xls'.
  IF sy-subrc <> 0.
    MESSAGE s003(msgnr) WITH '文件类型错误,请选择Excel数据文件!'.
    STOP.
  ENDIF.



INITIALIZATION.
  sscrfields-functxt_01 = '模板下载'.

AT SELECTION-SCREEN.
  IF sscrfields-ucomm = 'FC01' .
    PERFORM fm_download_template.                     " 下载模板
  ENDIF.

START-OF-SELECTION.

  IF r1 EQ 'X'.
    PERFORM frm_query.

  ELSEIF r2 = 'X'.

    PERFORM frm_excel.


*  ELSEIF r3 = 'X'.
*
*    PERFORM frm_download.

  ELSE.

  ENDIF.
*&---------------------------------------------------------------------*
*&      Form  frm_query
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_query.
  FREE:t_itab[].

  SELECT *
    FROM zfi_jh_gys_dj
    INTO CORRESPONDING FIELDS OF TABLE t_itab
    WHERE ww100 IN s_ww100
    AND datab IN s_datab
    .

  CLEAR it_alv_d[].
  it_alv_d[] = t_itab[].

  SORT t_itab BY ww100 zbzflx datab.
  gs_layout-zebra = 'X'.
  gs_layout-info_fieldname = 'LINE_COLOR'.
  gs_layout-box_fieldname     = 'SEL'.
  PERFORM fr_build_fieldcats.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_save                   = 'A'
      i_callback_program       = sy-repid
      i_callback_pf_status_set = 'SET_PF_STATUS'
      i_callback_user_command  = 'FRM_UCOMM'
      it_fieldcat              = it_fields[]
      is_layout                = gs_layout
    TABLES
      t_outtab                 = t_itab
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.

ENDFORM.                    "frm_query
*&---------------------------------------------------------------------*
*&      Form  fr_build_fieldcats
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM fr_build_fieldcats.
  REFRESH it_fields.
  macro_fieldcat 'WW100' '注册号' '8' ''.
  macro_fieldcat 'DATAB' '开始生效日期' '8' ''.
  macro_fieldcat 'ZBZFLX' '飞机保障费类型' '2' 'X'.
  macro_fieldcat 'LIFNR' '供应商' '10' 'X'.
  macro_fieldcat 'DATBI' '有效截至日期' '8' 'X'.
  macro_fieldcat 'ZDJ' '单价' '20' 'X'.
  macro_fieldcat 'WAERS' '货币码' '5' 'X'.
  macro_fieldcat 'ZSFCNY' '是否以CNY记账' '1' 'X'.


ENDFORM.                    "fr_build_fieldcats
*&---------------------------------------------------------------------*
*&      Form  set_pf_status
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RT_EXTAB   text
*----------------------------------------------------------------------*
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
  SET PF-STATUS 'STANDARD_FULLSCREEN'.
ENDFORM. "Set_pf_status
*&---------------------------------------------------------------------*
*&      Form  frm_ucomm
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->R_UCOMM      text
*      -->RS_SELFIELD  text
*----------------------------------------------------------------------*
FORM frm_ucomm USING r_ucomm LIKE sy-ucomm
                     rs_selfield TYPE slis_selfield.
  DATA: lr_grid TYPE REF TO cl_gui_alv_grid.
  DATA l_flag(1).
  FIELD-SYMBOLS <fs_itab> LIKE wa_itab.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = lr_grid.
  CALL METHOD lr_grid->check_changed_data.
  rs_selfield-refresh = 'X'."这个值可以让alv制动刷新

  CLEAR l_flag.

  CASE:r_ucomm.
    WHEN 'SAVE'.
      DATA gt_update TYPE STANDARD TABLE OF zfi_jh_gys_dj WITH HEADER LINE.
      REFRESH gt_update[].

      LOOP AT t_itab.
        MOVE-CORRESPONDING  t_itab TO gt_update.
        APPEND gt_update.
        CLEAR  t_itab.
      ENDLOOP.

      SORT gt_update BY ww100  datab.
      DATA gt_update_d LIKE zfi_jh_gys_dj OCCURS 0 WITH HEADER LINE.
      LOOP AT it_alv_d.
        CLEAR gt_update.
        READ TABLE gt_update WITH KEY ww100 = it_alv_d-ww100
                                      datab = it_alv_d-datab   BINARY SEARCH.
        IF sy-subrc <> 0."删掉后数据和原数据匹配不到的数据放在另一张表
          CLEAR gt_update_d.
          MOVE-CORRESPONDING it_alv_d TO gt_update_d.
          APPEND gt_update_d.
        ENDIF.
      ENDLOOP.



      LOOP AT gt_update_d. "从配置表删除已经删掉行项目的数据
        DELETE FROM zfi_jh_gys_dj WHERE ww100 = gt_update_d-ww100
                                    AND datab = gt_update_d-datab.
      ENDLOOP.

      MODIFY zfi_jh_gys_dj FROM TABLE gt_update.
      COMMIT WORK .
      MESSAGE '保存成功' TYPE 'S'.
      CLEAR gt_update.

    WHEN 'DELETE'.
      DELETE t_itab WHERE sel = 'X'.
    WHEN OTHERS.
  ENDCASE.






ENDFORM.                    "FRM_UCOMM
*&---------------------------------------------------------------------*
*&      Form  frm_excel
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_excel.
  DATA l_flag(1).
  IF g_fname IS INITIAL.
    MESSAGE s003(msgnr) WITH '请选择要导入的Excel文件' DISPLAY LIKE 'E'.
    STOP.
  ENDIF.
  PERFORM frm_read_from_excel.
  IF it_message[] IS INITIAL.
    PERFORM frm_import_data.
    IF it_message[] IS NOT INITIAL.
      PERFORM show_message.
    ELSE.
      MESSAGE '数据导入成功!' TYPE 'S' DISPLAY LIKE 'S'.
    ENDIF.
  ELSE.
    PERFORM show_error.

  ENDIF.
ENDFORM.                    "frm_excel
*&---------------------------------------------------------------------*
*&      Form  frm_read_from_excel
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_read_from_excel.
  DATA l_value TYPE char100.
  DATA l_flag TYPE char1.
  DATA l_count LIKE sy-subrc.
  DATA l_message TYPE string.

  REFRESH t_xlstmp.
  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename                = g_fname
      i_begin_col             = 1
      i_begin_row             = 2     "从第二行开始读
      i_end_col               = 9
      i_end_row               = 65536
    TABLES
      intern                  = t_xlstmp
    EXCEPTIONS
      inconsistent_parameters = 1
      upload_ole              = 2
      OTHERS                  = 3.
  IF sy-subrc NE 0 .
    MESSAGE s003(msgnr) WITH '读取文件失败,请检查Excel数据文件!'.
    STOP.
  ENDIF.

*由于t_xlstmp-row的长度限制,所以最多只能上传9999行数据(包含标题行)
*控制最多条目不能超过9998
  DATA:l_znumber TYPE i.
  DATA:l_p TYPE p.
  DATA:i TYPE p.
  CLEAR:i.
  LOOP AT t_xlstmp.
    i = i + 1.

  ENDLOOP.


  i = i / 9 ."9为每行的列数

  IF i > 9998.
    MESSAGE i398(00) WITH '上传条目数不能超过9998条!'.
    EXIT.
  ELSE.
    CLEAR:t_xlstmp.
    READ TABLE t_xlstmp WITH KEY row = '9999'.
    IF sy-subrc = 0.
      MESSAGE i398(00) WITH '上传条目数不能超过9998条!'.
      EXIT.
    ENDIF.

  ENDIF.




  CLEAR t_data.
  SORT t_xlstmp BY row col .

  LOOP AT t_xlstmp ASSIGNING <fs_unit>.
    ASSIGN COMPONENT <fs_unit>-col  OF STRUCTURE <fs_unit> TO <fs_value> .
    l_value = <fs_unit>-value .
    CONDENSE l_value.

    CASE <fs_unit>-col.
      WHEN 1.
        t_data-znumb = l_value+0(10).
      WHEN 2.
        PERFORM frm_check_ww100_exists USING '注册号' l_value.
      WHEN 3.
        PERFORM frm_check_datab_exists USING '开始生效日期' l_value.
      WHEN 4.
        PERFORM frm_check_zbzflx_exists USING '飞机保障费类型' l_value.
      WHEN 5.
        PERFORM frm_check_lifnr_exists USING '供应商' l_value.
      WHEN 6.
        PERFORM frm_check_datbi_exists USING '有效截至日期' l_value.
      WHEN 7.
        PERFORM frm_check_zdj_exists USING '单价' l_value.
      WHEN 8.
        PERFORM frm_check_waers_exists USING '货币码' l_value.
      WHEN 9.
        PERFORM frm_check_zsfcny_exists USING '是否以CNY记账' l_value.


    ENDCASE.

    AT END OF row .
*      CLEAR:wa_dj.
*      SELECT SINGLE begda endda FROM zfi_jh_gys_dj
*        INTO CORRESPONDING FIELDS OF wa_dj
*        WHERE bukrs = t_data-bukrs
*        AND zylx = t_data-zylx
*        AND zxhlx = t_data-zxhlx
*        AND spmon = t_data-spmon.
*      IF sy-subrc = 0.
*        CLEAR:g_text.
*        g_text = '年月在系统中已存在数据;'.
*        PERFORM frm_add_error_mes USING t_data-znumb g_text.
*      ENDIF.

      APPEND t_data.
      CLEAR t_data.

    ENDAT.
  ENDLOOP.
ENDFORM.                    "frm_read_from_excel
*&---------------------------------------------------------------------*
*&      Form  frm_add_error_mes
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_PERNR    text
*      -->P_MSG      text
*      -->P_LINES    text
*----------------------------------------------------------------------*
FORM frm_add_error_mes USING p_znumb
                            p_msg
                           .
  g_flag = 'X'.     "设置本行的错误标记

  CLEAR wa_message.
  wa_message-znumb = p_znumb.
  wa_message-message = p_msg.
  APPEND wa_message TO it_message.

ENDFORM.                    "frm_add_error_mes
*&---------------------------------------------------------------------*
*&      Form  frm_check_bukrs_exists
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM frm_check_ww100_exists  USING    p_text
                                         p_value.
  DATA l_text TYPE char100.
  IF p_value+0(8) = ''.
    CONCATENATE p_text '不能为空;' INTO l_text.
    PERFORM frm_add_error_mes USING t_data-znumb l_text.
    EXIT.
  ELSE.
  t_data-ww100 = p_value+0(8).

  ENDIF.

ENDFORM.                    " frm_check_bukrs_exists
*&---------------------------------------------------------------------*
*&      Form  frm_check_spmon_exists
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM frm_check_datab_exists  USING    p_text
                                         p_value.
  DATA l_text TYPE char100.

  IF p_value+0(8) = ''.
    CONCATENATE p_text '不能为空;' INTO l_text.
    PERFORM frm_add_error_mes USING t_data-znumb l_text.
    EXIT.
  ELSE.

  t_data-datab = p_value+0(8).

  ENDIF.

ENDFORM.                    " frm_check_spmon_exists
*&---------------------------------------------------------------------*
*&      Form  frm_check_zylx_exists
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM frm_check_zbzflx_exists  USING    p_text
                                         p_value.
  DATA l_text TYPE char100.
 IF p_value+0(2) = ''.
    CONCATENATE p_text '不能为空;' INTO l_text.
    PERFORM frm_add_error_mes USING t_data-znumb l_text.
    EXIT.
  ELSE.

  t_data-zbzflx = p_value+0(2).

  ENDIF.

ENDFORM.                    " frm_check_zylx_exists
*&---------------------------------------------------------------------*
*&      Form  frm_check_zxhlx_exists
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM frm_check_lifnr_exists  USING    p_text
                                         p_value.
  DATA l_text TYPE char100.
  IF p_value+0(10) = ''.
    CONCATENATE p_text '不能为空;' INTO l_text.
    PERFORM frm_add_error_mes USING t_data-znumb l_text.
    EXIT.
  ELSE.
    t_data-lifnr = p_value+0(10).

  ENDIF.

ENDFORM.                    " frm_check_zxhlx_exists
*&---------------------------------------------------------------------*
*&      Form  frm_check_zdj_exists
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM frm_check_datbi_exists  USING    p_text
                                         p_value.
  DATA l_text TYPE char100.

  IF p_value+0(8) = ''.
    CONCATENATE p_text p_value+0(30) '不能为空;' INTO l_text.
    PERFORM frm_add_error_mes USING t_data-znumb l_text.
    EXIT.
  ELSE.
    t_data-datbi = p_value+0(8).

  ENDIF.

ENDFORM.                    " frm_check_zdj_exists

*&---------------------------------------------------------------------*
*&      Form  frm_check_meins_exists
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM frm_check_zdj_exists  USING    p_text
                                         p_value.
  DATA l_text TYPE char100.
  IF p_value+0(30) CN '0123456789. ' .
    CONCATENATE p_text p_value+0(30) '不是数值字段;' INTO l_text.
    PERFORM frm_add_error_mes USING t_data-znumb l_text.
    EXIT.
  ELSE.
    t_data-zdj = p_value+0(30).

  ENDIF.

ENDFORM.                    " frm_check_meins_exists
*&---------------------------------------------------------------------*
*&      Form  FRM_CHECK_WAERS_EXISTS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0808   text
*      -->P_L_VALUE  text
*----------------------------------------------------------------------*
FORM frm_check_waers_exists  USING    p_text
                                      p_value.
  DATA l_text TYPE char100.

  IF p_value+0(5) = ''.
    CONCATENATE p_text '不能为空;' INTO l_text.
    PERFORM frm_add_error_mes USING t_data-znumb l_text.
    EXIT.
  ELSE.

    t_data-waers = p_value+0(5).

  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_CHECK_ZSFCNY_EXISTS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0815   text
*      -->P_L_VALUE  text
*----------------------------------------------------------------------*
FORM frm_check_zsfcny_exists  USING   p_text
                                       p_value.
  DATA l_text TYPE char100.

  IF p_value+0(1) = ''.
    CONCATENATE p_text '不能为空;' INTO l_text.
    PERFORM frm_add_error_mes USING t_data-znumb l_text.
    EXIT.
  ELSE.

    t_data-zsfcny = p_value+0(1).

  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  show_error
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM show_error .
  MESSAGE s398(00) WITH '数据检查有错误,未导入数据!'.

  REFRESH it_fields.
  macro_fieldcat 'ZNUMB' 'EXCEL表内序号' '15' ''.
  macro_fieldcat 'MESSAGE' '错误内容' '50' ''.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_save                   = 'A'
      i_callback_program       = sy-repid
      i_callback_pf_status_set = 'SET_PF_STATUS'
*     i_callback_user_command  = 'FRM_UCOMM'
      it_fieldcat              = it_fields[]
      is_layout                = gs_layout
    TABLES
      t_outtab                 = it_message
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.



ENDFORM.                    " show_error
*&---------------------------------------------------------------------*
*&      Form  frm_import_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_import_data.
  DATA l_text TYPE char100.
  DATA l_message TYPE string.
  DATA l_count LIKE sy-subrc.

  FREE:t_dj[].
  LOOP AT t_data.

    MOVE-CORRESPONDING t_data TO t_dj.
    APPEND t_dj.
  ENDLOOP.
  IF t_dj[] IS NOT INITIAL.

    MODIFY zfi_jh_gys_dj FROM TABLE t_dj.  "更新数据库
    IF sy-subrc = 0.
      MESSAGE s398(00) WITH '更新成功;'.
    ELSE.
      MESSAGE e398(00) WITH '更新失败;'.
    ENDIF.
  ENDIF.




ENDFORM.                    "frm_import_data
*&---------------------------------------------------------------------*
*&      Form  show_message
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM show_message.
  DATA: ls_layout   TYPE slis_layout_alv,
        l_fieldcat  TYPE slis_fieldcat_alv,
        ls_fieldcat TYPE slis_t_fieldcat_alv,
        l_temp      TYPE string,
        l_str       TYPE string.
  FIELD-SYMBOLS: <fs_msg> LIKE wa_message.


  MESSAGE s398(00) WITH '数据更新有错误,错误如下!(所有均未导入)'.

  REFRESH it_fields.
  macro_fieldcat 'ZNUMB' 'EXCEL表内序号' '15' ''.
  macro_fieldcat 'MESSAGE' '错误内容' '50' '' .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_save                   = 'A'
      i_callback_program       = sy-repid
      i_callback_pf_status_set = 'SET_PF_STATUS'
*     i_callback_user_command  = 'FRM_UCOMM'
      it_fieldcat              = it_fields[]
      is_layout                = gs_layout
    TABLES
      t_outtab                 = it_message
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.


ENDFORM.                    "show_message
**&---------------------------------------------------------------------*
**&      Form  FRM_DOWNLOAD
**&---------------------------------------------------------------------*
**       text
**----------------------------------------------------------------------*
**  -->  p1        text
**  <--  p2        text
**----------------------------------------------------------------------*
*FORM frm_download .
*
*
*  FREE:i_text[].
*  i_text-znumb = '序号'.
*  i_text-bukrs_fx = '公司'.
*  i_text-spmon = '年月'.
*  i_text-zylx = '油类型'.
*  i_text-zdj = '单价'.
*  i_text-meins = '单位'.
*  APPEND i_text.
*
*
*  CALL METHOD cl_gui_frontend_services=>gui_download
*    EXPORTING
*      filename              = p_fname "fullpath "
*      write_field_separator = 't'
*      filetype              = 'ASC'
*      codepage              = '8400'  "GB2312中文章编码
*    CHANGING
*      data_tab              = i_text[].
*  IF sy-subrc = 0.
*    MESSAGE s398(00) WITH '模板已下载到' p_fname.
*  ELSE.
*    MESSAGE i398(00) WITH '模板下载失败'.
*  ENDIF.
*
*ENDFORM.                    " FRM_DOWNLOAD
*&---------------------------------------------------------------------*
*&      Form  FM_DOWNLOAD_TEMPLATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM fm_download_template .

  DATA: l_filename TYPE string,
        l_fullpath TYPE string,
        l_path     TYPE string,
        l_key      TYPE wwwdatatab,
        l_mime     TYPE TABLE OF w3mime.

  l_key-relid = 'MI'.
  l_key-objid = 'ZFX003'.

  CALL FUNCTION 'WWWDATA_IMPORT'
    EXPORTING
      key               = l_key
    TABLES
      mime              = l_mime
    EXCEPTIONS
      wrong_object_type = 1
      import_error      = 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.
  ENDIF.


  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      window_title         = 'Download File'
      default_extension    = '.XLS'
      default_file_name    = '机号及供应商对应的单价上传模板'
      file_filter          = cl_gui_frontend_services=>filetype_excel
    CHANGING
      filename             = l_filename
      path                 = l_path
      fullpath             = l_fullpath
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.


  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 l_fullpath IS INITIAL.
      RETURN.
    ENDIF.


    CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
        filename                = l_fullpath
        filetype                = 'BIN'
*       write_field_separator   = cl_abap_char_utilities=>horizontal_tab
      TABLES
        data_tab                = l_mime
      EXCEPTIONS
        file_write_error        = 1
        no_batch                = 2
        gui_refuse_filetransfer = 3
        invalid_type            = 4
        no_authority            = 5
        unknown_error           = 6
        header_not_allowed      = 7
        separator_not_allowed   = 8
        filesize_not_allowed    = 9
        header_too_long         = 10
        dp_error_create         = 11
        dp_error_send           = 12
        dp_error_write          = 13
        unknown_dp_error        = 14
        access_denied           = 15
        dp_out_of_memory        = 16
        disk_full               = 17
        dp_timeout              = 18
        file_not_found          = 19
        dataprovider_exception  = 20
        control_flush_error     = 21
        OTHERS                  = 22.

    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.


  ENDIF.

ENDFORM.
复制代码

 

posted @   YangMeiko  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示