内容
标准列表 ........................................................................................................................................... 1
标准列表示 例 ............................................................................................................................ 1 标准列表结 构 ............................................................................................................................ 2 标准列表的 用户界面 .................................................................................................................. 2 自定义列表 ....................................................................................................................................... 4 单个页眉 ..................................................................................................................................... 4 确定列表宽 度 ............................................................................................................................ 5 确定页长 ..................................................................................................................................... 5 定义页脚 ..................................................................................................................................... 6 多页列表 ........................................................................................................................................... 7 编程分页 ..................................................................................................................................... 7 单页的标准 页眉 ......................................................................................................................... 8 单页页长 ..................................................................................................................................... 9 列表级的页 宽 ........................................................................................................................ 10 在程序之内 滚动 ..................................................................................................................... 10 列表页面设 置 .............................................................................................................................. 13
定位输出 ................................................................................................................................. 13 格式输出 ................................................................................................................................. 16 特殊输出格 式 ........................................................................................................................ 21 创建空行 ................................................................................................................................. 23 画线、框架 和网格 ................................................................................................................. 24 确定页的哪 一部分可以 水平滚动 .......................................................................................... 28
列表是 ABAP/4 报表程序数 据的输出媒 介。每个 ABAP/4 报表程序将 其输出数据 传递到直接 与该程序连 接的列表中 。每个程序 最多生成 21 个列表: 1 个基本列表 和 20 个辅助列表 。本节对创 建列表作一 般说明。也 就是说,此 处描述的大 部分语句适 用于基本列 表和辅助列 表。缺省情 况下,系统 将报表的输 出传递到基 本列表。大 多数情况下 ,报表仅有 基本列表。 因此,本节 中示例主要 处理基本列 表。关于如 何编程辅助 列表的详细 信息,参见 交互式列表 (页 Error! Not a valid link.) 。 从 ABAP/4 程序之中, 既可以将列 表输出到屏 幕也可以输 出到 SAP 假脱机系统 。缺省情况 下,在屏幕 上显示列表 。本节中的 所有示例都 使用该缺省 值。关于如 何打印列表 的详细信息 ,参见 打印列表 (页 Error! Not a valid link.) 。
将数据写入 列表的基本 ABAP/4 语句是 WRITE 语句。其他 输出语句是 ULINE 和 SKIP。 关于这三条 语句的详细 信息,参见 将数据输出到屏幕 (页 Error! Not a valid link.) 。 下列主题说 明列表的结 构和创建列 表时定义列 表格式的选 项:
标准列表
如果 ABAP/4 报表只使用 WRITE、 SKIP 和 ULINE 输出语句并 且不包含本 节后面所说 明的编辑语 句,则系统 将输出传递 到标准列表 。完成数据 选择之后在 该屏幕上显 示列表。 下列主题说 明
标准列表示 例
下面的输出 屏幕显示标 准列表:
要创建该标 准列表,请 使用下面的 样本报表。
REPORT SAPMZTST. TABLES SPFLI. SKIP. ULINE AT /(62). SELECT * FROM SPFLI WHERE CONNID GE 0017 AND CONNID LE 0400. WRITE: / SY-VLINE, SPFLI-CONNID, SY-VLINE, (15) SPFLI-CITYFROM, 26 SY-VLINE, 31 SPFLI-CITYTO, 51 SY-VLINE, 62 SY-VLINE, / SY-VLINE, 8 SY-VLINE, 2 SPFLI-DEPTIME UNDER SPFLI-CITYFROM, 26 SY-VLINE, SPFLI-ARRTIME UNDER SPFLI-CITYTO, 51 SY-VLINE, SPFLI-FLTIME, SY-VLINE. ULINE AT /(62). ENDSELECT. WRITE: /10 'SAP *** SAP *** SAP *** SAP *** SAP *** SAP', /19(43) 'Flight Information System', /19(43) 'International Connections'. SELECT 语句从数据 库表格 SPFLI 读取选定行 。在 SELECT 循环内, WRITE、 SKIP 和 ULINE 语句将工作 区 SPFLI 的字段以及 水平和垂直 行输出到该 列表。关于 所使用的所 有 WRITE 选项的详细 信息,参见 将数据输出到屏幕 (页 Error! Not a valid link.) 。 创建和更改 列表及列表 头 (页 Error! Not a valid link.) 对如何创建 列表和列标 题进行解释 。 关于该标准 列表结构的 详细信息, 参见 标准列表结 构 (页 2) 。
标准列表结 构
下列主题提 供标准列表 结构的信息 。 标准列表包 括
有关标准列 表宽度的信 息,可在下 列主题中找 到:
标准页眉
标准页眉至 少包括两行 标准标题。 标准标题的 首行包含列 表表头和页 号。第二行 由水平线组 成。执行程 序时,列表 表头存储在 系统字段 SY-TITLE 中。如果需 要,可以在 标准标题中 包括最多四 行列头和另 一条水平线 。
创建和更改 列表及列表 头 (页 Error! Not a valid link.) 说明如何维 护列表和列 头。而且, 显示列表之 后,可以在 标准列表的 用户界面中 调整这些表 头(参见 修改列表和 列标题 (页 4) )。 标准页眉的 宽度自动调 整到窗口宽 度。
如果用户垂 直滚动列表 ,则标准页 眉保持可见 ,只滚动表 头之下的列 表。 如果用户水 平滚动列表 ,则列表表 头和页号保 持可见。
标准页
输出数据显 示在页眉之 下。标准列 表包含一个 动态长度的 单页(内部 : 60,000 行)。输出 长度由当前 列表大小确 定。
输出屏幕包 括一个垂直 滚动条,允 许用户滚动 页长超过窗 口的列表。
标准列表的 宽度
标准列表的 宽度取决于 执行报表时 的窗口宽度 。如果用户 窗口小于或 等于标准窗 口大小,则 标准页宽应 符合标准窗 口宽度。用 户可能必须 滚动列表才 能查看列表 的所有部件 。如果用户 窗口超过标 准窗口宽度 ,则标准列 表的宽度符 合选定标准 窗口的宽度 。总之,标 准列表的宽 度至少与标 准窗口一样 宽。标准窗 口的宽度取 决于操作系 统。
输出屏幕包 括允许用户 滚动超过窗 口宽度部分 的水平滚动 条。
标准列表的 输出屏幕包 含 R/3 系统的标准 菜单栏和标 准工具栏。
要滚动标准 列表,系统 提供滚动条 和功能“首 页”、“上 一页”、“ 下一页”和 “末页”。 要查找列表 中某一模式 ,用户可以 选择“编辑 -> 查找...” 。 用户可以使 用下列特定 列表功能:
打印输出列 表
要打印屏幕 上显示的列 表,用户可 以选择“列 表 -> 打印”。 打印的标准 页眉与显示 的标准页眉 不同,它还 包含当前日 期:
标准列表的 用户界面
3 打印 标准列表示 例 (页 1) 中创建的标 准列表,其 结果为: 12.01.1996 Example for Standard List 1 ------------------------------------------------------------------------- ID Departure from Arrival at Time of Departure Time Arrival Time Flight ------------------------------------------------------------------------- +------+-----------------+------------------------+----------+ | 0017 | NEW YORK | SAN FRANCISCO | | | | 13:30:00 | 16:31:00 | 06:01:00 | +------+-----------------+------------------------+----------+ | 00 | SAN FRANCISCO | NEW YORK | | | | 09:00:00 | 17:21:00 | 05:21:00 | +------+-----------------+------------------------+----------+ | 0400 | FRANKFURT | NEW YORK | | | | 10:10:00 | 11:34:00 | 08:24:00 | +------+-----------------+------------------------+----------+ | 0026 | FRANKFURT | NEW YORK | | | | 08:30:00 | 09:50:00 | 08:20:00 | +------+-----------------+------------------------+----------+ SAP *** SAP *** SAP *** SAP *** SAP *** SAP Flight Information System International Connections 只有由于测 试原因需要 屏幕列表的 硬副本时, 才能使用本 打印方法。 关于如何打 印列表的详 细信息,参 见 打印列表 (页 Error! Not a valid link.) 。
保存列表
要保存显示 的列表,用 户可以选择 “列表 -> 保存”。出现下列主题:
将列表保存 在 SAPoffice 中
当选择“列 表 -> 保存 -> Office” 时,出现一 个对话框, 询问用户是 将显示的列 表存储在用 户的 Office 文件夹中还 是发送给另 一用户。
当选择“列 表 -> 保存 -> 报告树”时 ,出现一个 对话框,询 问用户是否 将显示的列 表保存在报 表树的适当 分支中。
将列表作为 本地文件保 存在演示服 务器中
选择“列表 -> 保存 -> 文件”时, 出现一个对 话框,询问 用户是否将 显示的列表 作为本地文 件保存,并 提供几个格 式选项。
格式选项为 :
不转换: 系统将文件 存储为文本 文件。 表格统计 : 系统在列之 间插入 tab 键。
RTF 格式: 系统存储格 式化为文本 处理的数据 。
如果用户以 RTF 格式存储 标准列表示 例 (页 1) 中创建的标 准列表并且 使用能读取 该格式的文 本处理程序 (如 MS WORD) 重新显示, 则列表显示 如下: 将列表保存 在报告树中
4
修改列表和 列标题
通常,可以 列表和列标 题创建为文 本元素(参 见 创建和更改 列表及列表 头 (页 Error! Not a valid link.) )。然而, 也可以在屏 幕上显示列 表时修改这 些表头。为 此,请选择 “系统 -> 列表 -> 列表头”。 页眉行现在 接受输入:
例如,使用 该功能将列 标题放置在 显示列表的 列之上。
保存更改。 系统将修改 后的列标题 另存为当前 登录语言文 本池中程序 的文本元素 。关于文本 元素的详细 信息,参见 处理文本摘 要 (页 Error! Not a valid link.) 。
自定义列表
可以修改标 准列表的结 构并创建单 个结构的列 表。使用 REPORT 语句选项以 及事件 TOP-OF-PAGE 和 END-OF-PAGE。 PROGRAM 语句与 REPORT 语句等价并 有相同的选 项。 可以作下列 修改:
如果列表包 括几页,则 可以分别定 义每页的结 构。关于如 何进行这一 操作的详细 信息,参见 多页列表 (页 7) 。
单个页眉
要分别定义 页眉的格式 ,必须在紧 随事件关键 字 TOP-OF-PAGE 的处理块中 定义:
语法
TOP-OF-PAGE. WRITE: ....
TOP-OF-PAGE 事件在系统 开始处理列 表新页时出 现。系统在 输出新页首 行之前处理 TOP-OF-PAGE 后面的语句 。关于事件 和处理块的 详细信息, 参见 通过事件控制 ABAP/4 程序流 (页 Error! Not a valid link.) 。
如果以后要 启动实际列 表处理,记 住要通过使 用合适的事 件关键字, 例如 START-OF-SELECTION, 结束处理块 (参见 定义处理块 (页 Error! Not a valid link.) )。 自定义页眉 出现在标准 页眉之下。 如果要取消 标准页眉, 请使用 REPORT 语句的 NO STANDARD PAGE HEADING 选项:
语法
REPORT 使用该语句 时,系统不 在报表 垂直滚动时 ,自定义页 眉与标准页 眉一样保持 可见。但是 ,自定义页 眉包括正常 列表行,因 此不能自动 符合窗口宽 度。 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 。输出如下 所示: 自定义页眉 包括六行。 程序标题来 自 SY-TITLE 系统字段, 页号来自 SY-PAGNO。 自定义页眉 与列表宽度 不等。 5 要确定输出 列表的宽度 ,请使用 REPORT 语句的 LINE-SIZE 选项。. 语法 REPORT 该语句根据 一行最多可 包含 255 个字符。但 是,如果要 打印列表, 请记住大多 数打印机不 能打印超过 132 个字符的列 表。如果要 在创建时直 接打印列表 ,则页宽必 须符合某种 现有打印格 式。否则, 系统就不能 打印该列表 (参见打印参数 (页 Error! Not a valid link.))。 一定不要选 择超过 132 字符的列表 宽度,除非 创建只用于 显示的列表 。 创建列表时 ,系统字段 SY-LINSZ 包含当前行 宽。要将列 表宽度调整 为当前窗口 宽度,参见 多页列表 (页 7) 。 使用 ULINE 语句(不带 AT 选项)创建 的水平线自 动适配自定 义列表宽度 。 REPORT SAPMZTST LINE-SIZE 40. WRITE: 'SY-LINSZ:', SY-LINSZ. ULINE. DO 20 TIMES. WRITE SY-INDEX. ENDDO. 程序创建下 列输出: 示例使用标 准页眉。如 果将 LINE-SIZE 值从 40 替换为 60 ,则输出如 下所示: 标准页眉和 下划线自动 适配列表宽 度。 确定页长 要确定输出 列表的页长 ,请使用 REPORT 语句的 LINE-COUNT 选项。 语法 REPORT 该语句用 如果将 记住页眉长 度是 确定页长时 ,应记住下 列各项: 确定列表宽 度 6 对于屏幕 输出,请使 用标准页长 以避免在屏 幕中间分页 。 对于打印 列表,则根 据打印机要 求设置页长 。应采用对 任何页长都 能产生合理 输出的方式 书写程序。 如果选择现 有打印格式 之外的页长 ,则不能在 创建时直接 打印。关于 打印格式的 详细信息, 参见 打印列表 (页 Error! Not a valid link.) 。 对于仅指 定页面设置 的表格形式 的列表使用 固定长度规 格。在为此 类列表编写 程序代码之 前,请检查 能否使用预 定义的 SAPscript 表格。关于 表格的详细 信息,参见 文档样式和页面设置维护 (页 Error! Not a valid link.) 。 下列程序旨 在说明 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 语句触发分 页则该事件 发生(参见 条件分页 – 定义行块 (页 8) )。在紧接 着 END-OF-PAGE 事件关键字 的处理块中 填充页脚的 行: 语法 END-OF-PAGE. WRITE: .... 如果为 REPORT 语句的 LINE-COUNT 选项中的脚 注保留行, 则系统只处 理紧接着 END-OF-PAGE 的处理块( 参见 确定页长 (页 5) )。 如果要以后 开始处理实 际列表,记 住要通过使 用合适的事 件关键字, 例如 START-OF-SELECTION, 结束紧接着 END-OF-PAGE 的处理块( 参见 定义处理块 (页 Error! Not a valid link.) )。 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. 7DO 6 TIMES. WRITE / SY-INDEX. ENDDO. 该程序包括 三个处理块 。关闭标准 页眉。将页 长设置为六 行,其中两 行留作页脚 。 列表包括三 页,每页六 行。每页由 自定义的两 行页眉、两 行实际列表 和两行页脚 组成。页脚 中显示的当 前页号来自 系统字段 SY-PAGNO 。 多页列表 如果在报表 中写入列表 输出页的行 数超过在 REPORT 语句 LINE-COUNT 选项中定义 的行数,则 系统自动创 建新页(参 见 确定页长 (页 5) )。每个新 页都包含为 报表定义的 页眉和页脚 (如果有的 话)。 除自动分页 外,可以使 用 NEW-PAGE 和 RESERVE 语句显式地 编码分页。 NEW-PAGE 语句的选项 允许分别设 置每页格式 。也需要 NEW-PAGE 语句在程序 内打印列表 (参见 打印列表 (页 Error! Not a valid link.) )。 下列主题说 明 要编程无条 件的分页, 请使用 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 语句之后, 没有输出。 编程分页 8 条件分页 – 定义行块 要在少于某 一页剩余行 数的条件下 执行分页, 请使用 RESERVE 语句: 语法 RESERVE 如果当前列 表页的最后 输出和页脚 之间剩余的 自由行数少 于 RESERVE 语句就这样 定义必须整 个输出的行 块。要查找 行块可能有 的附加实际 效果,参见 将输出定位 在行块的首 行 (页 15) 。 REPORT SAPMZTST LINE-SIZE 40 LINE-COUNT 8(2). END-OF-PAGE. ULINE. START-OF-SELECTION. DO 4 TIMES. WRITE / SY-INDEX. ENDDO. DO 2 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 事件和分页 。输出如下 : 第 3 页的三行组 成行块。 单页的标准 页眉 标准页眉包 括列表和列 标题(参见标准页眉 (页 2) .)。要影 响标准页眉 这些组件的 表现形式, 请使用 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。 关于基本和 辅助列表的 详细信息, 参见 交互式列表 (页 Error! Not a valid link.) 。 即使使用 REPORT 语句的 NO STANDARD PAGE HEADING 选项取消标 准页眉,也 能使用 WITH-TITLE 和 WITH-HEADING 激活单个组 件的显示。 因为 TOP-OF-PAGE 事件在新页 上处理,所 以 NEW-PAGE 语句不能影 响在该事件 中定义的页 眉显示(参 见 单个页眉 (页 4) )。 REPORT SAPMZTST LINE-SIZE 40. WRITE: 'Page', SY-PAGNO. 9NEW-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. 该程序创建 五页,分别 带有不同页 眉。将列表 表头标题文 本元素定义 为“标准页 眉”,列标 题定义为“ 列”。 第 1 和 5 页包含完整 的标准页眉 。第 2 页没有列表 表头。在第 3 页上,取消 整个页眉。 在第 4 页上,省略 列标题。 单页页长 要分别确定 每页的页长 ,请使用 NEW-PAGE 语句: 语法 NEW-PAGE LINE-COUNT 该语句将后 续页的页长 确定为 不能使用 NEW-PAGE 创建或更改 页脚。将 REPORT 语句中定义 的页脚(参 见 确定页长 (页 5) )保存为与 NEW-PAGE 语句无关。 对于实际列 表输出, 使用 NEW-PAGE 语句的 LINE-COUNT 选项时,请 参阅 确定页长 (页 5) 中的注意。 要将页长度 适配当前窗 口长度,请 将 REPORT SAPMZTST LINE-SIZE 40 LINE-COUNT 0(1). END-OF-PAGE. ULINE. START-OF-SELECTION. NEW-PAGE LINE-COUNT 5. DO 4 TIMES. WRITE / SY-INDEX. ENDDO. WRITE: / 'Next Loop:'. NEW-PAGE LINE-COUNT 6. DO 6 TIMES. WRITE / SY-INDEX. ENDDO. 程序创建 5 页,长度各 不相同。将 列表表头文 本元素定义 为“标准页 眉”。REPORT 语句为页脚 每页保留一 行。在 END-OF-PAGE 事件中将页 脚定义为水 平行。第一 条 NEW-PAGE 语句将页长 设置为 5,第二条 设置为 6。 10 因为以前没 有输出写入 列表,因此 第一条 NEW-PAGE 语句不开始 新页。标准 页眉每页使 用两行作为 列表表头。 页脚使用一 行。对于第 一个 DO 循环,每页 两行可用于 WRITE 输出。DO 循环内的所 有分页在列 表处理到达 页眉时自动 发生。第二 条 NEW-PAGE 从第 3 页到第 4 页创建分页 。这里不处 理 END-OF-PAGE 事件。对于 第二个 DO 循环,每页 三行可用于 WRITE 输出。自动 再次分页。 出现页脚。 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 被标记为注 释,所以该 程序创建没 有结尾的单 页: 系统在当前 窗口中显示 尽可能多的 行,即 12 行。在上面 的数字中, 12 行包含两行 自定义表头 行和 10 行实际列表 。在垂直滚 动时,页眉 保持可见。 如果删除 NEW-PAGE 语句前面的 星号并且保 持当前窗口 长度,则输 出如下: 根据 SY-SROWS ,列表分为 几页,每页 12 行。12 行中两行留 作页眉,两 行留作页脚 。在该列表 中,用户可 以使用“下 一页”显示 地滚动(例 如,到第 11页): 列表级的页 宽 不能更改列 表级内单个 页宽。只能 更改新列表 级的所有页 宽。为此, 请使用 NEW-PAGE 语句: 语法 NEW-PAGE LINE-SIZE 从新页开始 的所有列表 级宽度都为 如果将 在程序之内 滚动 在程序之内 ,可以垂直 和水平滚动 列表。使用 SCROLL 关键字。例 如,如果要 滚动到某页 以响应用户 输入,则从 程序内滚动 就很有意义 。 11SCROLL 语句只对完 成的列表生 效。如果在 列表的第一 条输出语句 之前使用该 语句,则不 影响该 列表 。如果在列 表的第一条 输出语句之 后使用 SCROLL, 则影响整个 列表,包括 以后的所有 输出语句。 在每条 SCROLL 语句之后, 可以查询 SY-SUBRC 以查看系统 是否成功。 如果系统成 功滚动则 SY-SUBRC 为 0 ;如果滚动 不可能则为 4 ,因为其超 过列表边界 。如果正在 使用几个列 表级,则 SY-SUBRC 也可能是 8,表明指 定的列表级 不存在(参 见 滚换ナ 列表 (页 Error! Not a valid link.) )。 SCROLL 语句允许 垂直滚动 要以当前窗 口大小垂直 滚动列表并 且与页长无 关,请使用 这条语句: 语法 SCROLL LIST FORWARD|BACKWARD [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 3 TIMES. SCROLL LIST FORWARD. ENDDO. 该报表创建 没有结尾页 的列表。在 DO 循环之内, 系统三次 SCROLL 语句。如果 当前窗口为 12 行(存储在 SY-SROWS 中),则程 序输出如下 : 应注意,实 际列表是以 SY-SROWS 减去表头行 数进行滚动 。用户可以 继续朝两个 方向滚动。 通过窗口滚 动窗口 水平滚动 要按页滚动 列表,即按 页长垂直滚 动列表,SCROLL 语句提供下 列选项: 滚动到某页 要滚动到某 页,请使用 SCROLL 语句的 TO 选项: 语法 SCROLL LIST TO FIRST PAGE | LAST PAGE | PAGE 不用 INDEX 选项,语句 将当前列表 滚动到首页 、尾页或 按页数滚动 要按页数滚 动列表,请 使用 SCROLL 语句的下列 选项: 语法 SCROLL LIST FORWARD | BACKWARD 不用 INDEX 选项时,语 句向前或向 后滚动 按页滚动 12 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 行。每页四 行用于页眉 和页脚。因 为 SCROLL 语句,该程 序的输出如 下: 列表从第 15 页开始显示 。由于 LINE 选项,实际 列表的前三 行滚动到页 眉以下。 滚动到列表 的页边缘 要水平滚到 列表的左或 右页边缘, 请使用 SCROLL 语句的下列 选项: 语法 SCROLL LIST LEFT | RIGHT [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 语句提供几 个选项。在 此情况下, 一列意味着 列表行一个 字符。 13滚动到某列 要滚动到某 列,请使用 SCROLL 语句的 TO COLUMN 选项: 语法 SCROLL LIST TO COLUMN 不用 INDEX 选项时,系 统显示从列 要按某一列 数滚动列表 ,请使用 SCROLL 语句的下列 选项: 语法 SCROLL LIST LEFT | RIGHT BY 不用 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。 因此,要定 位输出,只 能使用这些 主题中说明 的语句。不 要通过直接 给系统字段 赋值来定位 输出。在那 种情况下, SAP 不能保证系 统字段的内 容,因为这 样赋值不触 发合理性检 查。即使现 在,也可将 列号赋给页 外的 SY-COLNO, 但这样做毫 无意义。 14 绝对定位 指定绝对位 置之后,将 后续输出写 入在固定行 和列开始的 屏幕。 水平定位 要指定水平 输出位置, ABAP/4 提供两种方 法: WRITE 和 ULINE 语句的 AT 选项(参见 在屏幕上 位 WRITE 输出 (页 Error! Not a valid link.) )以及 POSITION 语句。POSITION 语句的语法 为: 语句 POSITION 该语句将水 平输出位置 和 SY-COLNO 系统字段设 置为 系统将 POSITION 语句或使用 AT 格式化的 WRITE 语句的输出 写入指定位 置,不管是 否有足够空 间。超出该 行的输出部 分被截断。 其他 WRITE 输出在下一 行开始。 垂直定位 如下指定垂 直输出位置 : 语法 SKIP TO LINE 该语句将垂 直输出位置 和 SY-LINNO 系统字段设 置为 使用 LINE 时,系统也 计算页眉和 页脚行。请 确认没有无 意改写页眉 和页脚行。 在页眉之下 定位输出 要将输出定 位到整个页 眉之后的第 一行,请使 用 BACK 语句: 语法 BACK. 如果该语句 不是紧跟 RESERVE 语句,则后 续输出出现 在页眉之下 。系统将 SY-COLNO 设置为 1 并根据页眉 的长度设置 SY-LINNO。 与 RESERVE 语句组合时 ,其他规则 也适用(参 见 将输出定位 在行块的首 行 (页 15) )。 如果在 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. 绝对定位示 例 15该程序创建 下列列表页 : 系统将 SY-COLNO 和 SY-LINNO 的初值分配 给字段 X 和 Y。应注意 ,该赋值实 际发生在 START-OF-SELECTION 事件中(参 见定义处理块 (页 Error! Not a valid link.) )。初始 输出位置就 是第一各表 头行的位置 。输出写到 此处。SKIP TO LINE 和 POSITION 在列 20、行 10 中放一个“ *”。SKIP TO LINE 和 AT 产生下横线 。最后,BACK 将输出位置 设置到两行 页眉下的列 1、行 3。 相对定位 相对定位参 考以前写入 列表的输出 。某些相对 定位自动发 生。使用无 定位的 WRITE 时,在上一 输出之后空 一列出现输 出。如果在 当前行没有 足够空间, 则换行。不 使用定位的 ULINE 和 SKIP 语句产生换 行。 要编程相对 定位,请将 SY-COLNO 和 SY-LINNO 系统字段与 绝对定位 (页 14) 中说明的语 句组合使用 或者使用下 述相对定位 语句。 产生换行 (页 15) 将输出定位 到其它输出 之下 (页 15) 将输出定位 在行块的首 行 (页 15) 相对定位的 示例 (页 15) 产生换行 要产生换行 ,请在 WRITE、 ULINE 或 NEW-LINE 语句的 AT 选项中使用 反斜杠。 语法 NEW-LINE. 该语句将输 出定位在新 行中,将 SY-COLNO 设置为 1 并且将 SY-LINNO 加 1。如果自 最后换行之 后将输出写 入屏幕,则 系统只执行 该语句。NEW-LINE 不创建空行 。要创建空 行,请使用 SKIP 语句(参见 创建空行 (页 23) )。 在 NEW-PAGE 语句和事件 开始时发生 自动换行。 可以将 WRITE 输出定位到 上一 WRITE 输出的列中 。请使用 WRITE 语句的格式 化选项 UNDER: 语法 WRITE 系统从开始 输出字段 务必调整垂 直位置以免 改写上一输 出。 参考字段 将输出定位 在行块的首 行 要将下一输 出行定位到 通过 RESERVE 语句定义的 行块的首行 (参见 条件分页 – 定义行块 (页 8) ), 请按如下格 式使用 BACK 语句: 语法 RESERVE. ..... BACK. 如果 BACK 紧随 RESERVE, 则后续输出 出现在 RESERVE 之后的第一 行中。例如 ,可以使用 该语句在某 循环之内的 输出之后跳 转回某行。 有关事例, 参见 相对定位的 示例 (页 15) 。 相对定位的 示例 第一个示例 显示如何通 过自定义页 眉创建纵向 列表。 将输出定位 到其它输出 之下 16 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( 参见 格式化选项 (页 Error! Not a valid link.) )。 第二个示例 显示紧随 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 提供几个格 式化选项。 格式输出 17在 格式化选项 (页 Error! Not a valid link.) 中对 WRITE 语句的格式 化选项加以 说明。 其他重要的 格式化选项 ,例如,确 定输出颜色 以及使列表 字段接受输 入的选项, 都是 FORMAT 语句的格式 化选项。这 些将在后面 的主题中加 以说明。FORMAT 语句的全部 选项都可作 为 WRITE 语句的格式 化选项。 FORMAT 语句 要在程序中 静态设置格 式化选项, 请按如下格 式使用 FORMAT 语句: 语法 FORMAT FORMAT 语句中设置 的格式化选 项 要在运行时 动态设置格 式化选项, 请按如下格 式使用 FORMAT 语句: 语法 FORMAT 系统将变量 如果对于紧 随 FORMAT 语句之后的 WRITE 语句使用相 同的格式化 选项,则 WRITE 语句的设置 将覆盖当前 输出的 FORMAT 语句的相应 选项。 对于每个新 事件,系统 将所有格式 化选项复位 到缺省值。 关于事件列 表,参见 事件及其事 件关键字 (页 Error! Not a valid link.) 。所有格式 化选项都有 缺省值 OFF,INTENSIFIED 选项除外( 参见 列表中的颜 色 (页 17) )。 要一次性将 所有格式化 选项设置为 OFF,请 使用: 语法 FORMAT RESET. 下列主题说 明可用的格 式化选项。 列表中的颜 色 FORMAT 语句的选项 COLOR、 INTENSIFIED 和 INVERSE 影响输出列 表的颜色。 要在程序中 设置颜色, 请使用: 语法 FORMAT COLOR 语法 FORMAT COLOR = COLOR 设置行背景 的颜色。而 且,如果设 置 INVERSE ON ,则系统将 更改前景 颜 色而不是背 景颜色。 对于 3 或 COL_TOTAL 5 或 COL_POSITIVE 0 1 2 3 4 5 6 7 取 决于 GUI 灰 蓝 淡 灰 黄 蓝 绿 绿 红 紫 背景 标题 列表正文 总计 关键字列 正门限值 负门限值 组级别 18 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 系统的颜色 稍有不同。 在列表中使 用颜色的示 例 本例显示如 何在列表中 使用颜色以 强调输出。 19 下列报表可 以连接到逻 辑数据库 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 以获取与其 他输出相同 的前景颜色 。 在联机帮助 中,由于技 术原因,该 列表的颜色 与 R/3 系统的颜色 稍有不同。 可以使列表 中的输出字 段作好接受 输入的准备 。用户可以 在屏幕上更 改这些字段 ,然后打印 这些更改, 或者使用交 互列表处理 中的 READ LINE 语句处理这 些更改(参 见 交互式列表 (页 Error! Not a valid link.) )。如果使 变量内容在 输出列表中 接受输入, 则用户输入 的更改不影 响变量自身 。 要在程序中 将输出字段 设置为“准 备输入”, 请按如下格 式使用 FORMAT 语句: 语法 FORMAT INPUT [ON|OFF]. 使字段可接 受输入 20要在运行时 将输出字段 设置为“准 备输入”, 请使用: 语法 FORMAT INPUT = . 使用 ON 选项(或者 不等于 0 )将后续输 出格式化为 输入字段。 输入字段背 景和前景颜 色与列表其 余字段不同 。对于输入 字段,选项 COLOR、 INVERSE 和 HOTSPOT 无效。INTENSIFIED 选项更改输 入字段的前 景颜色。 通过将水平 行格式化为 输入字段, 可以使其接 受输入。但 是,使用 SKIP 创建的空行 不能接受输 入。 REPORT SAPMZTST. WRITE 'Please fill in your name before printing:'. WRITE / ' Enter name here ' INPUT ON. ULINE. WRITE 'You can overwrite the following line:'. FORMAT INPUT ON INTENSIFIED OFF. ULINE. FORMAT INPUT OFF INTENSIFIED ON. 在本程序中 ,WRITE 语句直接接 受 INPUT ON 格式以及使 用 FORMAT 语句格式化 的 ULINE 行。将标题 定义为文本 元素。输出 显示如下: 由于 INTENSIFIED OFF,第 二个输入字 段的前景颜 色不同于第 一个。用户 可以在屏幕 上输入这些 输入字段, 例如: 将字段输出 为热点 热点是输出 列表的特殊 区域。如果 用户单击热 点字段,则 触发事件( 例如,AT LINE-SELECTION) 。对于未定 义为热点的 字段,要触 发某一事件 ,必须双击 鼠标或按某 一功能键。 关于列表处 理期间的事 件的详细信 息,参见 交互式列表 (页 Error! Not a valid link.) 。 要将某一区 域输出为热 点,请使用 FORMAT 语句的下列 选项: 语法 FORMAT HOTSPOT [ON|OFF]. 要在运行时 将字段设置 为热点,请 使用: FORMAT HOTSPOT = 如果设置 INOPUT ON,则不 能使用 HOTSPOT 选项,因为 使用 HOTSPOT ON 之后,无法 将光标定位 在输入字段 上。而且不 能将使用 ULINE 创建的水平 行和使用 SKIP 创建的空行 格式化为热 点。 REPORT SAPMZTST. INCLUDE 特殊输出格 式 关于 WRITE 语句所有格 式化选项的 摘要,参见 格式化选项 (页 Error! Not a valid link.) 。 当前主题说 明一些特殊 格式化选项 。这些选项 按照在特殊 数据库表格 中的某条目 格式化输出 。通常,当 定制应用程 序时,客户 维护这些表 格(关于定 制的详细信 息,参见文 档 定制 (页 Error! Not a valid link.) 。 可以使用下 列输出格式 : 国家和用户 特有的输出 格式 。使用下列 语句可以在 程序中更改 这些设置: 语法 SET COUNTRY 对于 如果 如果 维护表格 T005X 是定制工作 的一部分。 但是,可以 使用“系统 -> 服务 -> 表格维护” 显示或更改 条目。 REPORT SAPMZTST LINE-SIZE 40. DATA: NUM TYPE P DECIMALS 3 VALUE '123456.7'. ULINE. WRITE: / 'INITIAL:'. WRITE: / NUM, SY-DATUM. ULINE. SET COUNTRY 'US'. WRITE: / 'US, SY-SUBRC:', SY-SUBRC. WRITE: / NUM, SY-DATUM. ULINE. SET COUNTRY 'GB'. WRITE: / 'GB, SY-SUBRC:', SY-SUBRC. WRITE: / NUM, SY-DATUM. ULINE. SET COUNTRY 'DE'. WRITE: / 'DE, SY-SUBRC:', SY-SUBRC. WRITE: / NUM, SY-DATUM. ULINE. SET COUNTRY 'XYZ'. WRITE: / 'XYZ, SY-SUBRC:', SY-SUBRC. WRITE: / NUM, SY-DATUM. ULINE. SET COUNTRY SPACE. WRITE: / 'SPACE, SY-SUBRC:', SY-SUBRC. 22WRITE: / NUM, SY-DATUM. ULINE. 本程序使用 不同的格式 选项输出压 缩数字 NUM 和系统字段 SY-DATUM。 第一和最后 的输出是用 户特有的。 对于所有的 其他输出, 系统读取表 格 T005X。 它不查找条 目“XYZ” 而是自己设 置输出格式 。T005X 中的条目是 客户特有的 。 货币特有的 输出格式 要根据货币 格式化数字 字段的输出 ,请使用 WRITE 语句的 CURRENCY 选项: 语法 WRITE 该语句根据 货币 货币的输出 格式不依赖 于程序中可 能存在的数 字的小数位 数。系统只 使用数字顺 序。该数字 顺序代表以 所使用的最 小货币单位 指定的数额 ,例如美国 美圆(USD) 中的分和比 利时法郎( BEF)中 的法郎。由 于 ABAP/4 程序处理货 币量,因此 建议使用不 带小数位的 数据类型 P。 REPORT SAPMZTST LINE-SIZE 40. DATA: NUM1 TYPE P DECIMALS 4 VALUE '12.3456', NUM2 TYPE P VALUE '123456'. SET COUNTRY 'US'. WRITE: 'USD', NUM1 CURRENCY 'USD', NUM2 CURRENCY 'USD', / 'BEF', NUM1 CURRENCY 'BEF', NUM2 CURRENCY 'BEF', / 'KUD', NUM1 CURRENCY 'KUD', NUM2 CURRENCY 'KUD'. 本程序定义 两个压缩数 字 NUM1 和 NUM2, 包含相同数 字顺序,但 小数位不同 。这些数字 出现在几种 货币的输出 中: 对于每种货 币,因为只 参考数字顺 序,因此 NUM1 和 NUM2 的输出格式 相同。因为 最小单位是 分即百分之 一美圆,因 此货币 US Dollar (USD) 显示为两个 小数点的缺 省设置。对 于比利时法 郎 (BEF), TCURX 中的 CURRDEC 设置为 0,因为比 利时法郎无 最小单位。 科威特第纳 尔 (KUD) 有千分之一 单位因此有 三个小数位 (CURRDEC 为 3)。 单位特有的 输出格式 可以根据某 一单位格式 化类型 P 字段。例如 ,数量应该 没有小数位 ,重量规格 应该有三个 小数位,等 等。为此, 请使用 WRITE 语句的 UNIT 选项: 语法 WRITE 该语句根据 单位 设置小数位 。 的内容必须 是列 MSEHI 中数据库表 格 T006 中的条目。 列 DECAN 中的条目然 后确定要显 示的字段 如果 统只使用 该选项。 REPORT SAPMZTST LINE-SIZE 40. DATA: NUM1 TYPE P DECIMALS 1 VALUE 1, NUM2 TYPE P DECIMALS 4 VALUE '2.5'. SET COUNTRY 'US'. 23WRITE: 'KG', NUM1 UNIT 'KG', NUM2 UNIT 'KG', / 'PC', NUM1 UNIT 'PC', NUM2 UNIT 'PC'. 本程序定义 两个压缩数 字,一个小 数位的 NUM1 和四个小数 位的 NUM2。 如果单位“ KG”(千 克)在表格 T006 中有三个小 数位并且“ PC”(件 数)在表格 T006 中有 0 个小数位, 则输出显示 如下: 因为 NUM1 少于三个小 数位,所以 系统忽略 NUM1 的选项 UNIT ‘KG’ 。UNIT 'PC' 选项缩短 NUM1 的输出到 0 个小数位。 对于 NUM2, 系统忽略选 项 UNIT 'PC', 因为小数位 不等于 0,否则将 被截断。 要创建空行 ,请按如下 格式使用 SKIP 语句: 语法 SKIP [ 系统从当前 行开始,向 当前行中写 入 如果当前 页上剩余行 数太小,则 SKIP 语句产生分 页,如果存 在页脚,则 显示出 来。 系统将下一 输出定位到 新页页眉下 的第一行。 在页开始 处,如果该 页是列表级 的第一页或 者该页由 NEW-PAGE 语句创建的 , 则系统只 执行上述语 句。对于其 他页,系统 在页开始处 忽略该语句 。 如果上述 语句是最后 列表页的最 后的输出语 句(即再没 有其他 WRITE 或 ULINE 语句),则 系统将其忽 略。 在缺省设置 中,系统不 输出使用 WRITE 带 AT 选项创建的 任何空行。 空行是只包 含字符串的 行且每个字 段只包括空 字符。但是 ,如果想在 输出字符串 时要输出 WRITE 语句创建的 空行,则请 使用该语句 : 语法 SET BLANK LINES ON|OFF. 使用 ON 选项,系统 在输出中不 再取消使用 WRITE 语句创建的 空行。要复 位缺省设置 ,请使用 OFF 选项。 例如,使用 该语句在列 表中提供空 表格条目。 注意,除非 事先指定 SET BLANK LINES ON,否则 系统显示不 包含任何内 容的空行, 例如,空输 入字段或者 空复选框。 创建空行 下列程序创 建 5 个空行。在 6 行中显示输 出 '*****' 。 REPORT SAPMZTST. SKIP 5. WRITE '*****'. 下列程序不 创建任何空 行。在首行 显示输出 '*****'。 SET BLANK LINES OFF 语句只用于 强调缺省设 置。 REPORT SAPMZTST. SET BLANK LINES OFF. DO 5 TIMES WRITE / ' '. ENDDO: WRITE '*****'. 因为使用 SET BLANK LINES ON 语句,所以 下面的程序 创建 5 空行。在第 6 行显示输出 '*****' 。 REPORT SAPMZTST. 24SET BLANK LINES ON. DO 5 TIMES WRITE / ' '. ENDDO. SET BLANK LINES OFF. WRITE / '*****'. ABAP/4 提供创建水 平和垂直线 的几种可能 性。关于相 应语句的列 表,参见 输出屏幕上 的线和空行 (页 Error! Not a valid link.) 。 系统自动连 接在连接处 和框架相交 的线。如果 在该方向上 至少一条线 没有空字符 或者空行分 隔该线,则 线相交。根 据某点处相 交线的类型 和数目,可 以画下列线 段。 关于自动连 线的示例, 请在任何系 统中调用 SHOWLINE 报表。 要防止系统 意外的连线 ,可以使用 特殊线: 注意在该上 下文中,页 眉和页脚占 页的数行。 如果忘记创 建空行可能 导致不需要 的连线。例 如,在标准 页眉后的首 行中输出垂 直线将自动 连接这些线 到页眉的下 划线。 可以结合不 同的可用线 段以定义列 表的格式。 下列示例显 示 下例显示如 何创建水平 和垂直线。 REPORT SAPMZTST NO STANDARD PAGE HEADING. SKIP TO LINE 3. ULINE AT 2(1). WRITE 4 '-'. WRITE 6 '--'. WRITE 9 '---'. ULINE AT 12(4). SKIP TO LINE 1. POSITION 18. WRITE '|'. SKIP TO LINE 3. DO 4 TIMES. NEW-LINE. POSITION 18. WRITE '|'. ENDDO. 输出显示如 下: 第一条 ULINE 语句创建一 列的水平线 。第一条 WRITE 语句的连字 符显示为正 常输出字段 。第二条 WRITE 语句的连字 符创建两列 宽的直线。 下面三个连 字符与 ULINE 语句一起创 建七列宽的 直线。 输出的第一 个 '|' 字符在第一 行中创建垂 直线。其他 四个 '|' 字符创建四 条线段长的 直线,从第 3 行开始。 直线 画线、框架 和网格 25角 下面的示例 显示如何创 建不同的角 。 REPORT SAPMZTST NO STANDARD PAGE HEADING. WRITE '--'. WRITE / '|'. SKIP TO LINE 1. ULINE AT 5(6). NEW-LINE. WRITE 10 '|'. SKIP TO LINE 4. WRITE: '| |', / '----------'. 输出如下: 垂直线的终 点与水平线 的终点会合 处,都出现 角。 T 型交叉 下面示例显 示如何创建 不同的 T 交叉。 REPORT SAPMZTST NO STANDARD PAGE HEADING. WRITE '---'. WRITE /2 '| |'. ULINE AT /5(8). SKIP TO LINE 4. DO 3 TIMES. WRITE '|'. NEW-LINE. ENDDO. SKIP TO LINE 5. WRITE '---------'. SKIP TO LINE 4. ULINE AT 6(10). WRITE 15 '|' . 输出如下: 直线终点与 直线垂直相 交处,都出 现 T 型交叉。 十字交叉 下例显示如 何创建十字 相交。 REPORT SAPMZTST NO STANDARD PAGE HEADING. WRITE ' |'. WRITE /'-------'. WRITE /' |'. 26SKIP TO LINE 1. DO 3 TIMES. WRITE 12 SY-VLINE. NEW-LINE. ENDDO. SKIP TO LINE 2. ULINE AT 12(1). 输出如下: 如果两直线 交叉,则出 现十字相交 。 使用特殊线 如果使用封 闭嵌合框架 或者封闭层 次结构表示 式,则可能 要将某些线 段隔开,即 使没有插入 空字符或空 行的空间。 在这种情况 下,可以使 用在 INCLUDE 程序 语法 WRITE 要在程序中 使用特殊线 ,必须在程 序中包括 INCLUDE 程序 系统在输出 列表中以定 义的方法显 示特殊线。 直线仅在实 际相交的地 方连接。系 统并不能自 动延长特殊 线以使其相 交。 输出特殊线 的最简单办 法就是使用 现有的关键 字结构(参 见 通过语句结 构使用 WRITE (页 Error! Not a valid link.) )。从屏幕 “集成 WRITE 语句”选择 单选按钮“ 线”,然后 选择“显示 ”。出现下 列对话框: 它包含所有 可用的特别 线,非常容 易就能将其 包括在程序 代码中。 以下程序一 方面显示如 何使用特殊 线创建封闭 图案。另一 方面,也显 示如何在列 表中动态编 程线。 REPORT SAPMZTST NO STANDARD PAGE HEADING LINE-SIZE 60. INCLUDE 编程框架 可以使用 ABAP/4 中可用的线 类型编程框 架。下面的 样本程序定 义宏 WRITE_FRAME ,可以取代 WRITE REPORT SAPMZTST NO STANDARD PAGE HEADING LINE-SIZE 60. DATA: X TYPE I, Y TYPE I, L TYPE I. DEFINE WRITE_FRAME. X = SY-COLNO. Y = SY-LINNO. WRITE: '|' NO-GAP, &1 NO-GAP, '|' NO-GAP. L = SY-COLNO - X. Y = Y - 1. SKIP TO LINE Y. POSITION X. ULINE AT X(L). Y = Y + 2. SKIP TO LINE Y. POSITION X. ULINE AT X(L). Y = Y - 1. X = SY-COLNO. SKIP TO LINE Y. POSITION X. END-OF-DEFINITION. SKIP. WRITE 'Demonstrating'. WRITE_FRAME 'dynamic frames'. WRITE 'in'. WRITE_FRAME 'ABAP/4'. WRITE 'output lists.'. 上面程序中 定义的宏 WRITE_FRAME 将在下面的 输出中介绍 。关于宏的 详细信息, 参见 定义和调用宏 (页 Error! Not a valid link.) 。 可以使用 ABAP/4 中可用的行 类型为表格 类型的列表 编程网格。 下面的样本 程序定义两 个宏 NEW_GRID 和 WRITE_GRID。 NEW_GRID 用于初始化 网格和网格 内部的换行 。可以使用 WRITE_GRID 取代 WRITE REPORT SAPMZTST LINE-SIZE 60 NO STANDARD PAGE HEADING. TABLES SPFLI. DATA: X TYPE I, Y TYPE I, L TYPE I. 编程网格 28TOP-OF-PAGE. WRITE 3 'List of Flights in a Dynamic Grid' COLOR COL_HEADING. ULINE. START-OF-SELECTION. DEFINE NEW_GRID. Y = SY-LINNO. Y = Y + 2. SKIP TO LINE Y. X = SY-COLNO. POSITION X. WRITE '|'. END-OF-DEFINITION. DEFINE WRITE_GRID. X = SY-COLNO. Y = SY-LINNO. POSITION X. WRITE: &1, '|'. L = SY-COLNO - X + 1. X = X - 2. Y = Y + 1. SKIP TO LINE Y. POSITION X. ULINE AT X(L). Y = Y - 1. X = SY-COLNO. SKIP TO LINE Y. POSITION X. END-OF-DEFINITION. GET SPFLI. NEW_GRID. WRITE_GRID: SPFLI-CARRID, SPFLI-CONNID, SPFLI-CITYFROM, SPFLI-CITYTO. 在该程序中 定义的宏 NEW_GRID 和 WRITE_GRID 的功能将在 下面的输出 中介绍。关 于宏的详细 信息,参见 定义和调用宏 (页 Error! Not a valid link.) 。报表连接 到逻辑数据 库 F1S。在 选定屏幕输 入相应值后 ,输出显示 如下: 注意最上端 网格线来自 TOP-OF-PAGE 后语句块中 的 ULINE 语句。系统 自动将列表 正文的垂直 线连接到该 线。 确定页的哪 一部分可以 水平滚动 可以可 由用户或从 程序中水平 滚动的页面 部分(参见 在程序之内 滚动 (页 10) )。 下列主题说 明: 可以将这两 种情况结合 起来。 从水平滚动 中排除行 要从水平滚 动中排除某 行(例如, 页眉或注释 行),请采 用如下格式 为该行定义 换行: 语法 NEW-LINE NO-SCROLLING. 紧随该语句 之后的行不 能水平滚动 。但是,它 可以垂直滚 动。 要撤消上述 语句,请使 用: 语法 NEW-LINE SCROLLING. 该语句只有 在 NEW-LINE NO-SCROLLING 之后无输出 行的情况下 才有意义。 REPORT SAPMZTST NO STANDARD PAGE HEADING LINE-COUNT 3 LINE-SIZE 140. START-OF-SELECTION. DO 3 TIMES. WRITE: / 'SY-INDEX:'. DO 10 TIMES. WRITE SY-INDEX. 29 ENDDO. ENDDO. NEW-LINE NO-SCROLLING. ULINE AT 20(20). NEW-LINE NO-SCROLLING. WRITE AT 20 '| **** Fixed! **** |'. NEW-LINE NO-SCROLLING. ULINE AT 20(20). DO 3 TIMES. WRITE: / 'SY-INDEX:'. DO 10 TIMES. WRITE SY-INDEX. ENDDO. ENDDO. 本程序创建 不带页眉和 页脚的三页 ,每页三行 。因为 NEW-LINE NO-SCROLLING, 第二页的三 行不能滚动 。程序输出 如下: 如果用户滚 动到右边, 输出如下: 第一和第三 页的行滚动 固定行。 要确定可水 平滚动的区 域的左边界 ,请使用: 语法 SET LEFT SCROLL-BOUNDARY [COLUMN 不带 COLUMN 选项时,当 前页可滚动 区的左边界 设置为输出 位置;带 COLUMN 选项时,则 设置为位置 上述语句适 用于整个当 前页并且只 适用于当前 页。必须对 每个新页重 复该语句, 否则系统使 用缺省值( 左列表页边 )。 要为列表的 所有页设置 相同的可滚 动区,可以 执行该语句 ,例如在 TOP-OF-PAGE 事件中。 REPORT SAPMZTST NO STANDARD PAGE HEADING LINE-COUNT 3 LINE-SIZE 140. START-OF-SELECTION. DO 3 TIMES. WRITE: /10 'SY-INDEX:'. DO 10 TIMES. WRITE SY-INDEX. ENDDO. ENDDO. SET LEFT SCROLL-BOUNDARY COLUMN 20. DO 3 TIMES. WRITE: / 'SY-INDEX:'. DO 10 TIMES. WRITE SY-INDEX. ENDDO. ENDDO. SET LEFT SCROLL-BOUNDARY COLUMN 10. 水平滚动的 左边界 30本程序创建 三行的两页 ,每页没有 页眉和页脚 。第一条 SET 语句影响第 一页,因为 在第二个 DO 循环中的第 一条 WRITE 语句之前不 自动发生分 页。第二条 SET 语句影响第 二页。程序 输出如下: 如果用户滚 动到右边, 则输出如下 : 首页的可滚 动区不同于 第二页的可 滚动区,它 在左页边的 固定区域下 面的不同位 置消失。 因篇幅问题不能全部显示,请点此查看更多更全内容. START-OF-SELECTION. WRITE 'Now comes a'. FORMAT HOTSPOT ON COLOR 5 INVERSE ON. WRITE 'HOTSPOT'. FORMAT HOTSPOT OFF COLOR OFF. AT LINE-SELECTION. WRITE / 'New list AT-LINE-SELECTION'. SKIP. WRITE 'This is also a hotspot:'. WRITE ICON_LIST AS ICON HOTSPOT. 21在本程序中 ,首行的 START-OF-SELECTION 事件部分格 式化为热点 。标准页眉 定义为文本 元素。如果 用户将鼠标 移动到输出 的 HOTSPOT 单词上,则 鼠标指针更 改为手形: 单击触发事 件 AT-LINE-SELECTION。 在该事件中 ,程序创建 包含其他热 点的辅助列 表。辅助列 表中的热点 为图标: 关于 AT-LINE-SELECTION 事件和辅助 列表的详细 信息,参见 交互式列表 (页 Error! Not a valid link.) 。
。 INCLUDE 程序
Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务