ALV版的SM30增删查改导入模板下载

YXFIR749_MAIN

* 主程序逻辑
START-OF-SELECTION.
  PERFORM frm_auth.
  CALL SCREEN 100.


*&---------------------------------------------------------------------*
*& 包含               YXFIR749_FM01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'MAIN100'.
  SET TITLEBAR 'T100'.

**创建输出的ALV
  IF go_alv IS INITIAL.

    CREATE OBJECT go_alv
      EXPORTING
        i_parent = cl_gui_container=>screen0.

    PERFORM frm_register_event."注册ALV事件
    PERFORM prepare_fieldcat.
    PERFORM load_data.

    PERFORM frm_get_layout. "ALV 格式
    PERFORM frm_exclude_fun." 排除ALV的功能按钮
    PERFORM frm_list_alv."显示ALV
  ELSE.
    PERFORM frm_refresh_alv USING go_alv."刷新ALV
  ENDIF.
ENDMODULE.

FORM frm_refresh_alv  USING pr_alv TYPE REF TO cl_gui_alv_grid.
  DATA: ls_stable TYPE   lvc_s_stbl.
*刷新alv
  CHECK pr_alv IS NOT INITIAL.
  ls_stable-row = 'X'.
  ls_stable-col = 'X'.
  CALL METHOD pr_alv->refresh_table_display
    EXPORTING
      is_stable = ls_stable.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.

  DATA: lv_answer TYPE c.

  CASE sy-ucomm.
    WHEN 'BACK' OR 'EXIT' OR 'RW'.
      IF gc_auth EQ 'X' AND ( gt_data[] IS NOT INITIAL OR gt_del[] IS NOT INITIAL ) AND gc_change EQ 'X'.
        CALL FUNCTION 'POPUP_TO_CONFIRM'
          EXPORTING
            titlebar              = '确认弹窗'
            text_question         = '是否保存数据在退出?'
            text_button_1         = '是'
            text_button_2         = '否'
            default_button        = '2'
            display_cancel_button = abap_false
          IMPORTING
            answer                = lv_answer
          EXCEPTIONS
            text_not_found        = 1
            OTHERS                = 2.
        IF lv_answer EQ '1'.
          PERFORM save_data.
        ENDIF.
      ENDIF.
      LEAVE PROGRAM.
    WHEN 'SAVE'.
      PERFORM save_data.
    WHEN 'ENTR'.
      PERFORM char_data.
  ENDCASE.

ENDMODULE.
*&---------------------------------------------------------------------*
*& Form prepare_fieldcat
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM prepare_fieldcat .
  DATA: ls_fieldcat TYPE lvc_s_fcat,
        lv_edit     TYPE char1.


  REFRESH:gt_fieldcat.

  DEFINE add_field.

    ls_fieldcat-fieldname = &1.
    ls_fieldcat-coltext   = &2.
    ls_fieldcat-col_opt   = 'X'.
    ls_fieldcat-ref_field = &3.
    ls_fieldcat-ref_table = &4.
    ls_fieldcat-edit = &5.
*    ls_fieldcat-f4availabl  = &6.
    APPEND ls_fieldcat TO gt_fieldcat.
    CLEAR ls_fieldcat.
  END-OF-DEFINITION.

  IF gc_auth EQ 'X'.
    lv_edit = 'X'.
  ENDIF.

  add_field 'BUKRS'   '公司代码'  'BUKRS'  'T001' lv_edit.
  add_field 'BUTXT'   '公司名称'  'BUTXT' 'YXFI_YJFGB' ' ' .
  add_field 'FIKRS'   '控制范围'  'FIKRS' 'T001' lv_edit.
  add_field 'RCOMP'   '贸易伙伴'  'RCOMP' 'YXFI_YJFGB' ' ' .
  add_field 'YJRY'   '月结人员'  'YJRY' 'YXFI_YJFGB' lv_edit.
  add_field 'YHM'   '用户名 '  'YHM' 'YXFI_YJFGB' lv_edit.
  add_field 'YJRYYX'   '邮箱'  'YJRYYX' 'YXFI_YJFGB' lv_edit.
  add_field 'SSSF'   '所属省公司'  'SSSF' 'YXFI_YJFGB' lv_edit.
  add_field 'SSXT'   '系统'  'SSXT' 'YXFI_YJFGB' lv_edit.
  add_field 'QYLXR'   '企业联系人 '  'QYLXR' 'YXFI_YJFGB' lv_edit.
  add_field 'OPNAM'   '操作人员'  'OPNAM' 'YXFI_YJFGB' ' ' .
  add_field 'YRDAT'   '创建/修改日期'  'YRDAT' 'YXFI_YJFGB' ' '  .
  add_field 'YETIME'   '创建/修改时间'  'YETIME' 'YXFI_YJFGB' ' ' .


ENDFORM.


* 加载数据
FORM load_data.

  SELECT *
    FROM yxfi_yjfgb
    WHERE bukrs IN @s_bukrs
    INTO  CORRESPONDING FIELDS OF TABLE @gt_data.

ENDFORM.

* 添加新行
FORM add_row.

  gc_change = 'X'.
  gs_data-opnam = sy-uname.
  gs_data-yrdat = sy-datum.
  gs_data-yetime = sy-uzeit.
  APPEND gs_data TO gt_data.
  go_alv->refresh_table_display( ).

ENDFORM.

* 删除选中行
FORM delete_row.
  DATA: lt_rows TYPE lvc_t_row.
  gc_change = 'X'.
  go_alv->get_selected_rows( IMPORTING et_index_rows = lt_rows ).
  SORT lt_rows BY index DESCENDING.

  LOOP AT lt_rows INTO DATA(ls_row).
    READ TABLE gt_data INDEX ls_row-index INTO DATA(ls_data).
    IF sy-subrc EQ 0.
      MOVE-CORRESPONDING ls_data TO gs_del.
      APPEND gs_del TO gt_del.
    ENDIF.
    DELETE gt_data INDEX ls_row-index.
  ENDLOOP.

  go_alv->refresh_table_display( ).

ENDFORM.

* 复制行
FORM copy_row.
  DATA: lt_rows TYPE lvc_t_row.
  go_alv->get_selected_rows( IMPORTING et_index_rows = lt_rows ).
  CHECK lt_rows IS NOT INITIAL.
  gc_change = 'X'.

  READ TABLE gt_data INTO gs_data INDEX lt_rows[ 1 ]-index.
  IF sy-subrc = 0.
    gs_data-opnam = sy-uname.
    gs_data-yrdat = sy-datum.
    gs_data-yetime = sy-uzeit.
    APPEND gs_data TO gt_data.
    go_alv->refresh_table_display( ).
  ENDIF.
ENDFORM.

* 保存数据
FORM save_data.


  DATA(lt_data) = gt_data[].
  SORT lt_data BY bukrs.
  DELETE ADJACENT DUPLICATES FROM lt_data COMPARING bukrs.
  DESCRIBE TABLE lt_data LINES DATA(lin1).
  DESCRIBE TABLE gt_data LINES DATA(lin2).
  IF lin1 NE lin2.
    MESSAGE '公司代码是主键不能重复,请检查' TYPE 'S' DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ELSE.


    DATA:lt_yjfgb LIKE TABLE OF yxfi_yjfgb,
         ls_yjfgb LIKE yxfi_yjfgb.
    IF gt_del[] IS NOT INITIAL.
      DELETE yxfi_yjfgb FROM TABLE gt_del.
      IF sy-subrc EQ 0.
        COMMIT WORK.
      ENDIF.
    ENDIF.
    IF gt_data[] IS NOT INITIAL.
      LOOP AT gt_data INTO DATA(ls_data).
        MOVE-CORRESPONDING ls_data TO ls_yjfgb.
        APPEND ls_yjfgb TO lt_yjfgb.
        CLEAR:ls_yjfgb,ls_data.
      ENDLOOP.
      MODIFY yxfi_yjfgb FROM TABLE lt_yjfgb.
      IF sy-subrc = 0.
        CLEAR gc_change.
        MESSAGE s398(00) WITH '数据保存成功'.
      ELSE.
        MESSAGE e398(00) WITH '数据保存失败'.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.

* 导入模板
FORM import_template.

  DATA:lt_intern TYPE TABLE OF zalsmex_tabline,
       l_msg     TYPE string.
  DATA:  p_file TYPE rlgrap-filename.

  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      def_path         = 'D:/temp/'
      mask             = ',Microsoft Office Excel工作薄(*.xlsx),*.XLSX, Microsoft Office Excel工作薄(*.xls),*.XLS, 所有文件(*.*),*.*,'
      title            = 'Select File'(100)
    IMPORTING
      filename         = p_file
    EXCEPTIONS
      inv_winsys       = 1
      no_batch         = 2
      selection_cancel = 3
      selection_error  = 4
      OTHERS           = 5.
  IF sy-subrc <> 0 .

  ENDIF.

  IF p_file IS INITIAL.
    MESSAGE '请选择上传文件' TYPE 'S' DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.


  CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename                = p_file
      i_begin_col             = 1
      i_begin_row             = 2
      i_end_col               = 8
      i_end_row               = 5000
    TABLES
      intern                  = lt_intern
    EXCEPTIONS
      inconsistent_parameters = 1
      upload_ole              = 2
      OTHERS                  = 3.

  IF sy-subrc <> 0.
    MESSAGE 'Excel解析失败!' TYPE 'I' DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.

  IF lt_intern IS INITIAL..
    MESSAGE '导入数据为空,请检查' TYPE 'S' DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.
  SORT lt_intern BY row col.

  LOOP AT lt_intern INTO DATA(ls_initern).
    ASSIGN COMPONENT ls_initern-col OF STRUCTURE gs_data TO FIELD-SYMBOL(<fs_data>).
    IF sy-subrc EQ 0.
      MOVE ls_initern-value TO <fs_data>.
      AT END OF row.
        IF gs_data-bukrs IS NOT INITIAL.
          SELECT SINGLE butxt,rcomp FROM t001 WHERE bukrs EQ @gs_data-bukrs INTO ( @gs_data-butxt, @gs_data-rcomp ).
        ENDIF.
        gs_data-opnam = sy-uname.
        gs_data-yrdat = sy-datum.
        gs_data-yetime = sy-uzeit.
        APPEND gs_data TO gt_data.
        CLEAR: gs_data,<fs_data>.
      ENDAT.
    ENDIF.
  ENDLOOP.
  gc_change = 'X'.
  go_alv->refresh_table_display( ).

ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_register_event
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_register_event .


***注册ALV事件
  CREATE OBJECT go_event_handler .
  SET HANDLER go_event_handler->handle_toolbar FOR go_alv .
  SET HANDLER go_event_handler->handle_user_command FOR go_alv .
  SET HANDLER go_event_handler->handle_onf4_help FOR go_alv .
**  SET HANDLER gr_event_handler->handle_double_click FOR gr_alv .
  SET HANDLER go_event_handler->handle_data_changed FOR go_alv .
**  SET HANDLER gr_event_handler->handle_hotspot_click FOR gr_alv .
**  SET HANDLER gr_event_handler->handle_button_click FOR gr_alv .
  CALL METHOD go_alv->register_edit_event
    EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_modified.  "修改,光标移除

ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_get_layout
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_get_layout .
*定义alv的格式
  CLEAR: gs_layout.
  gs_layout-sel_mode = 'A'.
*  gs_layout-stylefname = 'CELLSTYLE'.
*  gs_layout-info_fname = 'ROWCOLOR'.
*  gs_layout-no_rowmark = 'X'.
  gs_layout-cwidth_opt = 'A'.
  gs_layout-zebra = 'X'.
  gs_layout-box_fname   = 'SEL'.
  gs_variant-report = sy-repid.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_list_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_list_alv .

  CALL METHOD go_alv->set_table_for_first_display
    EXPORTING
      is_variant           = gs_variant
      i_save               = 'A'
      is_layout            = gs_layout
      it_toolbar_excluding = gt_exclude
    CHANGING
      it_outtab            = gt_data[]
      it_fieldcatalog      = gt_fieldcat[].

ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_exclude_fun
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_exclude_fun .

*排除alv的功能按钮
  DATA: lv_exclude TYPE ui_func .

  lv_exclude = cl_gui_alv_grid=>mc_fc_loc_cut.
  APPEND lv_exclude TO gt_exclude.

  lv_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row.
  APPEND lv_exclude TO gt_exclude.

  lv_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row.
  APPEND lv_exclude TO gt_exclude.

  lv_exclude = cl_gui_alv_grid=>mc_fc_loc_paste.
  APPEND lv_exclude TO gt_exclude.

  lv_exclude = cl_gui_alv_grid=>mc_fc_loc_paste_new_row.
  APPEND lv_exclude TO gt_exclude.

  lv_exclude = cl_gui_alv_grid=>mc_fc_loc_copy.
  APPEND lv_exclude TO gt_exclude.

  lv_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row.
  APPEND lv_exclude TO gt_exclude.

  lv_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row.
  APPEND lv_exclude TO gt_exclude.

  lv_exclude = cl_gui_alv_grid=>mc_fc_loc_undo.
  APPEND lv_exclude TO gt_exclude.

  lv_exclude = cl_gui_alv_grid=>mc_fc_refresh.
  APPEND lv_exclude TO gt_exclude.



ENDFORM.
*&---------------------------------------------------------------------*
*& Form export_template
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM export_template .

  DATA: lw_objdata     LIKE wwwdatatab,
        lw_mime        LIKE w3mime,
        pv_objid       TYPE w3objid,
        "w_filename    TYPE string,
        lv_fullpath    TYPE string VALUE 'C:/TEMP/',
        lv_path        TYPE string VALUE 'C:/TEMP/',
        lv_destination LIKE rlgrap-filename,
        lv_objnam      TYPE string,
        lv_rc          LIKE sy-subrc,
        lv_errtxt      TYPE string,
        lv_dest        LIKE sapb-sappfad,
        lv_action      TYPE i.

  DATA: pv_fname TYPE string.

  "SMW0
  pv_objid ='YXFIR749'.
  pv_fname = '批量导入模板'.
  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      window_title         = '下载导入模板'
      default_extension    = 'XLS;XLSX'
      default_file_name    = pv_fname
      file_filter          = 'EXCEL文件|*.XLSX;*.XLS'
    CHANGING
      filename             = pv_fname
      path                 = lv_path
      fullpath             = lv_fullpath
      user_action          = lv_action
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.

  IF sy-subrc = 0 AND lv_action EQ 0.
    lv_dest = lv_fullpath.
    CONDENSE lv_objnam NO-GAPS.

    SELECT SINGLE relid
                  objid
    INTO CORRESPONDING FIELDS OF lw_objdata
    FROM wwwdata
    WHERE srtf2 = 0
      AND relid = 'MI'
      AND objid = pv_objid.
    IF sy-subrc NE 0 OR lw_objdata-objid EQ space.
      CONCATENATE  '模板文件'
                   lv_objnam
                   '不存在'
              INTO lv_errtxt.
      MESSAGE lv_errtxt TYPE 'I'.
    ENDIF.

    lv_destination = lv_dest.
    CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
      EXPORTING
        key         = lw_objdata
        destination = lv_destination
      IMPORTING
        rc          = lv_rc.
    IF lv_rc NE 0.
      CONCATENATE '模板文件:'
                  lv_objnam
                  '下载失败'
             INTO lv_errtxt.
      MESSAGE lv_errtxt TYPE 'E'.
    ENDIF.
  ENDIF.

ENDFORM.


FORM frm_handle_onf4_help   USING   u_fieldname TYPE lvc_fname
                                u_row_no     TYPE lvc_s_roid
                            u_event_data TYPE REF TO cl_alv_event_data.
  CASE u_fieldname.
    WHEN ' '. "F4字段名称
*      PERFORM frm_f4_get_value USING u_fieldname
*                                     u_row_no
*                                     u_event_data.
  ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form data_changed
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> ER_DATA_CHANGED
*&---------------------------------------------------------------------*
FORM data_changed USING p_er_data_changed TYPE REF TO cl_alv_changed_data_protocol.


  “解决 excel复制数据直接拷贝到ALV页面里面,导致内表数据还是旧数据需要更新 begin
  CALL FUNCTION:
               'CONTROL_SETFUNCTIONCODE' EXPORTING fcode = 'ENTR',
               'CONTROL_FLUSH'.
  ********************************************************************end

  p_er_data_changed->refresh_protocol( ).

  LOOP AT p_er_data_changed->mt_mod_cells INTO DATA(ls_cells).
    READ TABLE gt_data ASSIGNING FIELD-SYMBOL(<f_data>)  INDEX ls_cells-row_id.
    IF sy-subrc EQ 0 .
      CASE ls_cells-fieldname.
        WHEN 'BUKRS'.
          IF ls_cells-value IS NOT INITIAL.
            SELECT SINGLE butxt,rcomp FROM t001 WHERE bukrs EQ @ls_cells-value INTO ( @<f_data>-butxt, @<f_data>-rcomp ).
          ELSE.
            CLEAR: <f_data>-butxt,<f_data>-rcomp.
          ENDIF.
      ENDCASE.
    ENDIF.
  ENDLOOP.
*
*** 刷新alv
  PERFORM frm_refresh_alv USING go_alv."刷新ALV






*  IF p_er_data_changed->mt_mod_cells IS NOT INITIAL.

*    FIELD-SYMBOLS: <f_data> LIKE LINE OF gt_data.
*    DATA : ls_modi TYPE lvc_s_modi .
*    DATA: ls_mod_cell TYPE lvc_s_modi.
*    DATA: li_row    TYPE i,
*          lc_value  TYPE c,
*          li_col    TYPE i,
*          ls_row_id TYPE lvc_s_row,
*          ls_col_id TYPE lvc_s_col,
*          ls_row_no TYPE lvc_s_roid.
*
*    CALL METHOD go_alv->get_current_cell
*      IMPORTING
*        e_row     = li_row
*        e_value   = lc_value
*        e_col     = li_col
*        es_row_id = ls_row_id
*        es_col_id = ls_col_id
*        es_row_no = ls_row_no.
*
*    LOOP AT p_er_data_changed->mt_mod_cells INTO ls_mod_cell.
*      CASE ls_mod_cell-fieldname .
*        WHEN 'BUKRS'. " 根据原因分析类型的变化提取对应的描述
*          READ TABLE gt_data ASSIGNING <f_data> INDEX ls_mod_cell-row_id .
*          IF sy-subrc = 0.
*            IF ls_mod_cell-value EQ ''.
*              <f_data>-butxt = ''.
*              <f_data>-rcomp = ''.
*            ELSE.
*              SELECT SINGLE butxt,rcomp FROM t001 WHERE bukrs EQ @ls_mod_cell-value INTO ( @<f_data>-butxt, @<f_data>-rcomp ).
*            ENDIF.
*          ENDIF.
*      ENDCASE.
*    ENDLOOP.
*
*    CALL METHOD go_alv->refresh_table_display
*      EXPORTING
*        i_soft_refresh = 'X'.
*
*   CALL METHOD go_alv->set_current_cell_via_id
*      EXPORTING
*        is_row_id    = ls_row_id
*        is_column_id = ls_col_id
*        is_row_no    = ls_row_no.

*  ENDIF.

ENDFORM. " data_changed
*&---------------------------------------------------------------------*
*& Form frm_auth
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_auth .
  "2只有查看权限 1有新增、删除、修改等权限
  CLEAR gc_auth.
  AUTHORITY-CHECK OBJECT 'YFI_YJFGB'
  ID 'ACTVT' FIELD '01'.
  IF sy-subrc  EQ 0.
    gc_auth = 'X'. "新增、删除、修改等权限
  ENDIF.
  IF sy-uname EQ 'E_MAHAIQIANG'.
    gc_auth = 'X'. "新增、删除、修改等权限
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form char_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM char_data .
  LOOP AT gt_data ASSIGNING FIELD-SYMBOL(<fs_data>).
    IF <fs_data>-bukrs IS NOT INITIAL.
      SELECT SINGLE butxt,rcomp FROM t001 WHERE bukrs EQ @<fs_data>-bukrs INTO ( @<fs_data>-butxt, @<fs_data>-rcomp ).
    ELSE.
      CLEAR:<fs_data>-butxt, <fs_data>-rcomp.
    ENDIF.
    IF <fs_data>-opnam IS INITIAL.
      <fs_data>-opnam = sy-uname.
      <fs_data>-yrdat = sy-datum.
      <fs_data>-yetime = sy-uzeit.
    ENDIF.

  ENDLOOP.
ENDFORM.

源代码如下:

top

*&---------------------------------------------------------------------*
*& 包含               YXFIR749_TOP
*&---------------------------------------------------------------------*


* 数据定义
TABLES: yxfi_yjfgb.

TYPES: BEGIN OF ty_data,
         bukrs  LIKE  yxfi_yjfgb-bukrs,
         fikrs  LIKE  yxfi_yjfgb-fikrs,
         yjry   LIKE  yxfi_yjfgb-yjry,
         yhm    LIKE  yxfi_yjfgb-yhm,
         yjryyx LIKE  yxfi_yjfgb-yjryyx,
         sssf   LIKE  yxfi_yjfgb-sssf,
         ssxt   LIKE  yxfi_yjfgb-ssxt,
         qylxr  LIKE  yxfi_yjfgb-qylxr,
         butxt  LIKE  yxfi_yjfgb-butxt,
         rcomp  LIKE  yxfi_yjfgb-rcomp,
         opnam  LIKE  yxfi_yjfgb-opnam,
         yrdat  LIKE  yxfi_yjfgb-yrdat,
         yetime LIKE  yxfi_yjfgb-yetime,
       END OF ty_data.

DATA: gt_data TYPE TABLE OF ty_data,
      gs_data TYPE ty_data.

DATA: gt_del TYPE TABLE OF yxfi_yjfgb,
      gs_del TYPE yxfi_yjfgb.

* ALV相关对象
DATA: go_container TYPE REF TO cl_gui_custom_container,
      go_alv       TYPE REF TO cl_gui_alv_grid,
      gt_fieldcat  TYPE lvc_t_fcat,
      gs_variant   TYPE disvariant,
      gt_exclude   TYPE ui_functions,
      gs_layout    TYPE lvc_s_layo.

"权限
DATA:gc_auth TYPE char1."2只有查看权限 1有新增、删除、修改等权限
DATA: gc_change TYPE char1.

CLASS lcl_event_handler DEFINITION DEFERRED.


* 事件处理类
CLASS lcl_event_handler DEFINITION.
  PUBLIC SECTION.
    METHODS:
      handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
        IMPORTING e_object e_interactive,
      handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
        IMPORTING e_ucomm,

      handle_data_changed FOR EVENT data_changed OF cl_gui_alv_grid
        IMPORTING er_data_changed,

      handle_onf4_help  FOR EVENT onf4 OF cl_gui_alv_grid
        IMPORTING e_fieldname
                  es_row_no
                  er_event_data.

ENDCLASS.

CLASS lcl_event_handler IMPLEMENTATION.
  METHOD handle_toolbar.
    " 添加自定义按钮
    DATA: ls_button TYPE stb_button.
    IF gc_auth EQ 'X'.
      CLEAR ls_button.
      ls_button-function  = 'ADD'.
      ls_button-icon      = icon_insert_row.
      ls_button-text      = '新增'.
      APPEND ls_button TO e_object->mt_toolbar.

      ls_button-function  = 'DELETE'.
      ls_button-icon      = icon_delete_row.
      ls_button-text      = '删除'.
      APPEND ls_button TO e_object->mt_toolbar.

      ls_button-function  = 'COPY'.
      ls_button-icon      = icon_copy_object.
      ls_button-text      = '拷贝'.
      APPEND ls_button TO e_object->mt_toolbar.

      ls_button-function  = 'IMPORT'.
      ls_button-icon      = icon_import.
      ls_button-text      = '导入'.
      APPEND ls_button TO e_object->mt_toolbar.

      ls_button-function  = 'EXPORT'.
      ls_button-icon      = icon_export.
      ls_button-text      = '模板下载'.
      APPEND ls_button TO e_object->mt_toolbar.
    ENDIF.

  ENDMETHOD.


  METHOD handle_user_command.
    CASE e_ucomm.
      WHEN 'ADD'.
        PERFORM add_row.
      WHEN 'DELETE'.
        PERFORM delete_row.
      WHEN 'COPY'.
        PERFORM copy_row.
      WHEN 'IMPORT'.
        PERFORM import_template.
      WHEN 'EXPORT'.
        PERFORM export_template.
    ENDCASE.

  ENDMETHOD.



  METHOD handle_data_changed.
    PERFORM data_changed USING er_data_changed.
  ENDMETHOD. "handle_data_changed

*搜索帮助
  METHOD handle_onf4_help.

    PERFORM frm_handle_onf4_help USING e_fieldname
                                       es_row_no
                                       er_event_data.
    er_event_data->m_event_handled = abap_true.

  ENDMETHOD.                    "handle_on_f4                 "handle_user_command

ENDCLASS.


DATA: go_event_handler TYPE REF TO lcl_event_handler.



"输入条件

SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE TEXT-001.

  SELECT-OPTIONS:  s_bukrs FOR yxfi_yjfgb-bukrs.

SELECTION-SCREEN END OF BLOCK bk1.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值