zoukankan      html  css  js  c++  java
  • ALV的双击使用

      REPORT  ZTEST_NYJ3.
    TABLES: ekko.
    DATABEGIN OF itab OCCURS 0 ,
            flag ,
            werks LIKE ekpo-werks,
            ebeln LIKE ekko-ebeln,
            lifnr LIKE ekko-lifnr,
            name1 LIKE lfa1-name1,
            telf1 LIKE lfa1-telf1,
            aedat LIKE ekko-aedat,
    *        zzreagree LIKE ekko-zzreagree,
    *        zzredate LIKE ekko-zzredate,
    *        zzrereason LIKE ekko-zzrereason,
    *        zzreperson LIKE ekko-zzreperson,
    *        zzremode   LIKE ekko-zzremode,
    *        zzpostatus LIKE ekko-zzpostatus,
          END OF itab .
    DATA: ok_code LIKE sy-ucomm .
    DATA: l_valid(1TYPE c.
    DATA: go_grid             TYPE REF TO cl_gui_alv_grid,
          go_custom_container TYPE REF TO cl_gui_custom_container.
    DATA: wa_container TYPE scrfname VALUE 'ALVDATA'.
    "屏幕上的控件名称,不用定义也可以自己创建,下有说明

    DATA:TEST LIKE ekko-ebeln.
    DATA: gt_fieldcat TYPE lvc_t_fcat,
          gs_fieldcat TYPE lvc_s_fcat,
          gs_variant  TYPE disvariant ,
          gt_sort     TYPE lvc_t_sort,
          gs_sort     TYPE lvc_s_sort,
          gt_filt     TYPE lvc_t_filt,
          gs_filt     TYPE lvc_s_filt,
          ls_cell     TYPE lvc_s_styl,
          sla         TYPE lvc_s_layo,
          gt_f4       TYPE lvc_t_f4,
          gs_f4       TYPE lvc_s_f4.
    DATA: lt_exclude TYPE ui_functions.
    PARAMETERS p_werks LIKE ekpo-werks OBLIGATORY.
    SELECT-OPTIONS:
                s_ebeln FOR ekko-ebeln ,
                s_lifnr FOR ekko-lifnr,
                s_aedat FOR ekko-aedat ."OBLIGATORY.
    *DATA  cl_gui_alv_grid.
    *---------------------------------------------------------------
    *       CLASS lcl_event_receiver DEFINITION
    *---------------------------------------------------------------
    CLASS lcl_event_receiver DEFINITION."定义事件类包括F4和双击两种事件
      PUBLIC SECTION.
        METHODS handle_f4
          FOR EVENT onf4 OF cl_gui_alv_grid
          IMPORTING e_fieldname
                    es_row_no
                    er_event_data
                    et_bad_cells.
        METHODS catch_doubleclick
          FOR EVENT double_click OF cl_gui_alv_grid
          IMPORTING e_row
                    e_column
                    es_row_no .
    ENDCLASS.                    "lcl_event_receiver DEFINITION
    *---------------------------------------------------------------
    *       CLASS lcl_event_receiver IMPLEMENTATION
    *---------------------------------------------------------------
    CLASS lcl_event_receiver IMPLEMENTATION."事件的执行调用相应的处理过程
      METHOD handle_f4.
        PERFORM f4 USING e_fieldname
                         es_row_no
                         er_event_data
                         et_bad_cells.
      ENDMETHOD.                                                "handle_f4
      METHOD catch_doubleclick."双击
        PERFORM atdoubleclick USING e_row
                                    e_column
                                    es_row_no.
      ENDMETHOD.
    ENDCLASS.                    "lcl_event_receiver IMPLEMENTATION
    DATA: event_receiver TYPE REF TO lcl_event_receiver.
    INITIALIZATION.
    *  gd_repid = sy-repid.
      PERFORM fieldcat_init USING gt_fieldcat[]."初始化标题格式
    START-OF-SELECTION.
      CALL SCREEN '100'.
    *&--------------------------------------------------------------
    *&      Module  USER_COMMAND_0100  INPUT
    *&--------------------------------------------------------------
    MODULE user_command_0100 INPUT.
      CASE ok_code.
        WHEN 'EXIT' OR 'BACK'.
          LEAVE PROGRAM.
        WHEN 'SAVE'.
          PERFORM save.
        WHEN 'ALL'.
          PERFORM all.
        WHEN 'NONE'.
          PERFORM none.
        WHEN 'CHANGE'.
          PERFORM CHANGE.
      ENDCASE.
      CLEAR ok_code .
    ENDMODULE.                 " USER_COMMAND_0100  INPUT
    *&--------------------------------------------------------------
    *&      Form  load_data_into_grid
    *&--------------------------------------------------------------
    FORM load_data_into_grid.
      SELECT  ekko~ebeln
              ekko~lifnr
              ekko~aedat
    *          ekko~zzreagree
    *          ekko~zzredate
    *          ekko~zzrereason
    *          ekko~zzreperson
    *          ekko~zzremode
    *          ekko~zzpostatus
              lfa1~name1
              lfa1~telf1
              ekpo~werks
      FROM ekko INNER JOIN ekpo ON ekko~ebeln = ekpo~ebeln AND
                                   ekpo~ebelp = '00010'
                INNER JOIN lfa1 ON ekko~lifnr = lfa1~lifnr
      INTO CORRESPONDING FIELDS OF TABLE itab
      WHERE ekko~ebeln IN s_ebeln AND
            ekko~lifnr IN s_lifnr AND
            ekko~aedat IN s_aedat AND
            ekpo~werks = p_werks.


      sla-cwidth_opt = 'X'."列的宽度是否自动
      sla-zebra      = 'X'."斑马线显示
    *  sla-no_toolbar = 'X'."不显示工具条
    *  sla-edit = 'X' ."编辑模式
    *  sla-FRONTEND = 'x'.
       SLA-EDIT_MODE = 'X'.
       SLA-SMALLTITLE = ''.
       SLA-GRID_TITLE = 'DDDDDDDDDDDDDDDDDDDD'.
    *   SLA-SGL_CLK_HD = 'X'."当点击列标题的时候可以自动排序
      CALL METHOD go_grid->set_table_for_first_display"调用ALV的显示方法
        EXPORTING
          is_variant                    = gs_variant
          i_save                        = 'A'"显示格式保存按钮
          is_layout                     = sla
    *      IT_TOOLBAR_EXCLUDING          =
        CHANGING
          it_outtab                     = itab[]"数据
          it_fieldcatalog               = gt_fieldcat[]
        EXCEPTIONS
          invalid_parameter_combination = 1
          program_error                 = 2
          too_many_lines                = 3
          OTHERS                        = 4.
      CALL METHOD go_grid->set_ready_for_input "设置为不是只读
        EXPORTING
          i_ready_for_input = 1.
    ENDFORM.                    " load_data_into_grid

    *&--------------------------------------------------------------
    *&      Form  fieldcat_init
    *&--------------------------------------------------------------
    FORM fieldcat_init USING rt_fieldcat TYPE lvc_t_fcat.
      DATA: ls_fieldcat TYPE lvc_s_fcat.
      CLEAR ls_fieldcat.
      ls_fieldcat-fieldname     = 'FLAG'.
      ls_fieldcat-scrtext_l     = 'Flag'.
      ls_fieldcat-checkbox      = 'X'.
      ls_fieldcat-edit          = 'X'.
      ls_fieldcat-key           = 'X'.
      APPEND ls_fieldcat TO  rt_fieldcat .
      CLEAR ls_fieldcat.
      PERFORM frm_catlg_set USING:
      'WERKS'  '' '门店'         '' 'WERKS' 'EKPO' rt_fieldcat,
      'EBELN'  '' 'PO号码'       '' 'EBELN' 'EKKO' rt_fieldcat,
      'AEDAT'  '' 'PO日期'       '' 'AEDAT' 'EKKO' rt_fieldcat,
      'LIFNR'  '' '供应商'       '' 'LIFNR' 'EKKO' rt_fieldcat, "
      'NAME1'  '' '供应商名称'   '' 'NAME1' 'LFA1' rt_fieldcat,
      'TELF1'  '' '供应商电话'   '' 'TELF1' 'LFA1' rt_fieldcat,
      'ZZREAGREE'  '' '是否同意'  'X'  'ZZREAGREE'  'EKKO' rt_fieldcat,
      'ZZREDATE'  '' '日期'   'X'  'ZZREDATE'  'EKKO' rt_fieldcat,
      'ZZREPERSON'  '' '回复人'   'X'  'ZZREPERSON' 'EKKO' rt_fieldcat,
      'ZZREMODE'  '' '退货方式'   'X'  'ZZREMODE' 'EKKO' rt_fieldcat,
      'ZZPOSTATUS'  '' 'PO状态'   'X'  'ZZPOSTATUS' 'EKKO' rt_fieldcat,
      'ZZREREASON'  '' '不同意原因'   ''  'ZZREREASON' 'EKKO' rt_fieldcat.
      gs_f4-fieldname = 'ZZREPERSON'.
      gs_f4-register = 'X'.
      gs_f4-getbefore = 'X'.
      gs_f4-chngeafter = 'X'.
      INSERT gs_f4 INTO TABLE gt_f4.
    ENDFORM.   "fieldcat_init

    *---------------------------------------------------------------
    *       FORM frm_catlg_set                                            *
    *---------------------------------------------------------------
    FORM frm_catlg_set USING p_field p_key p_text p_edit ref_f ref_t
                              rt_fieldcat  TYPE lvc_t_fcat .
      DATA:  tmp_fieldcat TYPE lvc_s_fcat.
      tmp_fieldcat-fieldname     =  p_field.
      tmp_fieldcat-key           =  p_key .
      tmp_fieldcat-scrtext_l     =  p_text.
      tmp_fieldcat-edit          =  p_edit.
      tmp_fieldcat-f4availabl    = 'X'.
      tmp_fieldcat-ref_field     = ref_f.
      tmp_fieldcat-ref_table     = ref_t.
      APPEND tmp_fieldcat TO rt_fieldcat .
      CLEAR tmp_fieldcat .
    ENDFORM.                    " FRM_CATLG_SET
    *&--------------------------------------------------------------
    *&      Form  change
    *&--------------------------------------------------------------
    FORM change .
      IF go_grid->is_ready_for_input( ) = 0.
        CALL METHOD go_grid->set_ready_for_input
          EXPORTING
            i_ready_for_input = 1.
      ELSE.
        CALL METHOD go_grid->check_changed_data  "????????????
          IMPORTING
            e_valid = l_valid.
        CALL METHOD go_grid->set_ready_for_input
          EXPORTING
            i_ready_for_input = 0.
        CALL METHOD go_grid->refresh_table_display.
      ENDIF.
    ENDFORM.                    " change

    *&--------------------------------------------------------------
    *&      Form  f4
    *&--------------------------------------------------------------
    FORM f4 USING r_fieldname TYPE lvc_fname
                  rs_row_no TYPE lvc_s_roid
                  rr_event_data TYPE REF TO cl_alv_event_data
                  rt_bad_cells TYPE lvc_t_modi.
      rr_event_data->m_event_handled = 'X'.
    ENDFORM.                                                    " F4
    *&--------------------------------------------------------------
    *&      Module  STATUS_0100  OUTPUT
    *&--------------------------------------------------------------
    MODULE status_0100 OUTPUT.
      SET PF-STATUS 'MAIN100'.
      gs_variant-report = sy-repid.
      IF go_grid IS INITIAL.
        CREATE OBJECT go_custom_container"按照屏幕上定义的空间名称来创建ALV的容器
          EXPORTING
            container_name = wa_container.

        CREATE OBJECT go_grid"创建ALV
          EXPORTING
            i_parent = go_custom_container .



    *    CREATE OBJECT go_grid"直接在屏幕上创建ALV
    *      EXPORTING
    *        i_parent = cl_gui_container=>screen0.
    *


        CREATE OBJECT event_receiver.
        SET HANDLER event_receiver->handle_f4 FOR go_grid."向ALV创建F4事件
        CALL METHOD go_grid->register_f4_for_fields
          EXPORTING
            it_f4 = gt_f4.
        SET HANDLER event_receiver->catch_doubleclick FOR go_grid."向ALV创建双击事件
        IF sy-batch IS INITIAL.
          CALL METHOD go_grid->register_edit_event
            EXPORTING
              i_event_id = cl_gui_alv_grid=>mc_evt_enter.
        ENDIF.
        PERFORM load_data_into_grid."加载数据
      ENDIF.
    ENDMODULE.                 " STATUS_0100  OUTPUT
    *&--------------------------------------------------------------
    *&      Form  save
    *&--------------------------------------------------------------
    FORM save.
      CALL METHOD go_grid->check_changed_data
            IMPORTING
              e_valid = l_valid.
      IF l_valid = 'X'.
        LOOP AT itab WHERE flag = 'X'.
    *      UPDATE ekko SET
    *                zzreagree = itab-zzreagree
    *                zzredate = itab-zzredate
    *                zzrereason = itab-zzrereason
    *                zzreperson = itab-zzreperson
    *                zzremode   = itab-zzremode
    *                zzpostatus = itab-zzpostatus
    *      WHERE ebeln = itab-ebeln .
          IF sy-subrc NE 0.
            MESSAGE e000(z900) WITH 'Update Error!'.
          ENDIF.
        ENDLOOP.
        IF sy-subrc = 0.
          MESSAGE i000(z900) WITH 'Update Success!'.
        ENDIF.
      ELSE.
        MESSAGE e000(z900) WITH 'Data Error'.
      ENDIF.
    ENDFORM.                    " save
    *&--------------------------------------------------------------
    *&      Form  all
    *&--------------------------------------------------------------
    FORM all.
      LOOP AT itab.
        itab-flag = 'X'.
        MODIFY itab.
      ENDLOOP.
      CALL METHOD go_grid->refresh_table_display.
    ENDFORM.                    " all
    *&--------------------------------------------------------------
    *&      Form  none
    *&--------------------------------------------------------------
    FORM none.
      LOOP AT itab.
        itab-flag = ' '.
        MODIFY itab.
      ENDLOOP.
      CALL METHOD go_grid->refresh_table_display.
    ENDFORM.                    " none
    *&--------------------------------------------------------------
    *&      Form  atdoubleclick
    *&--------------------------------------------------------------
    FORM atdoubleclick USING    p_e_row
                                p_e_column
                                p_es_row_no.
      READ TABLE itab INDEX p_e_row.
      IF p_e_column = 'EBELN'.
        TEST = itab-ebeln."可以传递数据,为什么不能显示

        SET PARAMETER ID 'BES' FIELD itab-ebeln.
        CALL FUNCTION 'ME_DISPLAY_PURCHASE_DOCUMENT'
             EXPORTING
                  i_ebeln = itab-ebeln
                  i_enjoy = 'X'.
      ELSEIF p_e_column = 'LIFNR'.
        CALL FUNCTION 'MMPUR_VENDOR_DISPLAY'
             EXPORTING
                  im_lifnr = itab-lifnr
                  im_ekorg = '1000'.
      ENDIF.
    ENDFORM" atdoubleclick 
  • 相关阅读:
    不要轻易相信ALV
    什么是SAP Note?如何打SAP Note?
    BW作为源系统连接时,激活DSO或其他模型时提示8*数据源不存在,无法激活
    MDX Parser问题导致BO无法连通BW的解决方案
    BW中跳转报表参数传递
    SD、MM转换BI CONTENT激活错
    如何加载经过许可的第三方断字符
    把SQL Server 错误日志导出为EXCEL 并发送到指定的ftp 或者 共享盘
    tsql 调用作业
    SQL Server 2005 维护计划无法保存
  • 原文地址:https://www.cnblogs.com/elegantok/p/1549471.html
Copyright © 2011-2022 走看看