*&---------------------------------------------------------------------*
*& Report Z_ALV_WITH_PARAMS
*&---------------------------------------------------------------------*
*& 简单的ALV报表,带两个输入参数,点击执行查询并显示
*&---------------------------------------------------------------------*
REPORT z_alv_with_params.
TABLES: sflight. " 引用数据库表,用于字段定义
*------------------ 内表与工作区定义 ------------------------------------
DATA: gt_sflight TYPE TABLE OF sflight, " 存放查询结果
gs_sflight LIKE LINE OF gt_sflight.
*------------------ ALV相关变量 -----------------------------------------
DATA: gs_layout TYPE slis_layout_alv, " 布局结构
gt_fieldcat TYPE slis_t_fieldcat_alv, " 字段目录内表
gs_fieldcat LIKE LINE OF gt_fieldcat.
*------------------ 选择屏幕 --------------------------------------------
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS: p_carrid TYPE sflight-carrid OBLIGATORY, " 航空公司代码(必输)
p_connid TYPE sflight-connid OBLIGATORY. " 航班连接号(必输)
SELECTION-SCREEN END OF BLOCK b1.
*----------------------------------------------------------------------*
* 主处理
*----------------------------------------------------------------------
START-OF-SELECTION.
PERFORM get_data. " 1. 获取数据
PERFORM build_fieldcat. " 2. 构建字段目录
PERFORM set_layout. " 3. 设置布局
PERFORM display_alv. " 4. 显示ALV
*&---------------------------------------------------------------------*
*& 获取数据(根据输入参数从SFLIGHT表查询)
*&---------------------------------------------------------------------*
FORM get_data.
SELECT * FROM sflight
INTO TABLE gt_sflight
WHERE carrid = p_carrid
AND connid = p_connid.
IF sy-subrc <> 0.
MESSAGE '未找到符合条件的航班数据!' TYPE 'I'.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& 构建字段目录(定义要显示的列)
*&---------------------------------------------------------------------*
FORM build_fieldcat.
CLEAR gt_fieldcat.
" 列1:航空公司代码
gs_fieldcat-fieldname = 'CARRID'.
gs_fieldcat-tabname = 'SFLIGHT'.
gs_fieldcat-seltext_m = '航空公司'.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR gs_fieldcat.
" 列2:航班连接号
gs_fieldcat-fieldname = 'CONNID'.
gs_fieldcat-tabname = 'SFLIGHT'.
gs_fieldcat-seltext_m = '航班号'.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR gs_fieldcat.
" 列3:航班日期
gs_fieldcat-fieldname = 'FLDATE'.
gs_fieldcat-tabname = 'SFLIGHT'.
gs_fieldcat-seltext_m = '航班日期'.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR gs_fieldcat.
" 列4:价格
gs_fieldcat-fieldname = 'PRICE'.
gs_fieldcat-tabname = 'SFLIGHT'.
gs_fieldcat-seltext_m = '价格'.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR gs_fieldcat.
" 可根据需要添加更多字段...
ENDFORM.
*&---------------------------------------------------------------------*
*& 设置ALV全局布局
*&---------------------------------------------------------------------*
FORM set_layout.
CLEAR gs_layout.
gs_layout-colwidth_optimize = 'X'. " 优化列宽
gs_layout-zebra = 'X'. " 斑马条纹
gs_layout-detail_popup = 'X'. " 双击行弹出详细信息(依赖系统标准)
ENDFORM.
*&---------------------------------------------------------------------*
*& 调用标准函数显示ALV
*&---------------------------------------------------------------------*
FORM display_alv.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid " 当前程序名
is_layout = gs_layout
it_fieldcat = gt_fieldcat
i_save = 'A' " 允许用户保存布局
TABLES
t_outtab = gt_sflight
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.