SAP 中的 ALV 报表教程 – ABAP 列表查看器

任何报表的常用期望功能是“列对齐”、“排序”、“过滤”、“小计”、“总计”等。要从头开始实现这些功能,需要大量的编码工作。为了避免这种情况,我们可以使用一个名为 ABAP List Viewer (ALV) 的概念。

这些报表中的每一个都提供功能模块,有助于在不费力的情况下生成所需的输出。让我们详细看看它们——

简单报表

这些报表中的重要功能模块是——

  • Reuse_alv_fieldcatalog_merge
  • Reuse_alv_list_display
  • Reuse_alv_events_get
  • Reuse_alv_grid_display
  • Reuse_alv_commentary_write

REUSE_ALV_FIELDCATALOG_MERGE

此功能模块用于填充字段目录,这对于在 ALV 中显示数据至关重要。

如果输出数据来自单个字典表并且选择了所有列,那么我们无需专门创建字段目录。在 REUSE_ALV_LIST_DISPLAY 中将表名作为参数(I_structure_name)提及就足够了。但在其他情况下,我们需要创建它。

注意:字段目录也可以通过将所有必需的详细信息填入内部表来手动填充

重要参数包括

1. 导出

  • I_program_name:报表 ID
  • I_internal_tabname:内部输出表
  • I_inclname:包含或报表名称,其中处理所有动态表单。

2. 更改

  • ct_fieldcat:一个内部表,类型为 SLIS_T_FIELDCAT_ALV,它在类型池 SLIS 中声明。

REUSE_ALV_LIST_DISPLAY

这是打印数据的函数模块。

重要参数是

1. 导出

  • I_callback_program:报表 ID
  • I_bypassing_buffer:‘X’
  • I_buffer_active:‘ ‘
  • I_callback_pf_status_set:例程,用户可以在其中设置自己的 PF 状态或更改现有 PF 状态的功能。
  • I_callback_user_command:例程,在其中处理功能代码。
  • I_structure name:字典表的名称
  • Is_Layout:用于设置报表布局的结构
  • It_fieldcat:包含要打印的所有字段及其属性列表的内部表(此表可由函数自动填充)
  • It_events:包含 ALV 所有可能事件及其相应表单名称列表的内部表。

2. 表

  • a. t_outtab:包含输出数据的内部表

REUSE_ALV_EVENTS_GET

返回列表类型的可能事件表

1. 导入

Et_Events:事件表会返回指定列表类型的所有可能的 CALLBACK 事件(“NAME”列)。要由 Callback 处理的事件,必须填写其“FORM”字段。如果字段已初始化,则忽略该事件。可以通过类型池 SLIS 中的常量读取事件表中的条目、填充“FORM”字段并修改该条目。

2. 导出

I_list_type:0 = 简单列表 REUSE_ALV_LIST_DISPLAY

1 = 分层顺序列表 REUSE_ALV_HIERSEQ_LIST_DISPLAY

2 = 简单块列表 REUSE_ALV_BLOCK_LIST_APPEND

3 = 分层顺序块列表 REUSE_ALV_BLOCK_LIST_HS_APPEND

REUSE_ALV_GRID_DISPLAY

ABAP4.6 版本中的新功能,用于在网格中显示结果,而不是预览。

参数:与 reuse_alv_list_display 相同

注意:网格无法处理大量数据。如果显示的数据量很大,排序、向下滚动等功能会消耗大量资源/时间。没有明确的定义说明数据量为 X 时应使用列表还是网格,但开发人员需要根据经验做出决定。如果不确定,列表是更好的选择。

REUSE_ALV_COMMENTARY_WRITE

此函数用于页首事件,以打印列表的标题和其他注释。

重要参数

  • It_list_commentary:包含 SLIS_T_LISTHEADER 类型标题的内部表。

此内部表有三个字段

  1. Typ:“H” – 标题,“S” – 选择,“A” – 操作
  2. Key:仅当 typ 为“S”时。
  3. Info:要打印的文本

块报表

这看起来像一个简单的报表,但这个报表只有排序和过滤功能。如果您需要显示多个报表,则使用此报表。从技术上讲,如果您有多个包含要显示为单独块的数据的内部表,那么我们就使用 ALV 的块报表。

创建此报表所用的重要功能是

  • REUSE_ALV_BLOCK_LIST_INIT
  • REUSE_ALV_BLOCK_LIST_APPEND
  • REUSE_ALV_BLOCK_LIST_DISPLAY

REUSE_ALV_BLOCK_LIST_INIT

此功能模块用于设置默认 GUI 状态等。参数与 reuse_alv_list_display 或 reuse_alv_grid_display 中使用的参数相似

REUSE_ALV_BLOCK_LIST_APPEND

此功能模块将数据添加到块。

重要参数

1. 导出

  • is_layout:块的布局设置
  • it_fieldcat:字段目录
  • I_tabname:包含所有可能事件的报表中的内部表名

2. 表

  • t_outtab:包含输出数据的内部表。

REUSE_ALV_BLOCK_LIST_DISPLAY

此功能模块显示通过上述函数附加数据的列表。

参数:所有参数都是可选的。

分层报表

分层显示用于显示相关数据。例如销售订单和项目详细信息。在此,销售订单详细信息可以是标题数据,而销售订单中的项目可以是项目数据。

为此使用的功能模块是

REUSE_ALV_HIERSEQ_LIST_DISPLAY

导出

  • I_CALLBACK_PROGRAM
  • I_CALLBACK_PF_STATUS_SET
  • I_CALLBACK_USER_COMMAND
  • IS_LAYOUT
  • It_fieldcat
  • It_events
  • I_tabname_header:程序中包含最高层级输出数据的内部表的名称。
  • I_tabname_item:程序中包含最低层级输出数据的内部表的名称。
  • Is_keyinfo:此结构包含连接两个表的标题和项目表字段名称(共享键)。

  • t_outtab_header:包含输出数据的标题表
  • t_outtab_item:程序中包含最低层级输出数据的内部表的名称。

所有内部表、结构和常量的定义都声明在一个名为 SLIS 的类型池中。可以使用 REUSE_ALV_FIELDCATALOG_MERGE’ 自动填充此内部表。

显示变式

  • 显示变式用于设置 ALV 输出的默认属性,如排序标准、过滤标准、合计和子合计等。
  • 显示变式可以是用户特定的和标准的(标准变式可以由任何用户使用)。
  • 可以保存的显示变式类型由在函数模块 reuse_alv_list_display / reuse_alv_grid_display 中传递的参数 i_save 控制。
  • 您可以在选择屏幕上提供一个选项来选择要使用的显示变式。

与选择/验证显示变式相关的常用函数模块是

  1. Reuse_alv_variant_default_get
  2. Reuse_alv_variant_f4
  3. Reuse_alv_variant_existence

这就是关于ABAP – ALV 编程的所有内容!