ABAP 报表

ABAP 报表

📖 简介

报表(Report)是以组织结构呈现数据的重要工具。许多数据库管理系统包括一个报表写入器,使您能够设计和生成报表。SAP应用程序支持报表创建,其中经典报表是最基础和常用的形式。

🔄 报表的基本概念

  • 数据展示:将数据库中的数据以结构化方式展示
  • 事件驱动:通过不同的事件控制报表的执行流程
  • 格式化输出:控制数据的显示格式和布局
  • 交互式:支持用户输入和选择

💡 核心特点 - 使用循环内的WRITE语句中的输出数据创建经典报表。它们不包含任何子报表。SAP还提供了一些标准报表,例如用于在客户端之间复制表的RSCLTCOP和用于显示实例参数的RSPARAM。

📊 报表事件

经典报表事件概述

编号 事件 & 说明
1 INITIALIZATION
在显示选择画面之前触发。
2 AT SELECTION-SCREEN
在选择屏幕上处理用户输入后触发。此事件在执行程序之前验证用户输入。在处理用户输入之后,选择屏幕保持在活动模式。
3 START-OF-SELECTION
仅在选择屏幕的处理结束后触发;即当用户点击选择屏幕上的执行图标时。
4 END-OF-SELECTION
在执行START-OF-SELECTION事件中的最后一条语句之后触发。
5 TOP-OF-PAGE
由第一条WRITE语句触发以在新页面上显示数据。
6 END-OF-PAGE
触发以在报表的页面末尾显示文本。请注意,此事件是创建报告时的最后一个事件,应与REPORT语句的LINE-COUNT子句结合使用。

🎯 事件执行顺序



graph TB
    A[程序启动] --> B[INITIALIZATION]
    B --> C[显示选择屏幕]
    C --> D[用户输入]
    D --> E[AT SELECTION-SCREEN]
    E --> F{验证通过?}
    F -->|是| G[START-OF-SELECTION]
    F -->|否| C
    G --> H[数据查询和处理]
    H --> I[END-OF-SELECTION]
    I --> J[程序结束]
    
    K[分页处理] --> L[TOP-OF-PAGE]
    L --> M[数据输出]
    M --> N[END-OF-PAGE]
    M --> O[继续下一页]

📝 经典报表示例

让我们创建一个经典报表来显示标准数据库MARA(包含一般材料数据)中的信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
REPORT zreport2 LINE-SIZE 75  LINE-COUNT 30(3)  NO STANDARD PAGE HEADING.
TABLES: mara.
TYPES:
BEGIN OF itab,
matnr TYPE mara-matnr,
mbrsh TYPE mara-mbrsh,
meins TYPE mara-meins,
mtart TYPE mara-mtart,
END OF itab.
DATA: wa_ma TYPE itab,
it_ma TYPE STANDARD TABLE OF itab.
SELECT-OPTIONS: mats FOR mara-matnr OBLIGATORY.

INITIALIZATION.
mats-low = '1'.
mats-high = '500'.
APPEND mats.

AT SELECTION-SCREEN.
IF mats-low = ' '.
MESSAGE i000(zkmessage).
ELSEIF mats-high = ' '.
MESSAGE i001(zkmessage).
ENDIF.

TOP-OF-PAGE.
WRITE:/ 'CLASSICAL REPORT CONTAINING GENERAL MATERIAL DATA FROM THE TABLE MARA' COLOR 7.
ULINE.
WRITE:/ 'MATERIAL' COLOR 1,
24 'INDUSTRY' COLOR 2,
38 'UNITS' COLOR 3,
53 'MATERIAL TYPE' COLOR 4.
ULINE.

END-OF-PAGE.

START-OF-SELECTION.
SELECT
matnr
mbrsh
meins
mtart
FROM mara
INTO TABLE it_ma
WHERE matnr IN mats.
LOOP AT it_ma INTO wa_ma.
WRITE:/ wa_ma-matnr,
25 wa_ma-mbrsh,
40 wa_ma-meins,
55 wa_ma-mtart.
ENDLOOP.

END-OF-SELECTION.
ULINE.
WRITE:/ 'CLASSICAL REPORT HAS BEEN CREATED' COLOR 7.
ULINE.
SKIP.

🔍 代码解析

1. 报表基本设置

1
REPORT zreport2 LINE-SIZE 75  LINE-COUNT 30(3)  NO STANDARD PAGE HEADING.
  • LINE-SIZE 75:设置每行75个字符
  • LINE-COUNT 30(3):每页30行,标题页保留3行
  • NO STANDARD PAGE HEADING:不显示标准页头

2. 数据结构定义

1
2
3
4
5
6
7
TYPES:
BEGIN OF itab,
matnr TYPE mara-matnr,
mbrsh TYPE mara-mbrsh,
meins TYPE mara-meins,
mtart TYPE mara-mtart,
END OF itab.

定义了内表的数据结构,对应MARA表的字段。

3. 初始化事件

1
2
3
4
INITIALIZATION.
mats-low = '1'.
mats-high = '500'.
APPEND mats.

在程序启动前设置选择屏幕的默认值。

4. 选择屏幕验证

1
2
3
4
5
6
AT SELECTION-SCREEN.
IF mats-low = ' '.
MESSAGE i000(zkmessage).
ELSEIF mats-high = ' '.
MESSAGE i001(zkmessage).
ENDIF.

验证用户输入,如果输入不完整则显示错误消息。

5. 页面头部

1
2
3
4
5
6
7
8
TOP-OF-PAGE.
WRITE:/ 'CLASSICAL REPORT CONTAINING GENERAL MATERIAL DATA FROM THE TABLE MARA' COLOR 7.
ULINE.
WRITE:/ 'MATERIAL' COLOR 1,
24 'INDUSTRY' COLOR 2,
38 'UNITS' COLOR 3,
53 'MATERIAL TYPE' COLOR 4.
ULINE.

设置报表的标题和表头。

6. 数据查询和输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
START-OF-SELECTION.
SELECT
matnr
mbrsh
meins
mtart
FROM mara
INTO TABLE it_ma
WHERE matnr IN mats.
LOOP AT it_ma INTO wa_ma.
WRITE:/ wa_ma-matnr,
25 wa_ma-mbrsh,
40 wa_ma-meins,
55 wa_ma-mtart.
ENDLOOP.

执行数据库查询并输出结果。

🎯 报表组件详解

1. SELECT-OPTIONS 语句

1
SELECT-OPTIONS: mats FOR mara-matnr OBLIGATORY.
  • 允许用户输入一个范围值
  • OBLIGATORY表示该字段必须输入
  • 会生成一个范围表供WHERE条件使用

2. 格式化输出

1
2
3
4
WRITE:/ wa_ma-matnr,
25 wa_ma-mbrsh,
40 wa_ma-meins,
55 wa_ma-mtart.
  • :/ 表示新行开始
  • 数字指定了列的位置
  • COLOR 设置文本颜色

3. 格式化控制



graph LR
    A[格式化] --> B[位置控制]
    A --> C[颜色设置]
    A --> D[分隔线]
    A --> E[跳行]
    
    B --> F[固定列位]
    B --> G[对齐方式]
    
    C --> H[数字颜色]
    C --> I[文本颜色]
    
    D --> J[ULINE]
    
    E --> K[SKIP]

🚀 报表开发最佳实践

1. 代码结构组织

1
2
3
4
✓ 清晰的事件划分
✓ 合理的数据结构
✓ 适当的错误处理
✓ 用户友好的提示

2. 性能优化

  • 使用高效的SELECT语句
  • 减少数据传输量
  • 合理使用缓存

3. 用户体验

  • 提供清晰的选择界面
  • 设置合理的默认值
  • 提供错误反馈