ALV 报告 SAP 教程 - ABAP 列表查看器

⚡ 智能摘要

ALV 报告 SAP由 ABAP 列表查看器生成的列表无需自定义代码即可实现列对齐、排序、筛选、总计和小计等功能。本页将介绍简单列表、块列表和层次列表类型、它们的重用功能模块以及显示变体。

  • 📋 核心宗旨: ABAP 列表查看器通过现成的功能模块提供标准列表功能,因此无需再次进行编程。
  • 🗂️ 野外目录: REUSE_ALV_FIELDCATALOG_MERGE 构建描述每个输出列的目录,也可以手动填充。
  • 🖥️ 列表和网格: REUSE_ALV_LIST_DISPLAY 打印经典列表,而 REUSE_ALV_GRID_DISPLAY 在网格控件中显示相同的数据。
  • 🧱 阻塞报告: INIT、APPEND 和 DISPLAY 将多个内部表合并成一个由多个独立块组成的输出。
  • 🌳 层级报告: REUSE_ALV_HIERSEQ_LIST_DISPLAY 通过 IS_KEYINFO 中的共享键将表头表和项目表链接起来。
  • 🧰 类型池 SLIS: 经典 ALV 使用的每个结构、表类型和常量都在类型池 SLIS 中声明。
  • 💾 显示变体: 变体存储排序、筛选和汇总的默认值,I_SAVE 参数决定它是用户特定的还是标准的。

ALV 报告 SAP ABAP

ALV是什么? SAP ABAP?

任何报表通常都需要具备“列对齐”、排序、筛选、小计、总计等功能。如果从零开始实现这些功能,需要投入大量的编码工作。为了避免这种情况,我们可以使用一种称为 ABAP 列表查看器 (ALV) 的概念。

每份报告均提供 功能模块 这有助于毫不费力地产生所需的输出。让我们详细看看它们——

经典的 ALV 提供三种列表类型,每种类型都有自己的一组 REUSE 功能模块:

  • 简报: 一个内部表,以列表或网格形式显示。
  • 拦截报告: 多个内部表格以独立块的形式依次显示。
  • 层级式报告: 一个表头和一个表项通过一个共享键链接。

简单报告

其中重要的功能模块 报告 是 -

  • 重用_alv_fieldcatalog_merge
  • 重用_alv_list_display
  • 重用_alv_events_get
  • 重用_alv_grid_display
  • 重用_alv_commentary_write

重复使用 ALV_FIELDCATALOG_MERGE

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

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

注意:也可以通过将所有必需的详细信息填写到内部表中来手动填写 Fieldcatalog

重要的参数有:

1. 出口:

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

2.改变

  • ct_fieldcat :一个 内表 使用在类型池 SLIS 中声明的类型 SLIS_T_FIELDCAT_ALV。

重复使用 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_事件:返回事件表,其中包含指定列表类型(列“NAME”)的所有可能的 CALLBACK 事件。对于要由回调处理的事件,必须填写其“FORM”字段。如果初始化了该字段,则忽略该事件。可以从事件表中读取条目,填充“FORM”字段并使用类型池 SLIS 中的常量修改条目。

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

重复使用 ALV_GRID_DISPLAY

ABAP4.6 版本中的一项新功能,以网格而不是预览的形式显示结果。

参数:与reuse_alv_list_display相同

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

重用 ALV_注释_写入

这用于页面顶部事件中打印列表的标题和其他注释。

重要参数

  • It_list_commentary:具有 slis_t_listheader 类型标题的内部表。

这个内部表有三个字段:

  1. 类型:'H' – 标题,'S' – 选择,'A' – 操作
  2. 键 :仅当类型为“S”时。
  3. 信息:要打印的文本

示例:一个简单的 ALV 网格报表

以下程序将上述函数模块转换为可运行的报告。它读取航班时刻表 SPFLI,自动构建字段目录,并将结果以网格形式显示。

REPORT z_alv_demo.

TYPE-POOLS: slis.

DATA: lt_spfli    TYPE STANDARD TABLE OF spfli,
      lt_fieldcat TYPE slis_t_fieldcat_alv,
      ls_layout   TYPE slis_layout_alv.

START-OF-SELECTION.

  * 1. Read the data into the output table
  SELECT * FROM spfli INTO TABLE lt_spfli.

  * 2. Build the field catalog from the dictionary structure
  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_program_name     = sy-repid
      i_internal_tabname = 'LT_SPFLI'
      i_structure_name   = 'SPFLI'
    CHANGING
      ct_fieldcat        = lt_fieldcat.

  * 3. Set the layout and display the grid
  ls_layout-zebra             = 'X'.
  ls_layout-colwidth_optimize = 'X'.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program = sy-repid
      is_layout          = ls_layout
      it_fieldcat        = lt_fieldcat
      i_save             = 'A'
    TABLES
      t_outtab           = lt_spfli.

三个参数承担了大部分工作。I_STRUCTURE_NAME 允许从字典中派生字段目录,因此无需手动描述任何列。IS_LAYOUT 启用条纹行和优化列宽。I_SAVE = 'A' 允许从最终列表中保存用户自定义和标准显示变体。

区块报告

这看起来像一个简单的报告,但该报告仅具有排序和过滤功能。如果您必须在输出中显示多个报告,则使用此报告。从技术上讲,如果您有多个内部表,其中的数据要显示为单独的块,那么我们会选择 ALV 的块报告。

用于创建此报告的重要功能是:

  • 重用 ALV 块列表初始化
  • 重用 ALV_BLOCK_LIST_APPEND
  • 重复使用 ALV 块列表显示

重用 ALV 块列表初始化

该功能模块用于设置默认的gui状态等,参数与reuse_alv_list_display或reuse_alv_grid_display中使用的参数类似

重用 ALV_BLOCK_LIST_APPEND

该功能模块将数据添加到块中。

重要参数

1.出口:

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

2.表格:

  • t_outtab:带有输出数据的内部表。

重复使用 ALV 块列表显示

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

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

分层报告

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

用于此的功能模块是

重复使用 ALV_HIERSEQ_LIST_DISPLAY

出口:

  • 回调程序
  • 回调函数 PF 状态设置
  • 回调用户命令
  • 布局
  • 它_fieldcat
  • 事件
  • 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. 重用_alv_variant_default_get
  2. 重用_alv_variant_f4
  3. 重用_alv_variant_existence

💡提示: 传递 I_SAVE = 'U' 表示仅允许用户自定义变体,'X' 表示仅支持标准变体,'A' 表示同时支持两者。空值将完全阻止保存。

这就是全部 ABAP – ALV 编程!

常见问题

REUSE 模块属于经典的、基于函数的 ALV。CL_GUI_ALV_GRID 是一个面向对象的控件,它嵌入在屏幕的自定义容器中,并通过方法提供可编辑单元格和事件处理功能。

在字段目录中为要添加的列设置 DO_SUM 属性,并传递一个已启用 SUBTOT 功能的排序表,该功能用于对行进行分组。无需额外的计算代码。

将窗体名称传递给 I_CALLBACK_USER_COMMAND 函数。该窗体接收函数代码和选定的行,以便程序可以读取记录并打开明细列表或事务。

是的。ABAP 开发工具中的 AI 助手会根据所需列的描述生成 SELECT 语句、字段目录以及 REUSE_ALV_GRID_DISPLAY 函数调用。生成的 SELECT 语句仍然需要进行性能检查。

不,ALV 仍然是标准输出。 SAP 图形用户界面报告。人工智能助手在此基础上增添了价值,它可以总结冗长的列表、识别异常值,并用通俗易懂的语言回答有关所显示数据的问题。

总结一下这篇文章: