报表显示左右2个屏幕界面
REPORT zrfi.
*&---------------------------------------------------------------------*
*& DATA
*&---------------------------------------------------------------------*
TABLES:sscrfields.
DATA:BEGIN OF gs_out_tab.
DATA:
zno TYPE char10,
...
END OF gs_out_tab.
DATA:BEGIN OF gs_out_right.
DATA:
zno TYPE char10,
...
END OF gs_out_right.
DATA:
gt_out_tab LIKE STANDARD TABLE OF gs_out_tab,
gt_out_right LIKE STANDARD TABLE OF gs_out_right,
go_alv1 TYPE REF TO cl_gui_alv_grid,
go_alv2 TYPE REF TO cl_gui_alv_grid,
gs_layout1 TYPE lvc_s_layo,
gs_layout2 TYPE lvc_s_layo,
go_container TYPE REF TO cl_gui_docking_container,
go_splitter TYPE REF TO cl_gui_splitter_container,
g_container1 TYPE REF TO cl_gui_container,
g_container2 TYPE REF TO cl_gui_container,
gs_fieldcat TYPE lvc_s_fcat,
gt_fieldcat1 TYPE lvc_t_fcat,
gt_fieldcat2 TYPE lvc_t_fcat,
ok_code TYPE sy-ucomm.
*----------------------------------------------------------------------*
* DEFINITION
*----------------------------------------------------------------------*
DEFINE alv_append_field.
CLEAR gs_fieldcat.
gs_fieldcat-fieldname = &1. "要显示的字段
gs_fieldcat-coltext = &2. "字段名
gs_fieldcat-just = &3. "对齐方式L左 C居中 R右
gs_fieldcat-no_zero = &4. "前导0
gs_fieldcat-ref_table = &5. "引用表
gs_fieldcat-ref_field = &6. "引用字段
gs_fieldcat-tabname = &7.
CASE &7.
WHEN 'GT_OUT_TAB'.
APPEND gs_fieldcat TO gt_fieldcat1.
WHEN 'GT_OUT_RIGHT'.
APPEND gs_fieldcat TO gt_fieldcat2.
WHEN OTHERS.
ENDCASE.
END-OF-DEFINITION.
*----------------------------------------------------------------------*
* CLASS
*----------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
DATA:
objid TYPE char10.
METHODS constructor IMPORTING
i_objid TYPE char10 OPTIONAL.
"设置工具栏
METHODS:
handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING
e_object
e_interactive.
"工具栏按钮件
METHODS handle_user_command FOR EVENT user_command
OF cl_gui_alv_grid
IMPORTING e_ucomm.
ENDCLASS.
DATA: g_event_receiver TYPE REF TO lcl_event_receiver.
CLASS lcl_event_receiver IMPLEMENTATION.
"构造方法:设定对象编号,实现该class可以监听多个alv且不冲突
METHOD constructor.
objid = i_objid.
ENDMETHOD.
"设置工具栏
METHOD handle_toolbar.
PERFORM handle_toolbar USING e_object e_interactive objid.
ENDMETHOD.
"工具栏按钮件
METHOD handle_user_command .
PERFORM handle_user_command USING e_ucomm.
ENDMETHOD.
ENDCLASS.
*&---------------------------------------------------------------------*
*& SELECTION-SCREEN
*&---------------------------------------------------------------------*
SELECTION-SCREEN: BEGIN OF BLOCK b1.
PARAMETERS: p_bukrs TYPE bukrs." OBLIGATORY.
PARAMETERS: r_1 RADIOBUTTON GROUP rad1 DEFAULT 'X' USER-COMMAND rd,
r_2 RADIOBUTTON GROUP rad1.
SELECTION-SCREEN: END OF BLOCK b1.
*&---------------------------------------------------------------------*
*& F8
*&---------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM frm_get_data.
*&---------------------------------------------------------------------*
*& ALV显示
*&---------------------------------------------------------------------*
END-OF-SELECTION.
CALL SCREEN 8000.
*&---------------------------------------------------------------------*
*& Module STATUS_8000 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_8000 OUTPUT.
SET PF-STATUS 'STANDARD'.
SET TITLEBAR 'STANDARD'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_8000 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_8000 INPUT.
DATA l_code TYPE sy-ucomm.
l_code = ok_code.
CASE l_code.
WHEN '&F03'.
LEAVE TO SCREEN 0.
WHEN '&F15'.
LEAVE PROGRAM.
WHEN OTHERS.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module SET_SCREEN OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE set_screen OUTPUT.
PERFORM frm_create_container1."左屏
PERFORM frm_create_container2."右屏
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_CONTAINER1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_create_container1 .
IF go_container IS INITIAL.
CREATE OBJECT go_container
EXPORTING
repid = sy-repid
dynnr = sy-dynnr
extension = 2050
side = cl_gui_docking_container=>dock_at_top.
CREATE OBJECT go_splitter "定义屏幕上窗口数量
EXPORTING
parent = go_container
rows = 1
columns = 2.
CALL METHOD go_splitter->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = g_container1.
CALL METHOD go_splitter->get_container
EXPORTING
row = 1
column = 2
RECEIVING
container = g_container2.
ENDIF.
IF go_alv1 IS INITIAL.
CREATE OBJECT go_alv1
EXPORTING
i_parent = g_container1.
CALL METHOD go_alv1->set_visible
EXPORTING
visible = 'X'.
PERFORM fm_show_alv1.
ELSE.
PERFORM frm_refresh_alv USING go_alv1 gs_layout1.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_CONTAINER2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_create_container2 .
IF go_container IS INITIAL.
CREATE OBJECT go_container
EXPORTING
repid = sy-repid
dynnr = sy-dynnr
extension = 2050
side = cl_gui_docking_container=>dock_at_top.
CREATE OBJECT go_splitter "定义屏幕上窗口数量
EXPORTING
parent = go_container
rows = 1
columns = 2.
CALL METHOD go_splitter->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = g_container1.
CALL METHOD go_splitter->get_container
EXPORTING
row = 1
column = 2
RECEIVING
container = g_container2.
ENDIF.
IF go_alv2 IS INITIAL.
CREATE OBJECT go_alv2
EXPORTING
i_parent = g_container2.
CALL METHOD go_alv2->set_visible
EXPORTING
visible = 'X'.
PERFORM fm_show_alv2.
ELSE.
PERFORM frm_refresh_alv USING go_alv2 gs_layout2.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FM_SHOW_ALV1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fm_show_alv1 .
DATA:
l_variant TYPE disvariant.
l_variant-report = sy-repid && '001'.
l_variant-handle = 1.
PERFORM frm_build_fieldcat USING 'ALV1'.
PERFORM frm_set_layout USING gs_layout1 'ALV1'.
* 调用ALV
CALL METHOD go_alv1->set_table_for_first_display
EXPORTING
is_layout = gs_layout1
i_save = 'A'
is_variant = l_variant
CHANGING
it_fieldcatalog = gt_fieldcat1
it_outtab = gt_out_tab.
CREATE OBJECT g_event_receiver
EXPORTING
i_objid = 'LEFT'.
"命令
SET HANDLER g_event_receiver->handle_user_command FOR go_alv1.
"工具栏
SET HANDLER g_event_receiver->handle_toolbar FOR go_alv1.
CALL METHOD go_alv1->set_toolbar_interactive.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FM_SHOW_ALV2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fm_show_alv2 .
DATA:
l_variant TYPE disvariant.
l_variant-report = sy-repid && '002'.
l_variant-handle = 1.
PERFORM frm_build_fieldcat USING 'ALV2'.
PERFORM frm_set_layout USING gs_layout2 'ALV2'.
* 调用ALV
CALL METHOD go_alv2->set_table_for_first_display
EXPORTING
is_layout = gs_layout2
i_save = 'A'
is_variant = l_variant
CHANGING
it_fieldcatalog = gt_fieldcat2
it_outtab = gt_out_right.
CREATE OBJECT g_event_receiver
EXPORTING
i_objid = 'RIGHT'.
"命令
SET HANDLER g_event_receiver->handle_user_command FOR go_alv2.
"工具栏
SET HANDLER g_event_receiver->handle_toolbar FOR go_alv2.
CALL METHOD go_alv2->set_toolbar_interactive.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*& 布局字段
*&---------------------------------------------------------------------*
*& --> P_
*&---------------------------------------------------------------------*
FORM frm_build_fieldcat USING p_alv TYPE char4.
IF p_alv = 'ALV1'.
alv_append_field:
'ZNO' '订单号 ' 'L' ' ' ' ' ' ' 'GT_OUT_TAB'.
ELSEIF p_alv = 'ALV2'.
alv_append_field:
'ZNO ' '订单号 ' 'L' ' ' ' ' ' ' 'GT_OUT_RIGHT'.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_LAYOUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> G_LAYOUT1
*& --> P_
*&---------------------------------------------------------------------*
FORM frm_set_layout USING p_gs_layout TYPE lvc_s_layo p_alv TYPE char4.
p_gs_layout-zebra = 'X' .
p_gs_layout-cwidth_opt = 'X'.
p_gs_layout-stylefname = 'STYLE'.
p_gs_layout-info_fname = 'ROWCOLOR'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_REFRESH_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_G_GRID text
* -->P_G_LAYOUT text
*----------------------------------------------------------------------*
FORM frm_refresh_alv USING p_grid TYPE REF TO cl_gui_alv_grid
p_lay TYPE lvc_s_layo.
DATA: ls_stable TYPE lvc_s_stbl.
ls_stable-row = 'X'.
ls_stable-col = 'X'.
CALL METHOD p_grid->set_frontend_layout
EXPORTING
is_layout = p_lay.
CALL METHOD p_grid->refresh_table_display
EXPORTING
is_stable = ls_stable.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form HANDLE_USER_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_UCOMM text
*----------------------------------------------------------------------*
FORM handle_user_command USING p_e_ucomm.
CASE p_e_ucomm.
WHEN 'CHECK'.
PERFORM frm_check.
WHEN 'CREATE'.
PERFORM frm_create_skd.
WHEN OTHERS.
ENDCASE.
* 刷新
PERFORM frm_refresh_alv USING go_alv2 gs_layout2.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form HANDLE_TOOLBAR
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> E_OBJECT
*& --> E_INTERACTIVE
*&---------------------------------------------------------------------*
FORM handle_toolbar USING e_object TYPE REF TO cl_alv_event_toolbar_set
e_interactive TYPE char1
e_objid.
DATA: ls_toolbar TYPE stb_button.
IF e_objid = 'LEFT'.
CLEAR ls_toolbar.
MOVE 'CHECK ' TO ls_toolbar-function.
MOVE '检查 ' TO ls_toolbar-quickinfo.
MOVE '检查 ' TO ls_toolbar-text.
APPEND ls_toolbar TO e_object->mt_toolbar.
ELSEIF e_objid = 'RIGHT'.
CLEAR ls_toolbar.
MOVE 'CREATE ' TO ls_toolbar-function.
MOVE '创建收款单 ' TO ls_toolbar-quickinfo.
MOVE '创建收款单 ' TO ls_toolbar-text.
APPEND ls_toolbar TO e_object->mt_toolbar.
ENDIF.
DELETE e_object->mt_toolbar WHERE function = '&GRAPH'
OR function = '&INFO'
OR function = '&REFRESH'
OR function = '&CHECK'
OR function = '&LOCAL&CUT'
OR function = '&LOCAL©'
OR function = '&LOCAL&PASTE'
OR function = '&LOCAL&UNDO'
OR function = '&LOCAL&APPEND'
OR function = '&LOCAL&INSERT_ROW'
OR function = '&LOCAL&DELETE_ROW'
OR function = '&LOCAL©_ROW'.
CLEAR ls_toolbar.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_get_data .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_check .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_SKD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_create_skd .
ENDFORM.
*8000屏幕
PROCESS BEFORE OUTPUT.
MODULE status_8000.
MODULE set_screen.
PROCESS AFTER INPUT.
MODULE user_command_8000.