一、标准列表结构
(1)标准页眉:标准页眉至少包括两行标准标题。标准标题的首行包含列表表头和页号。第二行由水平线组成。执行程序时,列表表头存储在系统字段SY-TITLE中。如果需要,可以在标准标题中包括最多四行列头和另一条水平线。
(2)标准页
(3)标准列表的宽度
二、修改列表和列标题
(1)自定义列表
可以修改标准列表的结构并创建单个结构的列表。使用REPORT语句选项以及事件TOP-OF-PAGE和END-OF-PAGE。PROGRAM语句与REPORT语句等介并有相同的选项。如果列表包括几页,则可以分别定义每页的结构。
---单个页眉:要分别定义页眉的格式,必须在紧随事件关键字TOP-OF-PAGE的处理块中定义,
语法:
TOP-OF-PAGE事件在系统开始处理列表新页时出现。系统在输出新页首行之前处理TOP-OF-PAGE后面的语句。如果要取消标准页眉,使用语法:REPORT <rep> NO STANDARD PAGEHEADING.使用该语句时,系统不在报表<rep>列表上显示标准页眉。
TOP-OF-PAGE.
WRITE:
ULINE.
WRITE:
ULINE.
START-OF-SELECTION.
DO
ENDDO.
报表程序不使用标准页眉,而是使用 TOP-OF-PAGE 之后的自定义页眉。要显式结束TOP-OF-PAGE处理块,必须指定事件关键字 START-OF-SELECTION。
(2)确定列表宽度
WRITE:
ULINE.
DO
ENDDO.
(3)确定页长
WRITE:
SKIP.
DO
ENDDO.
该程序将页长确定为四行。使用标准页眉。假定标准页眉 包括两行列表表头:
JESSE的ABAP程序
SY-LINCT:
JESSE的ABAP程序
JESSE的ABAP程序
JESSE的ABAP程序
(4)定义页脚
要定义页脚,使用END-OF-PAGE事件。在处理列表页时,如果系统到达页脚保留行,或者如果RESERVE语句触发分布则该事件发生。在紧接着END-OF-PAGE事件关键字的处理块中填充页脚的行:
语法
TOP-OF-PAGE.
WRITE:
ULINE
END-OF-PAGE.
ULINE.
WRITE:
START-OF-SELECTION.
DO
ENDDO.
该程序包括三个处理块。关闭标准页眉。将页长设置为六行,其中两行留作页脚。列表包括三页,每页六行。每页由自定义的两行页眉、两行实际列表和两行页脚组成。页脚中显示的当前页号来自系统字段SY-PAGNO 。运行结果如下:
Page with Header and Footer
Page with Header and Footer
Page with Header and Footer
多页列表
如果在报表中写入列表输出页的行数超过在REPORT语句LINE-COUNT选项中定义的行数,则系统自动创建新页。每个新页都包含为报表定义的页眉和页脚(如果有的话)。除自动分布外,可以使用NEW-PAGE和RESERVE语句显式地编码分布。NEW-PAGE语句的选项允许分别设置每页格式。也需要NEW-PAGE语句在程序内打印列表。
无条件分页
TOP-OF-PAGE.
WRITE:
ULINE
START-OF-SELECTION.
DO
ENDDO.
条件分页
RESERVE <n> LINES.
END-OF-PAGE.
ULINE.
START-OF-SELECTION.
DO
ENDDO.
DO
ENDDO.
RESERVE
WRITE:
该样本程序标准页眉的列表头定义为“标准页眉”。REPORT 语句将页长确定为八行 ,两行用于标准页眉,另外两行为页脚保留。页脚包括水平行和空行 。因此,输出的实际列表,每页留下四行。第一个 DO 循环填充四行,然后发生END-OF-PAGE 事件,其后系统自动开始新页。在第二个 DO 循环之后, 因为页上剩余的自由行 数少于三, 因此 RESERVE语句触发 END-OF-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语句的NOSTANDARD PAGEHEADING选项取消标准页眉,也能使用WITH-TITLE和WITH-HEADING激活单个组件的显示。
WRITE:
NEW-PAGE
WRITE:
NEW-PAGE
WRITE:
NEW-PAGE
WRITE:
NEW-PAGE
WRITE:
该程序创建五页,分别带有不同页眉。将列表表头标题文本元素定义为“标准页眉”,列标题定义为“列”。
第 1 和 5 页包含完整的标准页眉 。第 2 页没有列表表头。在第 3 页上,取消整个页眉。 在第 4 页上,省略列标题。
单页页长
要分别确定每页的页长,请使用NEW-PAGE语句:
NEW-PAGE LINE-COUNT<length>."该语句将后续的页长确定为<length>。可以是变量。如果设置为0,则系统使用标准页长。页眉是页的部分因此也是页长的部分。要将页长适配当前窗口长度,将值设置为SY-SROWS.
列表级的页宽
NEW-PAGE LINE-SIZE <width>.从新页开始的所有列表级宽度都为<width>,而不是REPORT语句中定义的宽度。
通过窗口滚动窗口
SCROLL LIST FORWARD|BACKWRAD[INDEX<idx>].不带INDEX选项时,该语句以当前窗口大小向前或向后滚动当前列表。使用INDEX选项时,系统以列表级<idx>滚动列表。
TOP-OF-PAGE.
WRITE:
ULINE.
START-OF-SELECTION.
DO
ENDDO.
DO
ENDDO.
按页滚动
SCROLL LIST TO FIRST PAGE|LASTPAGE|PAGE<pag>[INDEX<idx>][LINE<lin>].
不用INDEX选项,语句将当前列表滚动到首页、尾页或<pag>页。使用INDEX选项,则系统滚动列表级<idx>的列表。
DATA:
TOP-OF-PAGE.
WRITE:
ULINE.
END-OF-PAGE.
ULINE.
WRITE:
START-OF-SELECTION.
DO
ENDDO.
SCROLL
列表从第 15 页开始显示 。由于LINE 选项,实际列表的前三行滚动到页眉以下。
滚动到列表的页边缘
语法:
SCROLL LIST LEFT|RIGHT [INDEX<idx>].
按列滚动
SCROLL LIST TO COLUMN <col>[INDEX<idx>]
TOP-OF-PAGE.
WRITE:
ULINE.
START-OF-SELECTION.
DO
ENDDO.
SCROLL
三、列表页面设置
定位输出
(1)绝对定位:
POSITION <col>."水平定位该语句将水平输出位置和SY-COLNO系统字段设置为<col>.
SKIP TO LINE<n>."垂直定位该语句将垂直输出位置和SY-LINNO系统字段设置为<lin>.
BACK. "将输出定位到整个页眉之后的第一行
DATA:
X
TOP-OF-PAGE.
WRITE:
ULINE.
START-OF-SELECTION.
SKIP
POSITION
X
WRITE:
SKIP
ULINE
BACK.
X
WRITE:
(2)相对定位
产生换行,要生产换行,在WRITE,ULINE或NEW-LINE语句的AT选项中使用反斜杠。
NEW-LINE "该语句将输出定位在新行中,将SY-COLNO设置为1并且将SY-LINNO加1.
WRITE <f> UNDER<g>."系统从开始输出字段<g>的同一列中开始输出<f>。该语句不限于当前页。
RESERVE. ... BACK. "如果BACK紧随RESERVE,则后续输出出现在RESERVE之后的第一行中。
DATA
WRITE
X
ULINE
RESERVE
DO
ENDDO.
X
BACK.
WRITE
输出前两行之后,RESERVE 语句用于将后续五行定义为块。紧随 BACK 之后的输出写入到块的第一行。请注意,如何使用SY-COLNO 系统字段给第一行加下划线以及如何定位最后的WRITE输出。
输出如下:
Some numbers:
格式输出:
FORMAT <option1>[ON|OFF]<option2> [ON|OFF] ....
使字段可接受输入
FORMAT INPUT [ON|OFF]. "要在运行时将输出字段设置为“准备输入”。
WRITE
WRITE
ULINE.
WRITE
FORMAT
ULINE.
FORMAT
将字段输出为热点
FORMAT HOTSPOT [ON|OFF]
INCLUDE
START-OF-SELECTION.
WRITE
FORMAT
WRITE
FORMAT
AT
WRITE
SKIP.
WRITE
WRITE
在本程序中 ,首行的 START-OF-SELECTION事件部分格式化为热点。标准页眉定义为文本元素。如果用户将鼠标移动到输出的 HOTSPOT 单词上,则鼠标指针更改为手形。单击触发事件AT-LINE-SELECTION。 在该事件中 ,程序创建包含其他热点的辅助列表。
特殊输出格式
SET COUNTRY <c>.
DATA:
ULINE.
WRITE:
WRITE:
ULINE.
SET
WRITE:
WRITE:
ULINE.
SET
WRITE:
WRITE:
ULINE.
SET
WRITE:
WRITE:
ULINE.
SET
WRITE:
WRITE:
ULINE.
SET
WRITE:
WRITE:
ULINE.
运行结果如下:
JESSE的ABAP程序
INITIAL:
US,
GB,
DE,
XYZ,
SPACE,
货币特有的输出格式
WRITE <f> CURRENCY<c>.
DATA:
SET
WRITE:
JESSE的ABAP程序
USD
BEF
KUD
单位特有输出格式
WRITE <f> UNIT<u>.
DATA:
SET
WRITE:
JESSE的ABAP程序
KG
PC
画线、框架和网格
直接:
SKIP
ULINE
WRITE
WRITE
WRITE
ULINE
SKIP
POSITION
WRITE
SKIP
DO
ENDDO.
第一条 ULINE 语句创建一列的水平线 。第一条 WRITE 语句的连字符显示为正常输出字段。第二条 WRITE语句的连字符创建两列宽的直线。下面三个连字符与 ULINE 语句一起创建七列宽的直线。输出的第一个 '|'字符在第一行中创建垂直线。其他四个 '|' 字符创建 条线段长的直线,从第 3 行开始。
角
WRITE
WRITE
SKIP
ULINE
NEW-LINE.
WRITE
SKIP
WRITE:
T型交叉
WRITE
WRITE
ULINE
SKIP
DO
ENDDO.
SKIP
WRITE
SKIP
ULINE
WRITE
十字交叉
WRITE
WRITE
WRITE
SKIP
DO
ENDDO.
SKIP
ULINE
特殊线
INCLUDE
DATA:
X
WHILE
ENDWHILE.
FORM
ENDFORM.
运行结果如下所示:
编程框架
可以使用ABAP/4中可用的线类型编程框架。下面的样本程序定义宏WRITE_FRAME,可以取代WRITE<f>语句。系统在WRITE_FRAME语句指定的字段<f>周围画框架,该框架字段动态适配该字段的长度。
DATA:
DEFINE
END-OF-DEFINITION.
SKIP.
WRITE
WRITE_FRAME
WRITE
WRITE_FRAME
WRITE
运行结果:
TABLES
DATA:
TOP-OF-PAGE.
WRITE
ULINE.
START-OF-SELECTION.
DEFINE
END-OF-DEFINITION.
DEFINE
END-OF-DEFINITION.
GET
NEW_GRID.
WRITE_GRID:
运行结果: