ALV全称为SAP List Viewer,是SAP中常用的报表输出格式,输出结果以行和列展示,集成的功能有排序,求和,过滤,隐藏,筛选等功能
ALV格式的数据是以单元格为单位显示,这种方式便于数据导出来放在电子表格里进行加工
ALV组成分为3大部分
① ALV工具栏(菜单栏)
② ALV标题栏
③ 用于显示数据的ALV网格控制器
如果有必要,用户可以隐藏标题和工具栏
ALV报表开发流程步骤
编写一个ALV程序包括以下基本流程
① 定义类型、变量、常量、内表等
② 定义选择屏幕
③ 获取所需数据存放至Internal Table内表中
④ 定义显示的字段清单以及字段属性(Field Catalogs)
⑤ 设置ALV格式控制显示样式(Layout)
⑥ 调用函数(Function)显示ALV数据
我们可以调用REUSE_ALV_GRID_DISPLAY_LVC函数显示ALV数据,该函数对应的Layout 类型为lvc_s_layo,Fieldcat类型为lvc_s_fcat
ALV实战练习
1.定义变量
2.选择屏幕
设置TEXT-001文本符号内容
3.获取数据
4.设置ALV展示的字段属性
Fieldcat主要用于ALV的结构定义,包括具体的栏位及名称、类型、格式等属性
5.设置输出格式
Layout主要用于设定 ALV的输出格式
6.显示ALV数据
调用REUSE_ALV_GRID_DISPLAY_LVC函数显示ALV
激活并运行程序,效果如下图所示:
查看物料号在100~110范围的数据
上述完整代码如下所示:
REPORT z437_test_2024.TABLES:mara. " 声明与数据表同名的工作区* ALV参数声明
DATA:t_fieldcat TYPE lvc_t_fcat, " 字段目录内表w_fieldcat TYPE lvc_s_fcat, " 字段目录工作区w_layout TYPE lvc_s_layo. " 用于定义ALV表单的相关格式、属性* 自定义数据类型结构
TYPES:BEGIN OF ty_mara,check TYPE c,zline TYPE i, " 当前行数matnr TYPE matnr, " 物料号pstat LIKE mara-pstat, " 维护状态mtart TYPE mtart, " 物料类型mbrsh TYPE mbrsh, " 行业领域matkl TYPE matkl, " 物料组bismt TYPE bismt, " 旧物料号meins TYPE meins, " 基本计量单位brgew TYPE brgew, " 毛重ntgew TYPE ntgew, " 净重maktx TYPE maktx, " 物料描述
END OF ty_mara.* 内表和工作区
DATA: gt_mara TYPE STANDARD TABLE OF ty_mara,gs_mara TYPE ty_mara.* 选择屏幕
SELECTION-SCREEN:BEGIN OF BLOCK bl WITH FRAME TITLE TEXT-001.SELECT-OPTIONS: s_matnr FOR mara-matnr, " 物料编号s_matkl FOR mara-matkl NO-EXTENSION. " 物料组SELECTION-SCREEN SKIP 2.
SELECTION-SCREEN:END OF BLOCK bl.*----------------------------------------------------------------------*
* DESC: START-OF-SELECTION 事件
*----------------------------------------------------------------------*
START-OF-SELECTION.PERFORM frm_get_data. " 子例程 获取数据PERFORM frm_set_fieldcat. " 子例程 设置字段属性PERFORM frm_set_layout. " 子例程 设置ALV样式*----------------------------------------------------------------------*
* DESC: END-OF-SELECTION 事件
*----------------------------------------------------------------------*
END-OF-SELECTION.PERFORM frm_display_alv. " 子例程 显示ALV*&---------------------------------------------------------------------*
*& Form frm_get_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_data ." 获取数据SELECT mara~matnr " 物料号pstat " 维护状态mtart " 物料类型mbrsh " 行业领域matkl " 物料组bismt " 旧物料号meins " 基本计量单位brgew " 毛重ntgew " 净重maktx " 物料描述FROM maraLEFT JOIN maktON mara~matnr = makt~matnrAND makt~spras = '1'INTO CORRESPONDING FIELDS OF TABLE gt_maraWHERE mara~matnr IN s_matnr." 添加行号LOOP AT gt_mara INTO gs_mara.gs_mara-zline = sy-tabix.MODIFY gt_mara FROM gs_mara TRANSPORTING zline.CLEAR gs_mara.ENDLOOP.
ENDFORM.*&---------------------------------------------------------------------*
*& Form frm_set_fieldcat
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_fieldcat ." 定义宏DEFINE edit_fieldcat.w_fieldcat-fieldname = &1. " 设置要输出的表格列的值,在内表中定义的字段名(必须大写)w_fieldcat-scrtext_l = &2. " 设置要输出的表格列的列名,即ALV报表显示的列名APPEND w_fieldcat TO t_fieldcat.CLEAR w_fieldcat.END-OF-DEFINITION.w_fieldcat-fieldname = 'ZLINE'. " 设置要输出的表格列的值w_fieldcat-scrtext_l = '行数'. " 设置要输出的表格列的列名APPEND w_fieldcat TO t_fieldcat.CLEAR w_fieldcat.w_fieldcat-fieldname = 'MATNR'. " 设置要输出的表格列的值w_fieldcat-scrtext_l = '物料号'. " 设置要输出的表格列的列名w_fieldcat-ref_table = 'MARA'. " 指定字段参考的标准表w_fieldcat-ref_field = 'MATNR'. " 指定字段参考的标准表的字段w_fieldcat-emphasize = 'C100'. " 指定列的颜色,C100代表蓝绿色APPEND w_fieldcat TO t_fieldcat.CLEAR w_fieldcat.** 调用宏 &1 &2edit_fieldcat: 'PSTAT' '维护状态','MTART' '物料类型','MBRSH' '行业领域','MATKL' '物料组','BISMT' '旧物料号','MEINS' '基本计量单位','BRGEW' '毛重','NTGEW' '净重','MAKTX' '物料描述'.
ENDFORM.*&---------------------------------------------------------------------*
*& Form frm_set_layout
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_layout ." ALV 界面格式CLEAR w_layout.w_layout-box_fname = 'CHECK'. " 内表用于选择的字段w_layout-sel_mode = 'A'. " 设置选择模式"w_layout-cwidth_opt = 'X'. " 优化列宽设置"w_layout-zebra = 'X'. " 设置斑马线"
ENDFORM.*&---------------------------------------------------------------------*
*& Form frm_display_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_display_alv .CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGis_layout_lvc = w_layout " ALV布局样式it_fieldcat_lvc = t_fieldcat " ALV显示字段TABLESt_outtab = gt_mara " 内表数据EXCEPTIONSprogram_error = 1OTHERS = 2.
ENDFORM.