前言:设置带有抬头子屏幕作为筛选条件的ALV报表程序。
1.效果图
2.实现步骤:
2.1 重点一:定义选择屏幕0101作为子屏幕
***********************************************************************
**-----------------S E L E C T I O N---S C R E E N-------------------**
***********************************************************************
SELECTION-SCREEN BEGIN OF SCREEN 0101 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK 10 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS : S_CARRID FOR SPFLI-CARRID,
S_CONNID FOR SPFLI-CONNID.
SELECTION-SCREEN END OF BLOCK 10.
SELECTION-SCREEN END OF SCREEN 0101.
2.2 重点二: 定义逻辑流
PROCESS BEFORE OUTPUT.
CALL SUBSCREEN: SUB01 INCLUDING SY-REPID '0101'. "调用子屏幕"
MODULE STATUS_1001.
PROCESS AFTER INPUT.
CALL SUBSCREEN: SUB01. "调用子屏幕"
MODULE USER_COMMAND_1001.
2.3 重点三:勾画子屏幕
3.源代码:
*&---------------------------------------------------------------------*
*& Report ZDEMO_DIALOG_01
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZDEMO_DIALOG_01.
***********************************************************************
**----------------------------T Y P E S------------------------------**
***********************************************************************
***********************************************************************
**---------------------------T A B L E S-----------------------------**
***********************************************************************
TABLES : SPFLI.
***********************************************************************
**------------------------V A R I A B L E S--------------------------**
***********************************************************************
DATA :GT_DATA LIKE STANDARD TABLE OF SPFLI WITH HEADER LINE.
DATA :GS_LAYOUT TYPE LVC_S_LAYO, "布局
GT_FIELDCAT TYPE LVC_T_FCAT, "定义GT_FIELDCAT对象
GR_GRID TYPE REF TO CL_GUI_ALV_GRID, "定义ALV控件名
GR_DOCK_CONTAINER TYPE REF TO CL_GUI_DOCKING_CONTAINER.
DATA:OK_CODE TYPE SY-UCOMM.
***********************************************************************
**-----------------S E L E C T I O N---S C R E E N-------------------**
***********************************************************************
SELECTION-SCREEN BEGIN OF SCREEN 0101 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK 10 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS : S_CARRID FOR SPFLI-CARRID,
S_CONNID FOR SPFLI-CONNID.
SELECTION-SCREEN END OF BLOCK 10.
SELECTION-SCREEN END OF SCREEN 0101.
***********************************************************************
**-------------------I N I T I A L I Z A T I O N---------------------**
***********************************************************************
***********************************************************************
**-----------------S T A R T-O F-S E L E C T I O N-------------------**
***********************************************************************
START-OF-SELECTION.
CALL SCREEN '1001'.
***********************************************************************
**------------------E N D-O F-S E L E C T I O N----------------------**
***********************************************************************
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& 获取数据
*&---------------------------------------------------------------------*
FORM FRM_GET_DATA .
SELECT * FROM SPFLI
INTO CORRESPONDING FIELDS OF TABLE GT_DATA
WHERE CARRID IN S_CARRID
AND CONNID IN S_CONNID.
IF GR_DOCK_CONTAINER IS INITIAL . "检查是否创建容器对象
PERFORM DISPLAY_ALV.
ELSE.
CALL METHOD GR_GRID->REFRESH_TABLE_DISPLAY.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DISPLAY_ALV
*&---------------------------------------------------------------------*
*& 展示数据
*&---------------------------------------------------------------------*
FORM DISPLAY_ALV.
PERFORM FRM_SET_LAYOUT.
PERFORM FRM_SET_FIELDCAT.
PERFORM FRM_SET_ALV.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_layout
*&---------------------------------------------------------------------*
*& 设置ALV布局
*&---------------------------------------------------------------------*
FORM FRM_SET_LAYOUT .
* 设置布局
CLEAR GS_LAYOUT.
GS_LAYOUT-ZEBRA = 'X'. "斑马线
GS_LAYOUT-CWIDTH_OPT = 'X'. "自动调整列宽
* GS_LAYOUT-BOX_FNAME = 'SEL'. "选择列
GS_LAYOUT-SEL_MODE = 'D'. "OOALV中,设置左边选择列
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_fieldcat
*&---------------------------------------------------------------------*
*& 设置字段目录
*&---------------------------------------------------------------------*
FORM FRM_SET_FIELDCAT .
* 设置字段目录
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
* I_BUFFER_ACTIVE =
I_STRUCTURE_NAME = 'SPFLI' "结构名称"
I_CLIENT_NEVER_DISPLAY = 'X'
* I_BYPASSING_BUFFER =
* I_INTERNAL_TABNAME =
CHANGING
CT_FIELDCAT = GT_FIELDCAT. "ALV字段目录内表"
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_ALV
*&---------------------------------------------------------------------*
*& 设置ALV数据
*&---------------------------------------------------------------------*
FORM FRM_SET_ALV .
* 设置容器
CREATE OBJECT GR_DOCK_CONTAINER "创建容器对象
EXPORTING
SIDE = CL_GUI_DOCKING_CONTAINER=>DOCK_AT_BOTTOM
REPID = SY-REPID
DYNNR = SY-DYNNR
EXTENSION = 365.
CREATE OBJECT GR_GRID "创建ALV Grid实例对象
EXPORTING
I_PARENT = GR_DOCK_CONTAINER.
CALL METHOD GR_GRID->SET_TABLE_FOR_FIRST_DISPLAY "展示数据"
EXPORTING
I_SAVE = 'A'
I_DEFAULT = 'X'
* I_STRUCTURE_NAME = 'SPFLI'
IS_LAYOUT = GS_LAYOUT
CHANGING
IT_OUTTAB = GT_DATA[]
IT_FIELDCATALOG = GT_FIELDCAT.
ENDFORM.
*&---------------------------------------------------------------------*
*& Module STATUS_1001 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_1001 OUTPUT.
SET PF-STATUS 'STANDARD'.
* SET TITLEBAR 'xxx'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_1001 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_1001 INPUT.
CASE OK_CODE.
WHEN 'EXIT'.
LEAVE TO SCREEN 0.
WHEN 'BACK' OR 'CANCEL'.
LEAVE PROGRAM.
WHEN 'EXECU'.
PERFORM FRM_GET_DATA.
WHEN OTHERS.
ENDCASE.
ENDMODULE.