SAP-ABAP-.REPORT(报表程序)

更新时间:2023-10-11 00:19:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

报表程序

主要内容:标准列表、 自定义列表、 多页列表。

列表是 ABAP/4 报表程序数据的输出媒介。每个ABAP/4 报表程序将其输出数据传递到直接与该程序连 接的列表中 。每个程序 最多生成 21 个列表: 1 个基本列表 和 20 个辅助列表 。

从 ABAP/4 程序之中, 既可以将列表输出到屏 幕也可以输出到 SAP 假脱机系统 。将数据写入 列表的基本 ABAP/4 语句是 WRITE 语句。其他 输出语句是 ULINE 和 SKIP。

标准列表

如果 ABAP/4 报表只使用 WRITE、 SKIP 和 ULINE 输出语句并且不包含本节后面所说明的编辑语句,则系统将输出传递到标准列表 。完成数据选择之后在该屏幕上显示列表。

标准列表结构

标准页眉

标准页眉至少包括两行标准标题。 标准标题的首行包含列表表头和页号。第二行由水平线组成。执行程 序时,列表表头存储在系统字段 SY-TITLE 中。如果需要,可以在标准标题中包括最多四行列头和另一条水平线 。

标准页

输出数据显示在页眉之下。标准列 表包含一个动态长度的单页(内部 限制: 60,000 行)。输出长度由当前 列表大小确定。

标准列表的宽度

标准列表的 宽度取决于 执行报表时 的窗口宽度 。如果用户窗口小于或等于标准窗口大小,则标准页宽应 符合标准窗 口宽度。用 户可能必须 滚动列表才能查看列表 的所有部件 。如果用户窗口超过标 准窗口宽度 ,则标准列 表的宽度符 合选定标准 窗口的宽度 。总之,标 准列表的宽 度至少与标 准窗口一样 宽。标准窗 口的宽度取 决于操作系 统。

输出屏幕包 括允许用户 滚动超过窗 口宽度部分 的水平滚动 条。

标准列表的用户界面

标准列表的 输出屏幕包 含 R/3 系统的标准 菜单栏和标 准工具栏。

用户可以使 用下列特定 列表功能:

打印输出列表

要打印屏幕 上显示的列 表,用户可 以选择“列 表 -> 打印”。 打印的标准 页眉与显示 的标准页眉 不同,它还 包含当前日 期:

保存列表

要保存显示 的列表,用 户可以选择 “列表 -> 保存”。出现下列主题:

将列表保存 在 SAPoffice 中

当选择“列 表 -> 保存 -> Office” 时,出现一 个对话框, 询问用户是 将显示的列 表存储在用 户的 Office 文件夹中还 是发送给另 一用户。

将列表作为 本地文件保 存在演示服 务器中

选择“列表 -> 保存 -> 文件”时, 出现一个对 话框,询问 用户是否将 显示的列表 作为本地文 件保存,并 提供几个格 式选项。

修改列表和 列标题

通常,可以 列表和列标 题创建为文 本元素, 也可以在屏 幕上显示列 表时修改这 些表头。为 此,请选择 “系统 -> 列表 -> 列表头”。

自定义列表

可以修改标 准列表的结 构并创建单 个结构的列 表。使用 REPORT 语句选项以 及事件 TOP-OF-PAGE 和 END-OF-PAGE。 PROGRAM 语句与 REPORT 语句等价并 有相同的选 项。

要分别定义 页眉的格式 ,必须在紧 随事件关键 字 TOP-OF-PAGE 的处理块中 定义。 语法

TOP-OF-PAGE. WRITE: ....

TOP-OF-PAGE 事件在系统 开始处理列 表新页时出 现。系统在 输出新页首 行之前处理 TOP-OF-PAGE 后面的语句 。

自定义页眉 出现在标准 页眉之下。 如果要取消 标准页眉, 请使用 REPORT 语句的 NO STANDARD PAGE HEADING 选项: 语法

REPORT NO STANDARD PAGE HEADING.

使用该语句 时,系统不在报表 列表页上显 示标准页眉 。如果使用 TOP-OF-PAGE 定义单个页 眉,则系统 就将其显示 出来。

REPORT SAPMZTST NO STANDARD PAGE HEADING. TOP-OF-PAGE. WRITE: SY-TITLE, 40 'Page', SY-PAGNO. ULINE. WRITE: / 'SAP AG', 29 'Walldorf, ',SY-DATUM, / 'Neurottstr. 16', / '69190 Walldorf/Baden'. ULINE. START-OF-SELECTION. DO 5 TIMES. WRITE / SY-INDEX. ENDDO. 报表程序不 使用标准页 眉,而是使 用 TOP-OF-PAGE 之后的自定 义页眉。要 显式结束 TOP-OF-PAGE 处理块,必 须指定事件 关键字 START-OF-SELECTION 。 确定列表宽 度

要确定输出 列表的宽度 ,请使用 REPORT 语句的 LINE-SIZE 选项。

语法

REPORT LINE-SIZE .

该语句根据 字符确定报 表 输出列表的 宽度。如果 将 设置为 0,则系统 使用标准列表的宽度。

一行最多可 包含 255 个字符。但是,如果要 打印列表, 请记住大多 数打印机不 能打印超过 132 个字符的列 表。如果要 在创建时直 接打印列表 ,则页宽必 须符合某种 现有打印格 式。否则, 系统就不能 打印该列表。 一定不要选 择超过 132 字符的列表 宽度,除非 创建只用于 显示的列表 。

创建列表时 ,系统字段 SY-LINSZ 包含当前行 宽。使用 ULINE 语句(不带 AT 选项)创建 的水平线自 动适配自定 义列表宽度 。

REPORT SAPMZTST LINE-SIZE 40. WRITE: 'SY-LINSZ:', SY-LINSZ. ULINE. DO 20 TIMES. WRITE SY-INDEX. ENDDO. 确定页长

要确定输出 列表的页长 ,请使用 REPORT 语句的 LINE-COUNT 选项。 语法

REPORT LINE-COUNT [()].

该语句用 行确定报表 输出列表的 页长。如果 指定选项号 ,则 系统为页脚 保留 行页长。并不将这些页脚行填写到 END-OF-PAGE 事件中,而 是作为空行 显示。

如果将 设置为 0 ,则系统使 用标准页长。要根据 当前窗口大 小调整页长。创建列表 时,系统字 段 SY-LINCT 包含每页的 当前行数( 即 行或 0 代表标准页 长度)。

记住页眉长度是 的部件。因 此,对于列 表本身,只 能使用 减去页眉长 度减去 行。如果 小于页长度 ,则产生运 行错误。 如果在列表 处理期间系统到达为实际列表提供的区域的结 尾,则输出 页脚,如果 有,插入一 些空格并且 启动新页。 插入的空格 属于列表背 景并且不是 列表行。SY-PAGNO 系统字段总 包含当前页 号。

确定页长时 ,应记住下 列各项: 对于屏幕 输出,请使 用标准页长 以避免在屏幕中间分页 。 对于打印 列表,则根 据打印机要 求设置页长 。应采用对 任何页长都 能产生合理 输出的方式 书写程序。 如果选择现 有打印格式 之外的页长 ,则不能在 创建时直接 打印。对于仅指 定页面设置 的表格形式 的列表使用 固定长度规 格。在为此 类列表编写 程序代码之 前,请检查 能否使用预 定义的 SAPscript 表格。

下列程序旨 在说明 LINE-COUNT 选项的用法 。因此在一 个屏上显示 不同的列表 页。 REPORT SAPMZTST LINE-SIZE 40 LINE-COUNT 4. WRITE: 'SY-LINCT:', SY-LINCT. SKIP. DO 6 TIMES. WRITE / SY-INDEX. ENDDO. 列表包括四 页,每页四 行。每页由 页眉和两行 实际列表组 成。应注意 每页结尾的 空格。 定义页脚

要定义页脚 ,请使用 END-OF-PAGE 事件。在处 理列表页时 ,如果系统 到达页脚保 留行,或者 如果 RESERVE 语句触发分 页则该事件 发生。在紧接 着 END-OF-PAGE 事件关键字 的处理块中 填充页脚的 行:

语法

END-OF-PAGE. WRITE: ....

如果为 REPORT 语句的 LINE-COUNT 选项中的脚 注保留行, 则系统只处 理紧接着 END-OF-PAGE 的处理块。

如果要以后 开始处理实 际列表,记 住要通过使 用合适的事 件关键字, 例如 START-OF-SELECTION, 结束紧接着 END-OF-PAGE 的处理块。

REPORT SAPMZTST LINE-SIZE 40 LINE-COUNT 6(2) NO STANDARD PAGE HEADING. TOP-OF-PAGE. WRITE: 'Page with Header and Footer'. ULINE AT /(27). END-OF-PAGE. ULINE. WRITE: /30 'Page', SY-PAGNO. START-OF-SELECTION. DO 6 TIMES. WRITE / SY-INDEX. ENDDO. 该程序包括 三个处理块 。关闭标准 页眉。将页 长设置为六 行,其中两 行留作页脚 。

列表包括三 页,每页六 行。每页由 自定义的两 行页眉、两 行实际列表 和两行页脚 组成。页脚 中显示的当 前页号来自 系统字段 SY-PAGNO 。

多页列表

如果在报表 中写入列表 输出页的行 数超过在 REPORT 语句 LINE-COUNT 选项中定义 的行数,则 系统自动创 建新页。每个新 页都包含为 报表定义的 页眉和页脚 (如果有的 话)。

除自动分页 外,可以使 用 NEW-PAGE 和 RESERVE 语句显式地 编码分页。 NEW-PAGE 语句的选项 允许分别设 置每页格式 。也需要 NEW-PAGE 语句在程序 内打印列表。 下列主题说 明

编程分页

要编程无条件的分页,请使用 NEW-PAGE 语句。

要编程取决于页左边空行数的分页,请使用 RESERVE 语句。

无条件分页

要在页处理 期间触发分页,请使用 NEW-PAGE 语句的基本 格式: 语法 NEW-PAGE.

该语句结束当前 页。在新页 上显示所有 其他输出。

如果输出 写入到当前 页和 NEW-PAGE 之后的新页 ,则只开始 新页。系统 然后将 SY-PAGNO 系统字段家 1。不能产 生空页。不能触发 END-OF-PAGE 事件。这意 味着即使定 义了页脚, 系统也不输 出。

REPORT SAPMZTST LINE-SIZE 40. TOP-OF-PAGE. WRITE: 'TOP-OF-PAGE', SY-PAGNO. ULINE AT /(17). START-OF-SELECTION. DO 2 TIMES. WRITE / 'Loop:'. DO 3 TIMES. WRITE / SY-INDEX. ENDDO. NEW-PAGE. ENDDO. 该样本程序 使用列表表 头“标准页 眉”定义为 文本元素的 标准页眉和 自定义页眉 。每页都出 现两个页眉 。 DO 循环两次遇 到 NEW-PAGE 语句,但是 只执行一次 分页。在第 二条 NEW-PAGE 语句之后, 没有输出。

条件分页 – 定义行块

要在少于某 一页剩余行 数的条件下 执行分页, 请使用 RESERVE 语句: 语法

RESERVE LINES.

如果当前列 表页的最后 输出和页脚 之间剩余的 自由行数少 于 ,则 该语句触发 分页。 可以是变量 。在开始新 页之前,系 统处理 END-OF-PAGE 事件。只有 输出写入到 后续页时, RESERVE 才生效。不 创建空页。

REPORT SAPMZTST LINE-SIZE 40 LINE-COUNT 8(2). END-OF-PAGE. ULINE. START-OF-SELECTION. DO 4 TIMES. WRITE / SY-INDEX. ENDDO. DO 1 TIMES. WRITE / SY-INDEX. ENDDO. RESERVE 3 LINES. WRITE: / 'LINE 1', / 'LINE 2', / 'LINE 3'. 该样本程序 标准页眉的 列表头定义 为“标准页 眉”。REPORT 语句将页长 确定为八行 ,两行用于 标准页眉, 另外两行为 页脚保留。 页脚包括水 平行和空行 。因此,输 出的实际列 表,每页留 下四行。第 一个 DO 循环填充这 四行,然后 发生 END-OF-PAGE 事件,其后 系统自动开 始新页。在 第二个 DO 循环之后, 因为页上剩 余的自由行 数少于三, 因此 RESERVE 语句触发 END-OF-PAGE 事件和分页 。 单页的标准 页眉

标准页眉包 括列表和列 标题。要影 响标准页眉 这些组件的 表现形式, 请使用 NEW-PAGE 语句的下列 选项: 语法

NEW-PAGE [NO-TITLE|WITH-TITLE] [NO-HEADING|WITH-HEADING].

使用 NO-TITLE 或 WITH-TITLE 选项取消或 者在以后所 有页上显示 标准表头。 基本列表的 缺省值为 WITH-TITLE, 辅助列表为 NO-TITLE。

使用 NO-HEADING 或 WITH-HEADING 选项取消或 在以后所有 页上显示列 标题。基本 列表的缺省 值为 WITH-HEADING, 辅助列表为 NO-HEADING。

即使使用 REPORT 语句的 NO STANDARD PAGE HEADING 选项取消标 准页眉,也 能使用 WITH-TITLE 和 WITH-HEADING 激活单个组 件的显示。 因为 TOP-OF-PAGE 事件在新页 上处理,所 以 NEW-PAGE 语句不能影 响在该事件 中定义的页 眉显示。

REPORT SAPMZTST LINE-SIZE 40. WRITE: 'Page', SY-PAGNO. NEW-PAGE NO-TITLE. WRITE: 'Page', SY-PAGNO. NEW-PAGE NO-HEADING. WRITE: 'Page', SY-PAGNO. NEW-PAGE WITH-TITLE. WRITE: 'Page', SY-PAGNO. NEW-PAGE WITH-HEADING. WRITE: 'Page', SY-PAGNO. 该程序创建 五页,分别 带有不同页 眉。将列表 表头标题文 本元素定义 为“标准页 眉”,列标 题定义为“ 列”。 单页页长

要分别确定 每页的页长 ,请使用 NEW-PAGE 语句: 语法

NEW-PAGE LINE-COUNT .

该语句将后 续页的页长 确定为 可以是变量 。如果将 设置为 0 ,则系统使 用标准页长。页眉是页的部分因此也是页长的部分。

不能使用 NEW-PAGE 创建或更改 页脚。将 REPORT 语句中定义的页脚保存为与 NEW-PAGE 语句无关。 要将页长度适配当前窗口长度,请将 设置为 SY-SROWS。 SY-SROWS 系统字段包 含当前窗口 的行数。

REPORT SAPMZTST NO STANDARD PAGE HEADING LINE-SIZE 40 LINE-COUNT 0(2). TOP-OF-PAGE. WRITE: 'Top of Page', SY-PAGNO, 'SY-SROWS:', SY-SROWS. ULINE. END-OF-PAGE. ULINE. WRITE: 'End of Page', SY-PAGNO. START-OF-SELECTION. * NEW-PAGE LINE-COUNT SY-SROWS. DO 100 TIMES. WRITE / SY-INDEX. ENDDO. 因为 NEW-PAGE 被标记为注 释,所以该 程序创建没 有结尾的单 页: s系统在当前 窗口中显示 尽可能多的 行,即 12 行。在上面 的数字中, 12 行包含两行 自定义表头 行和 10 行实际列表 。在垂直滚 动时,页眉 保持可见。

列表级的页宽

不能更改列 表级内单个 页宽。只能 更改新列表 级的所有页 宽。为此, 请使用 NEW-PAGE 语句: 语法

NEW-PAGE LINE-SIZE .

从新页开始 的所有列表 级宽度都为 ,而不是 REPORT 语句中定义 的宽度。如 果将 设置为 0 ,则系统使 用标准列表 的宽度。

如果将 设置为 SY-SCOLS, 则可以使新 列表级的宽度适配窗口 宽度,即使该窗口小于标准窗口。 SY-SCOLS 系统字段包含当前窗口一行的字符 数。

在列表级之内,即下页不是新列表级的开始, 则系统忽略 LINE-SIZE 选项。

在程序之内滚动

在程序之内 ,可以垂直 和水平滚动 列表。使用 SCROLL 关键字。例 如,如果要 滚动到某页 以响应用户 输入,则从 程序内滚动 就很有意义。

SCROLL 语句只对完 成的列表生效。如果在 列表的第一 条输出语句 之前使用该 语句,则不 影响该列表 。如果在列表的第一条 输出语句之后使用 SCROLL, 则影响整个列表,包括 以后的所有 输出语句。 在每条 SCROLL 语句之后, 可以查询 SY-SUBRC 以查看系统 是否成功。 如果系统成 功滚动则 SY-SUBRC 为 0 ;如果滚动不可能则为 4 ,因为其超过列表边界 。如果正在使用几个列表级,则 SY-SUBRC 也可能是 8,表明指 定的列表级 不存在。 SCROLL 语句允许

垂直滚动 水平滚动

通过窗口滚动窗口

要以当前窗 口大小垂直 滚动列表并 且与页长无 关,请使用 这条语句:

语法

SCROLL LIST FORWARD|BACKWARD [INDEX ].

不带 INDEX 选项时,该 语句以当前 窗口大小向前或向后滚 动当前列表 。使用 INDEX 选项时,系 统以列表级 滚动列表。

REPORT SAPMZTST NO STANDARD PAGE HEADING LINE-SIZE 40. TOP-OF-PAGE. WRITE: 'Top of Page', SY-PAGNO, 'SY-SROWS:', SY-SROWS. ULINE. START-OF-SELECTION. DO 100 TIMES. WRITE / SY-INDEX. ENDDO. DO 1 TIMES. SCROLL LIST FORWARD. ENDDO. 应注意,实际列表是以 SY-SROWS 减去表头行 数进行滚动 。用户可以 继续朝两个 方向滚动。 按页滚动

要按页滚动 列表,即按 页长垂直滚 动列表,SCROLL 语句提供下 列选项:

滚动到某页

要滚动到某 页,请使用 SCROLL 语句的 TO 选项:

语法

SCROLL LIST TO FIRST PAGE | LAST PAGE | PAGE [INDEX ] [LINE ].

不用 INDEX 选项,语句 将当前列表 滚动到首页 、尾页或 页。使用 INDEX 选项,则系 统滚动列表 级 的列表。

使用 LINE 选项时,系统显示从实 际列表的 行开始滚动的页,不包括页眉行。

按页数滚动

要按页数滚 动列表,请 使用 SCROLL 语句的下列 选项:

语法

SCROLL LIST FORWARD | BACKWARD PAGES [INDEX ].

不用 INDEX 选项时,语 句向前或向 后滚动 页。如上所 述,INDEX 选项参考某 一列表级。

REPORT SAPMZTST NO STANDARD PAGE HEADING LINE-SIZE 40 LINE-COUNT 8(2). DATA: PAG TYPE I VALUE 15, LIN TYPE I VALUE 4. TOP-OF-PAGE. WRITE: 'Top of Page', SY-PAGNO. ULINE. END-OF-PAGE. ULINE. WRITE: 'End of Page', SY-PAGNO. START-OF-SELECTION. DO 100 TIMES. DO 4 TIMES. WRITE / SY-INDEX. ENDDO. ENDDO. SCROLL LIST TO PAGE PAG LINE LIN. 该程序创建 100 页的列表, 每页 8 行。每页四 行用于页眉 和页脚。 列表从第 15 页开始显示 。由于 LINE 选项,实际 列表的前三 行滚动到页 眉以下。 滚动到列表 的页边缘

要水平滚到 列表的左或 右页边缘, 请使用 SCROLL 语句的下列 选项:

语法

SCROLL LIST LEFT | RIGHT [INDEX ].

不用 INDEX 选项时,语句滚动到当前列表的左或右页边缘 。使用 INDEX 选项时,系统滚动列表级 的列表。

REPORT SAPMZTST NO STANDARD PAGE HEADING LINE-SIZE 200. TOP-OF-PAGE. WRITE: AT 161 'Top of Page', SY-PAGNO, 'SY-SCOLS:', SY-SCOLS. ULINE. START-OF-SELECTION. DO 200 TIMES. WRITE SY-INDEX. ENDDO. SCROLL LIST RIGHT. 该程序宽度 为 200 的一页列表 。如果当前 窗口宽度( 存储在 SY-SCOLS 中)等于 40 ,列表显示滚 动到右页边 边缘。用户 现在可以使 用滚动条滚 动到左边。 按列滚动

要按列水平 滚动列表, SCROLL 语句提供几 个选项。在 此情况下, 一列意味着列表行一个字符。

滚动到某列

要滚动到某 列,请使用 SCROLL 语句的 TO COLUMN 选项:

语法

SCROLL LIST TO COLUMN [INDEX ].

不用 INDEX 选项时,系 统显示从列 开始的当前 列。使用 INDEX 选项时,系 统滚动列表 级 的列表。

按列数滚动

要按某一列 数滚动列表 ,请使用 SCROLL 语句的下列 选项:

语法

SCROLL LIST LEFT | RIGHT BY PLACES [INDEX ].

不用 INDEX 选项时,系 统按 列将当前列 表滚动到左 边或右边。 如上所述, INDEX 选项参考特定的列表级 。

REPORT SAPMZTST NO STANDARD PAGE HEADING LINE-SIZE 200. TOP-OF-PAGE. WRITE: AT 161 'Top of Page', SY-PAGNO, 'SY-SCOLS:', SY-SCOLS. ULINE. START-OF-SELECTION. DO 200 TIMES. WRITE SY-INDEX. ENDDO. SCROLL LIST TO COLUMN 178. 该程序创建 宽度为 200 的一页列表 。如果当前窗口宽度( 存储在 SY-SCOLS 中)等于 40 ,从 178 列开始显示列表。用户可以滚动到列表左边。 列表页面设置

列表页面设 置确定如何 组织列表显 示以便容易 读取。页面 信息量大小 并不重要, 重要的是信 息的表现方 式。人眼更 易于处理小 块信息。因 此,将包含 新信息块的 列或行与前 面的块从视 觉上分开也 同等重要。 设置列表页 面时,应该 使用几个空 行或垂直行 以将各栏分 开。在输出 包含新信息 项的行之前 ,应画一空 行或下划线 。

下列主题说 明 ABAP/4 为设置列表 页面提供多 种功能。

定位输出

可以在当前 页的任意位 置定位 WRITE 和 ULINE 语句的输出 。紧接着位 置规格的 WRITE、 SKIP、 或 ULINE 语句可以覆 盖现有输出 。对于当前 输出位置, 参阅系统字 段

SY-COLNO SY-LINNO

( 用于当前列 ) ( 用于当前行 )

可以使用系 统字段在页 上引导。

ABAP/4 提供一些关 键字以更改 绝对和相对 输出位置。 参见下列主 题:

SAP 允许只读取 系统字段 SY-COLNO 和 SY-LINNO。 因此,要定位输出,只能使用这些 主题中说明的语句。不要通过直接给系统字段赋值来定位输出。 绝对定位

指定绝对位置之后,将后续输出入在固定行和列开始 屏幕。

水平定位

要指定水平 输出位置, ABAP/4 提供两种方 法: WRITE 和 ULINE 语句的 AT 选项以及 POSITION 语句。

语句

POSITION .

该语句将水平输出位置SY-COLNO 系统字段设 置为 。 如果 超出页面之外,则忽略后续输出语句。

系统将 POSITION 语句或使用 AT 格式化的 WRITE 语句的输出写入指定位置,不管是否有足够空间。超出该行的输出部分被截断。其他 WRITE 输出在下一行开始。

垂直定位

如下指定垂直输出位置 :

语法

SKIP TO LINE .

该语句将垂直输出位置 和 SY-LINNO 系统字段设 置为 。如果 超出 1 和页长范围 ,则系统忽 略该语句。

使用 LINE 时,系统也计算页眉和页脚行。请确认没有无意改写页眉和页脚行。 在页眉之下定位输出

要将输出定 位到整个页 眉之后的第 一行,请使 用 BACK 语句:

语法

BACK.

如果该语句 不是紧跟 RESERVE 语句,则后 续输出出现在页眉之下 。系统将 SY-COLNO 设置为 1 并根据页眉的长度设置 SY-LINNO。 与 RESERVE 语句组合时,其他规则也适用。

如果在 TOP-OF-PAGE 事件中指定 BACK, 则系统不将输出位置设置到整个页眉之下,而只在标准页 眉之下。写入的任何输 出现在都覆 盖 TOP-OF-PAGE 中指定的自 定义页眉。

绝对定位示例

REPORT SAPMZTST NO STANDARD PAGE HEADING LINE-SIZE 60. DATA: X(3), Y(3). X = SY-COLNO. Y = SY-LINNO. TOP-OF-PAGE. WRITE: 'Position of Header: ', X, Y. ULINE. START-OF-SELECTION. SKIP TO LINE 10. POSITION 20.

X = SY-COLNO. Y = SY-LINNO. WRITE: '* <- Position', X, Y. SKIP TO LINE 12. ULINE AT 20(20). BACK. X = SY-COLNO. Y = SY-LINNO. WRITE: 'Position after BACK:', X, Y. 该程序创建 下列列表页 : 系统将 SY-COLNO 和 SY-LINNO 的初值分配 给字段 X 和 Y。应注意 ,该赋值实 际发生在 START-OF-SELECTION 事件中。初始 输出位置就 是第一各表 头行的位置 。输出写到 此处。SKIP TO LINE 和 POSITION 在列 20、行 10 中放一个“ *”。SKIP TO LINE 和 AT 产生下横线 。最后,BACK 将输出位置 设置到两行 页眉下的列 1、行 3。 相对定位

相对定位参 考以前写入列表的输出 。某些相对定位自动发生。使用无定位的WRITE 时,在上一 输出之后空 一列出现输 出。如果在 当前行没有 足够空间, 则换行。不 使用定位的 ULINE 和 SKIP 语句产生换 行。 要编程相对 定位,请将 SY-COLNO 和 SY-LINNO 系统字段与 绝对定位 中说明的语 句组合使用 或者使用下 述相对定位 语句。

产生换行

要产生换行 ,请在 WRITE、 ULINE 或 NEW-LINE 语句的 AT 选项中使用 反斜杠。

语法

NEW-LINE.

该语句将输 出定位在新 行中,将 SY-COLNO 设置为 1 并且将 SY-LINNO 加 1。如果自 最后换行之 后将输出写 入屏幕,则 系统只执行 该语句。NEW-LINE 不创建空行 。要创建空 行,请使用 SKIP 语句。 在 NEW-PAGE 语句和事件 开始时发生 自动换行。

将输出定位 到其它输出之下

可以将 WRITE 输出定位到 上一 WRITE 输出的列中 。请使用 WRITE 语句的格式 化选项 UNDER:

语法

WRITE UNDER .

系统从开始 输出字段 的同一列中 开始输出 。该 语句不限于 当前页,即 不必出现在 相同页上。

务必调整垂 直位置以免 改写上一输 出。 参考字段 必须与相应 WRITE 语句中一样 ,包括所有 说明,如偏 移量等。如果 是文本符号,则系统 从该文本符 号的号码确 定参考字段 。

将输出定位 在行块的首行

要将下一输 出行定位到 通过 RESERVE 语句定义的 行块的首行, 请按如下格 式使用 BACK 语句:

语法

RESERVE. ..... BACK.

如果 BACK 紧随 RESERVE, 则后续输出 出现在 RESERVE 之后的第一 行中。例如 ,可以使用 该语句在某 循环之内的 输出之后跳 转回某行。

相对定位的 示例

第一个示例 显示如何通 过自定义页 眉创建纵向 列表。

REPORT SAPMZTST NO STANDARD PAGE HEADING LINE-SIZE 80 LINE-COUNT 7. DATA: H1(10) VALUE ' Number', H2(10) VALUE ' Square', H3(10) VALUE ' Cube', N1 TYPE I, N2 TYPE I, N3 TYPE I, X TYPE I. TOP-OF-PAGE. X = SY-COLNO + 8. POSITION X. WRITE H1. X = SY-COLNO + 8. POSITION X. WRITE H2. X = SY-COLNO + 8. POSITION X. WRITE H3. X = SY-COLNO + 16. POSITION X. WRITE SY-PAGNO. ULINE. START-OF-SELECTION. DO 10 TIMES. N1 = SY-INDEX. N2 = SY-INDEX ** 2. N3 = SY-INDEX ** 3. NEW-LINE. WRITE: N1 UNDER H1, N2 UNDER H2, N3 UNDER H3. ENDDO. 本程序创建 两页列表。 在自定义页 眉中,使用 SY-COLNO 系统字段和 POSITION 语句相对定 位列标题。 通过 WRITE 语句的 UNDER 选项将实际 列表输出定 位在页眉行 字段之下。ABAP/4 缺省的写字 符串的左对 齐和数字字 段的右对齐 导致单个字 段的不同输 出位置。要 影响对齐方 式,请使用 WRITE 语句的格式 化选项 LEFT-JUSTIFIED、 RIGHT-JUSTIFIED 和 CENTERED。 第二个示例 显示紧随 RESERVE 之后的BACK 语句的作用 。

REPORT SAPMZTST NO STANDARD PAGE HEADING LINE-SIZE 40. DATA X TYPE I. WRITE 'Some numbers:' NO-GAP. X = SY-COLNO. ULINE AT /(X). RESERVE 5 LINES. DO 5 TIMES. WRITE / SY-INDEX. ENDDO. X = SY-COLNO. BACK. WRITE AT X ' <- Start of Loop'. 输出前两行 之后,RESERVE 语句用于将 后续五行定 义为块。紧 随 BACK 之后的输出 写入到块的 第一行。请 注意,如何 使用 SY-COLNO 系统字段给 第一行加下 划线以及如 何定位最后 的 WRITE 输出。

格式输出

要格式化列 表输出,ABAP/4 提供几个格 式化选项。

其他重要的 格式化选项 ,例如,确 定输出颜色 以及使列表 字段接受输 入的选项, 都是 FORMAT 语句的格式 化选项。这 些将在后面 的主题中加 以说明。FORMAT 语句的全部 选项都可作 为 WRITE 语句的格式 化选项。 FORMAT 语句

要在程序中 静态设置格 式化选项, 请按如下格 式使用 FORMAT 语句:

语法

FORMAT [ON|OFF] [ON|OFF] ....

FORMAT 语句中设置 的格式化选 项 适用于所有 后续输出, 直到使用 OFF 选项关闭。 打开格式化 选项的 ON 选项可选, 也就是说, 可以忽略。

要在运行时 动态设置格 式化选项, 请按如下格 式使用 FORMAT 语句:

语法

FORMAT = = ....

系统将变量 解释为数字 。因此,它 们应该是数 据类型 I 。如果 的内容是零 ,则该变量 与 OFF 选项等效。 如果 不等于零, 则变量或者 与 ON 选项等效, 或者在与 COLOR 选项同时使 用时与相应 颜色号等效。

如果对于紧 随 FORMAT 语句之后的 WRITE 语句使用相 同的格式化 选项,则 WRITE 语句的设置 将覆盖当前 输出的 FORMAT 语句的相应 选项。

对于每个新 事件,系统 将所有格式 化选项复位 到缺省值。所有格式 化选项都有 缺省值 OFF,INTENSIFIED 选项除外。 要一次性将 所有格式化 选项设置为 OFF,请 使用:

语法

FORMAT RESET.

下列主题说 明可用的格 式化选项。 列表中的颜 色

FORMAT 语句的选项 COLOR、 INTENSIFIED 和 INVERSE 影响输出列 表的颜色。 要在程序中 设置颜色, 请使用:

语法

FORMAT COLOR [ON] INTENSIFIED [ON|OFF] INVERSE [ON|OFF]. 要在运行时 设置颜色, 请使用:

语法

FORMAT COLOR = INTENSIFIED = INVERSE = . 这些格式化 选项不适用 于由 ULINE 创建的水平行。其功能如下所示:

COLOR 设置行背景 的颜色。而且,如果设 置 INVERSE ON ,则系统将 更改前景颜 色而不是背 景颜色。 对于 ,可 以设置颜色 号或者颜色 规范。但是 ,要代替颜 色号 0,必须使 用 OFF。如 果在运行时 设置颜色号 码,则小于 0 或大于 7 的所有 值都将导致 未定义的结 果。下表汇 总各种不同 的选项:

0 1 2 3 4 5 6 7 颜 色 取 决于 GUI 灰 蓝 淡 灰 黄 蓝 绿 绿 红 紫 用于 背景 标题 列表正文 总计 关键字列 正门限值 负门限值 组级别 OFF 或 COL_BACKGROUND 1 或 COL_HEADING 2 或 COL_NORMAL 3 或 COL_TOTAL 4 或 COL_KEY 5 或 COL_POSITIVE 6 或 COL_NEGATIVE 7 或 COL_GROUP 缺省 值为 COLOR OFF。

INTENSIFIED 确定行背景 的颜色调色 板。

上面指定的 行背景的颜 色调色板可 以很浓或正 常,有一个 例外 (COLOR OFF)。 缺省设置为 INTENSIFIED ON。对于 COLOR OFF,系 统将更改前 景颜色而不 是背景颜色 。而且,如 果设置 INVERSE ON,则 INTENSIFIED OFF 无效(同样 ,COLOR OFF 例外)。 INVERSE 影响前景颜 色。

系统从背景 颜色调色板 获取指定 COLOR 并将其用作 前景颜色, 有一个例外 (COLOR OFF)。 背景颜色保 持不变。对 于 COLOR OFF,INVERSE 无效,因为 这将前景和 背景颜色设 置为相同颜 色。

下列语句等 效: FORMAT INTENSIFIED ON. FORMAT INTENSIFIED OFF. 和 和 SUMMARY. DETAIL. 为了便于阅 读,SAP 建议一直使 用 FORMAT 语句。 下列示例显 示列表中可 能的颜色和 如何使用它 们。

关于列表中 颜色的其他 演示,请在 任何系统中 调用 SHOWCOLO 报表。

演示列表中 可用的颜色

下例显示各 种颜色格式 化选项的不 同组合情况 :

REPORT SAPMZTST. DATA I TYPE I VALUE 0. DATA COL(15). WHILE I < 8. CASE I. WHEN 0. COL = 'COL_BACKGROUND '. WHEN 1. COL = 'COL_HEADING '. WHEN 2. COL = 'COL_NORMAL '. WHEN 3. COL = 'COL_TOTAL '. WHEN 4. COL = 'COL_KEY '. WHEN 5. COL = 'COL_POSITIVE '. WHEN 6. COL = 'COL_NEGATIVE '. WHEN 7. COL = 'COL_GROUP '. ENDCASE. FORMAT INTENSIFIED COLOR = I. WRITE: /(4) I, AT 7 SY-VLINE, COL, SY-VLINE, COL INTENSIFIED OFF, SY-VLINE, COL INVERSE. I = I + 1. ENDWHILE. 在 FORMAT 语句中,在 运行时设置 后续 WRITE 语句的 COLOR 选项。在程 序中单独设 置每条 WRTIE 语句的其他 选项。 输出显示如 下表格: 标准页眉创 建为文本元 素。在联机 帮助中,由 于技术原因 ,该列表的 颜色与 R/3 系统的颜色 稍有不同。

在列表中使 用颜色的示 例

本例显示如 何在列表中 使用颜色以 强调输出。

下列报表可 以连接到逻 辑数据库 F1S。 REPORT SAPMZTST NO STANDARD PAGE HEADING LINE-SIZE 70. TABLES: SPFLI, SFLIGHT. DATA SUM TYPE I. TOP-OF-PAGE. WRITE 'List of Flights' COLOR COL_HEADING. ULINE. GET SPFLI. FORMAT COLOR COL_HEADING. WRITE: 'CARRID', 10 'CONNID', 20 'FROM', 40 'TO'. FORMAT COLOR COL_KEY. WRITE: / SPFLI-CARRID UNDER 'CARRID', SPFLI-CONNID UNDER 'CONNID', SPFLI-CITYFROM UNDER 'FROM', SPFLI-CITYTO UNDER 'TO'. ULINE. FORMAT COLOR COL_HEADING. WRITE: 'Date', 20 'Seats Occupied', 50 'Seats Available'. ULINE. SUM = 0. GET SFLIGHT. IF SFLIGHT-SEATSOCC LE 10. FORMAT COLOR COL_NEGATIVE. ELSE. FORMAT COLOR COL_NORMAL. ENDIF. WRITE: SFLIGHT-FLDATE UNDER 'Date', SFLIGHT-SEATSOCC UNDER 'Seats Occupied', SFLIGHT-SEATSMAX UNDER 'Seats Available'. SUM = SUM + SFLIGHT-SEATSOCC. GET SPFLI LATE. ULINE. WRITE: 'Total Bookings:' INTENSIFIED OFF, SUM UNDER SFLIGHT-SEATSOCC COLOR COL_TOTAL. ULINE SKIP. 所有标题以 背景颜色 COL_HEADING 显示。表格 SPFLI 的关键字字 段使用 COL_KEY 作为背景颜 色。事件 GET SFLIGHT 的列表正文 行背景颜色 (COL_NORMAL)不 同于列表背 景 (COL_BACKGROUND) 。而且,预 定数量在某 一最小数量 以下的航班 ,其背景为 红色。每个 航班的总预 定数量背景 为黄色。 请注意,对 于每个新事 件,系统都 将格式化选 项复位为缺 省设置(COLOR OFF、 INTENSIFIED ON)。因 此,在上面 程序中,GET LATE 事件时输出 “总计预定 ”的行背景 还是 COL_BACKGROUND。 将 INTENSIFIED 设置为 OFF 以获取与其 他输出相同 的前景颜色 。

本文来源:https://www.bwwdw.com/article/17sf.html

Top