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
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