首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

ALV依据显示列动态修改行汇总列数据

2012-11-07 
ALV根据显示列动态修改行汇总列数据REPORTzjianzh.TYPE-POOLS: slis.DATA:layout TYPEslis_layout_alv,wa_

ALV根据显示列动态修改行汇总列数据
REPORT  zjianzh.
TYPE-POOLS: slis.
DATA:
    layout TYPE  slis_layout_alv,
     wa_fieldcat TYPE slis_fieldcat_alv,
     git_events TYPE slis_t_event,   "ALV 事件
     it_fieldcat TYPE slis_t_fieldcat_alv,
     stbl TYPE lvc_s_stbl,
     ls_variant TYPE disvariant.

DATA:BEGIN OF wa,
     col1 TYPE i,
     col2 TYPE i,
     col3 TYPE i,
     col4 TYPE i,
     col5 TYPE i,
     col6 TYPE i,
END OF wa .
DATA:itab LIKE wa OCCURS 0.
FIELD-SYMBOLS: <dynwa> TYPE ANY,            "Dynamic work area
              <field> TYPE ANY.           "

CLASS lcl_event_receiver DEFINITION DEFERRED.
DATA tem_grid TYPE REF TO cl_gui_alv_grid.
*----------------------------------*
*       CLASS lcl_event_handler DEFINITION
*----------------------------------*
*
*----------------------------------*
CLASS lcl_event_receiver DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS:

    handle_after_user_command
FOR EVENT after_user_command OF cl_gui_alv_grid
IMPORTING e_ucomm.
  PRIVATE SECTION.
ENDCLASS.                    "
*----------------------------------*
*       CLASS lcl_event_handler IMPLEMENTATION
*----------------------------------*
*
*----------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
  METHOD  handle_after_user_command.
    DATA ls_fcat TYPE lvc_s_fcat .
    DATA lt_fcat TYPE lvc_t_fcat .
    CALL METHOD tem_grid->get_frontend_fieldcatalog
      IMPORTING
        et_fieldcatalog = lt_fcat[].

    DATA:tmp TYPE i.
    LOOP AT itab ASSIGNING <dynwa>.
      CLEAR tmp.
      LOOP AT lt_fcat INTO ls_fcat WHERE fieldname NE 'COL6' AND no_out NE 'X'.
        ASSIGN COMPONENT ls_fcat-fieldname OF STRUCTURE <dynwa> TO <field>.
        tmp = tmp + <field>.
      ENDLOOP.
      ASSIGN COMPONENT 'COL6' OF STRUCTURE <dynwa> TO <field>.
      <field> = tmp.
      MODIFY itab FROM <dynwa>.
    ENDLOOP.

    stbl-row = 'X'." 基于行的稳定刷新
    stbl-col = 'X'." 基于列稳定刷新
    CALL METHOD tem_grid->refresh_table_display
      EXPORTING
        is_stable = stbl.
  ENDMETHOD.                    "handle_before_user_command
ENDCLASS.                    "lcl_event_handler IMPLEMENTATION
DATA gt_event_receiver TYPE REF TO lcl_event_receiver .

START-OF-SELECTION.
  wa-col1 = '1'.
  wa-col2 = '2'.
  wa-col3 = '3'.
  wa-col4 = '4'.
  wa-col5 = '5'.
  wa-col6 = '15'.
  APPEND wa TO itab.

  wa-col1 = '10'.
  wa-col2 = '20'.
  wa-col3 = '30'.
  wa-col4 = '40'.
  wa-col5 = '51'.
  wa-col6 = '151'.
  APPEND wa TO itab.

END-OF-SELECTION.
  PERFORM write_data.
*&---------------------------------*
*&      Form  FIELDCAT_INT
*&---------------------------------*
*       text
*----------------------------------*
*      -->P_0069   text
*      -->P_0070   text
*      -->P_0071   text
*      -->P_0072   text
*      -->P_0073   text
*      -->P_0074   text
*----------------------------------*
FORM fieldcat_int  USING  field1    "字段名
                            field2    "列抬头文本
                            field3                          "不显示0
                            field4
                            field5  "可编辑
                            field6.  "复选框
  CLEAR wa_fieldcat.
  wa_fieldcat-fieldname = field1.
  wa_fieldcat-seltext_l = field2.
  wa_fieldcat-no_zero = field3.
  wa_fieldcat-edit = field5.
  wa_fieldcat-checkbox = field6.

  APPEND wa_fieldcat TO it_fieldcat.

ENDFORM.                    " FIELDCAT_INT
*&---------------------------------*
*&      Form  write_data
*&---------------------------------*
*       text
*----------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------*
FORM write_data .
  layout-zebra = 'X'.
  layout-colwidth_optimize = 'X'.
*******设置ALV显示列
  CLEAR:wa_fieldcat,it_fieldcat[].

  PERFORM fieldcat_int USING 'COL1' '列1'   ''   ''  ''  ''.
  PERFORM fieldcat_int USING 'COL2' '列2'   ''   ''  ''  ''.
  PERFORM fieldcat_int USING 'COL3' '列3'   ''   ''  ''  ''.
  PERFORM fieldcat_int USING 'COL4' '列4'   ''   ''  ''  ''.
  PERFORM fieldcat_int USING 'COL5' '列5'   ''   ''  ''  ''.
  PERFORM fieldcat_int USING 'COL6' '汇总'   ''   ''  ''  ''.


  DATA l_events TYPE LINE OF slis_t_event.
  CLEAR l_events.
  l_events-name = 'CALLER_EXIT'.
  l_events-form = 'FM_BUTTON'.
  APPEND l_events TO git_events.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
     EXPORTING
       i_callback_program = sy-repid
       it_fieldcat        = it_fieldcat
       is_layout          = layout
       i_save             = 'A'
      it_events                = git_events
     TABLES
       t_outtab           = itab
     EXCEPTIONS
       program_error      = 1
       OTHERS             = 2.
  IF sy-subrc <> 0.
  ENDIF.

ENDFORM.                    " write_data
*&---------------------------------*
*&      Form  fm_button
*&---------------------------------*
*       text
*----------------------------------*
*      -->E_GRID     text
*----------------------------------*
FORM fm_button USING e_grid TYPE slis_data_caller_exit.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = tem_grid.

  CREATE OBJECT gt_event_receiver.
  SET HANDLER gt_event_receiver->handle_after_user_command FOR tem_grid.
ENDFORM.                    "FM_BUTTON

热点排行