SAP ABAP报告编程

⚡ 智能摘要

ABAP 报表编程构建可执行程序,用于选择、处理和显示大量数据。 SAP 数据。本页介绍了报表标题添加、选择屏幕、事件序列、格式设置命令、交互式列表和逻辑数据库。

  • 📊 核心宗旨: 报表程序从多个表中读取数据,对其进行处理,并将其呈现为一个列表,该列表可以进行格式化、下载或邮寄。
  • 🧾 计划类型: 每个报告都是 1 类可执行程序,与应用程序区域绑定,并完全由事件驱动。
  • 🏁 标题新增内容: 没有标准页面标题, LINE-尺寸, LINE-COUNT 和 MESSAGE-ID 应位于第一个 REPORT 语句中。
  • ⌨️ 选择界面: PARAMETERS 接受单个值,而 SELECT-OPTIONS 接受值范围或值集。
  • ⏱️ 事件顺序: LOAD-OF-PROGRAM、INITIALIZATION、AT SELECTION-SCREEN、START-OF-SELECTION 和 END-OF-SELECTION 按固定顺序运行。
  • 🖱️ 交互式列表: HIDE 存储所选行的字段值,HOTSPOT 将列表字段转换为辅助列表中的可点击元素。
  • 🗄️ 逻辑数据库: 这些在 SE36 中创建的产品,用 GET 事件替换了 SELECT 语句,并添加了集中式授权检查。

SAP ABAP报告编程

什么是ABAP报表编程?

SAPABAP 支持两种类型的程序——报表程序和对话程序。报表程序用于显示大量数据。

报告程序的目的/用途

  • 当需要从多个表中选择和处理数据后再进行展示时,就会用到它们。
  • 用于报告需要特殊格式的情况
  • 当报告需要从以下位置下载时使用 SAP 到 Excel 表中进行分发。
  • 当报告需要邮寄给特定的人时使用。

报告程序注意事项

  • 报告程序始终是可执行程序。程序类型始终为 1。
  • 每个报告程序对应一种特定的应用类型,即销售和分销、FI - CO 等。它也可以是跨应用,即类型“*”。
  • 报表编程是一种事件驱动的编程。
  • 报告程序的第一行始终是报告
  • 要隐藏列表标题或程序名称,请添加 没有标准页标题 用来。
  • 可以使用以下附加功能设置特定报告的行大小 行大小。
  • 可以使用以下方法设置特定页面的行数 行数 n(n1)。N 为页面的行数,N1 为保留给页脚的行数。
  • 为了显示任何信息或错误消息,我们使用以下附加功能向程序添加一个消息类: 消息 ID 。 消息类别在 SE91 中维护。

因此,理想的报告程序应该从以下内容开始:

Report <report name> no standard page heading

line-size <size>

line-count <n(n1)>

message-id <message class>.

报告程序与对话程序

这两种程序类型虽然运行在同一系统中,但却解决着截然相反的问题。报表程序读取并显示数据,而对话框程序则允许用户通过屏幕进行操作。

标准 报告程序 对话程序
节目类型 类型 1,可执行文件 M 型,模块池
发起者 程序名称或交易代码 仅交易代码
流量控制 诸如初始化和选择开始之类的事件 使用 PBO 和 PAI 模块的屏幕流程逻辑
用户输入 生成的选择屏幕 屏幕设计 Painter
典型用途 显示和下载大量数据 创建和更改业务数据

选择屏幕是报表收集输入信息的地方,因此接下来将对其进行描述。

选择画面

“选择屏幕”是指指定程序运行所需输入值的屏幕。

选择屏幕通常由

  1. 参数
  2. 选择选项

句法

Selection-screen begin of screen <screen #>
selection-screen begin of block <#>  with frame title <text>
.........
.........
selection-screen end of block <#>
selection-screen end of screen <screen #>

参数

参数可帮助进行动态选择。它们在程序的一个执行周期内只能容纳一个值。

句法

将参数定义为数据类型

Parameters p_id(30) type c.

定义像表字段一样的参数。

Parameter p_id like <table name>-<field name>.

参数可以是复选框也可以是单选按钮。

Parameters p_id as checkbox.Parameters p_id1 radiobutton group <group name>.
Parameters p_id2  radiobutton group <group name>.

参数可以是列表框。

Parameter p_id like <table name>-<field name> as listbox

选择选项

选择选项用于向程序输入一系列值或一组值

句法

select-options s_vbeln for vbak-vbeln.

选择画面

屏幕截图显示了选择选项生成的低位和高位输入字段,以及多选按钮。

您还可以定义一个选择选项,就像变量一样

select-options s_vbeln for vbak-vbeln no intervals no-extension

输入数据收集完毕后,程序会按照固定的事件序列做出反应。

ABAP 报告程序中的事件

ABAP 报告程序是 事件驱动程序报告程序中的不同事件包括:

程序加载

  • 加载类型 1、M、F 或 S 的程序后,在内部会话中触发相关事件。
  • 还为每个程序和内部会话仅运行一次相关的处理块。
  • 处理块 LOAD-OF-PROGRAM 的功能与 ABAP 程序 类型 1、M、F 或 S 作为 ABAP 对象中的类的构造函数

初始化。

  • 此事件在显示选择屏幕之前执行。
  • 所有值的初始化。
  • 您可以分配与选择屏幕上的默认值不同的值。
  • 您可以在运行时用一些值填充您的选择屏幕。

在选择屏幕上。

  • 当选择屏幕处理完毕后(在 PAI 结束时),将处理该事件。
  • 输入值的验证和检查在这里进行

选择开始。

  • 这里程序开始从表中选择值。

选择结束。

  • 选择所有数据后,此事件会将数据写入屏幕。

互动活动

  • 用于交互式报告。它用于从基本列表创建详细列表。

💡提示: 默认情况下,未编写任何事件关键字的语句属于 START-OF-SELECTION,这就是为什么即使缺少事件,报表仍然会运行的原因。

示例:一个简单的 ABAP 报表程序

以下程序将新增内容、选择屏幕和事件合并到一个工作报告中。它从 VBAK 读取选择屏幕上输入的编号对应的销售订单抬头,并将其写入列表。

REPORT z_sales_order_list NO STANDARD PAGE HEADING
                          LINE-SIZE 80
                          LINE-COUNT 65(3)
                          MESSAGE-ID zsd.

TABLES: vbak.

DATA: lt_vbak TYPE STANDARD TABLE OF vbak,
      ls_vbak TYPE vbak.

* Selection screen
SELECT-OPTIONS: s_vbeln FOR vbak-vbeln.
PARAMETERS: p_erdat LIKE vbak-erdat.

INITIALIZATION.
  p_erdat = sy-datum.

AT SELECTION-SCREEN.
  IF p_erdat > sy-datum.
    MESSAGE e001(zsd).          " Date must not lie in the future
  ENDIF.

START-OF-SELECTION.
  SELECT * FROM vbak
    INTO TABLE lt_vbak
    WHERE vbeln IN s_vbeln
      AND erdat LE p_erdat.

END-OF-SELECTION.
  LOOP AT lt_vbak INTO ls_vbak.
    WRITE: / ls_vbak-vbeln, ls_vbak-erdat, ls_vbak-netwr.
    HIDE ls_vbak-vbeln.
  ENDLOOP.

有三点值得注意。INITIALIZATION 函数会在选择屏幕出现之前填充日期参数。AT SELECTION-SCREEN 函数会验证输入内容,并从 ZSD 类发出消息。HIDE 函数会存储每行写入内容的顺序号,以便双击后可以从中构建一个辅助列表,这正是下一节的主题。

格式化报告

ABAP 允许按照用户需要格式化报告。例如,“替代行”必须以不同的颜色显示,“总计”行应显示为黄色。

句法

Format Color n

Format Color n Intensified On

n 可能对应各种数字

请注意,除了格式之外,还有其他补充

FORMAT COLOR OFF INTENSIFIED OFF INVERSE OFF HOTSPOT OFF INPUT OFF

交互式报表编程

  • 利用交互式编程,用户可以主动控制数据的检索和显示。
  • 用于从基本列表创建详细列表
  • 详细数据写在二级清单上。
  • 二级列表可以完全覆盖第一个屏幕,也可以在新屏幕中显示
  • 次要列表本身可以是交互的。
  • 第一个列表也可能调用交易。
  • 有不同的事件与交互式编程相关。

交互式编程用到的一些命令

热点

如果将鼠标拖到报告中显示的数据上,光标会变成伸出食指的手的形状。可以使用 FORMAT 语句实现热点。

Syntax:      Format Hotspot On (Off).

隐藏

此命令可帮助您存储字段名称,根据该名称将进行进一步处理以获取详细列表。它直接写在字段的 WRITE 语句之后。选择一行时,值会自动填充到变量中以供进一步使用。

Syntax:     Hide <field-name>.

读取多个表的报表可以用逻辑数据库替换其 SELECT 语句,如下所述。

逻辑数据库

  • 您可以使用逻辑数据库来检索程序的数据,而不必使用“选择”查询。
  • 逻辑数据库由事务创建 SE36
  • 逻辑数据库的名称最多可包含 20 个字符。它可以以命名空间前缀开头。
  • 数据由另一个程序选择,可以使用 GET 访问数据将数据放入工作区的命令。

逻辑数据库相对于普通选择查询的优势。

  1. 它提供检查条件来查看输入是否正确、完整和合理
  2. 它包含数据库访问的中央授权检查
  3. 性能改进等增强功能立即应用于所有使用逻辑数据库的报告。

注意:由于涉及的复杂性,大多数情况下不使用逻辑数据库

常见问题

PARAMETERS 创建一个包含单个值的输入字段。SELECT-OPTIONS 创建一个包含 SIGN、OPTION、LOW 和 HIGH 字段的内部表,因此它接受范围、排除项和多项选择。

AT LINE-SELECTION 响应双击或 F2 键,而 AT USER-COMMAND 响应菜单中的功能代码。两者都根据 HIDE 存储的值构建辅助列表。

列表菜单提供“列表”、“保存”和“本地文件”选项,用于生成传统报表。程序还可以调用函数模块 GUI_DOWNLOAD,将 ALV 列表导出到电子表格,无需任何额外编码。

是的。ABAP 开发工具中的 AI 助手可以根据所需列表的简单描述生成报表头、SELECT 选项和事件块。生成的 SELECT 语句仍需进行性能评估。

人工智能工具可以汇总冗长的列表,突出显示异常值,并用通俗易懂的语言回答有关数据的问题。嵌入此类分析通常意味着将传统的列表转换为基于 ALV 或 Fiori 的输出格式。

总结一下这篇文章: