报表程序主要内容:标准列表、自定义列表、多页列表。列表是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语句的NOSTANDARDPAGEHEADING选项:语法REPORTrepNOSTANDARDPAGEHEADING.使用该语句时,系统不在报表rep列表页上显示标准页眉。如果使用TOP-OF-PAGE定义单个页眉,则系统就将其显示出来。REPORTSAPMZTSTNOSTANDARDPAGEHEADING.TOP-OF-PAGE.WRITE:SY-TITLE,40'Page',SY-PAGNO.ULINE.WRITE:/'SAPAG',29'Walldorf,',SY-DATUM,/'Neurottstr.16',/'69190Walldorf/Baden'.ULINE.START-OF-SELECTION.DO5TIMES.WRITE/SY-INDEX.ENDDO.报表程序不使用标准页眉,而是使用TOP-OF-PAGE之后的自定义页眉。要显式结束TOP-OF-PAGE处理块,必须指定事件关键字START-OF-SELECTION。确定列表宽度要确定输出列表的宽度,请使用REPORT语句的LINE-SIZE选项。语法REPORTrepLINE-SIZEwidth.该语句根据width字符确定报表rep输出列表的宽度。如果将width设置为0,则系统使用标准列表的宽度。一行最多可包含255个字符。但是,如果要打印列表,请记住大多数打印机不能打印超过132个字符的列表。如果要在创建时直接打印列表,则页宽必须符合某种现有打印格式。否则,系统就不能打印该列表。一定不要选择超过132字符的列表宽度,除非创建只用于显示的列表。创建列表时,系统字段SY-LINSZ包含当前行宽。使用ULINE语句(不带AT选项)创建的水平线自动适配自定义列表宽度。REPORTSAPMZTSTLINE-SIZE40.WRITE:'SY-LINSZ:',SY-LINSZ.ULINE.DO20TIMES.WRITESY-INDEX.ENDDO.确定页长要确定输出列表的页长,请使用REPORT语句的LINE-COUNT选项。语法REPORTrepLINE-COUNTlength[(n)].该语句用length行确定报表rep输出列表的页长。如果指定选项号n,则系统为页脚保留n行页长。并不将这些页脚行填写到END-OF-PAGE事件中,而是作为空行显示。如果将length设置为0,则系统使用标准页长。要根据当前窗口大小调整页长。创建列表时,系统字段SY-LINCT包含每页的当前行数(即n行或0代表标准页长度)。记住页眉长度是length的部件。因此,对于列表本身,只能使用length减去页眉长度减去n行。如果length小于页长度,则产生运行错误。如果在列表处理期间系统到达为实际列表提供的区域的结尾,则输出页脚,如果有,插入一些空格并且启动新页。插入的空格属于列表背景并且不是列表行。SY-PAGNO系统字段总包含当前页号。确定页长时,应记住下列各项:对于屏幕输出,请使用标准页长以避免在屏幕中间分页。对于打印列表,则根据打印机要求设置页长。应采用对任何页长都能产生合理输出的方式书写程序。如果选择现有打印格式之外的页长,则不能在创建时直接打印。对于仅指定页面设置的表格形式的列表使用固定长度规格。在为此类列表编写程序代码之前,请检查能否使用预定义的SAPscript表格。下列程序旨在说明LINE-COUNT选项的用法。因此在一个屏上显示不同的列表页。REPORTSAPMZTSTLINE-SIZE40LINE-COUNT4.WRITE:'SY-LINCT:',SY-LINCT.SKIP.DO6TIMES.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的处理块。REPORTSAPMZTSTLINE-SIZE40LINE-COUNT6(2)NOSTANDARDPAGEHEADING.TOP-OF-PAGE.WRITE:'PagewithHeaderandFooter'.ULINEAT/(27).END-OF-PAGE.ULINE.WRITE:/30'Page',SY-PAGNO.START-OF-SELECTION.DO6TIMES.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事件。这意味着即使定义了页脚,系统也不输出。REPORTSAPMZTSTLINE-SIZE40.TOP-OF-PAGE.WRITE:'TOP-OF-PAGE',SY-PAGNO.ULINEAT/(17).START-OF-SELECTION.DO2TIMES.WRITE/'Loop:'.DO3TIMES.WRITE/SY-INDEX.ENDDO.NEW-PAGE.ENDDO.该样本程序使用列表表头“标准页眉”定义为文本元素的标准页眉和自定义页眉。每页都出现两个页眉。DO循环两次遇到NEW-PAGE语句,但是只执行一次分页。在第二条NEW-PAGE语句之后,没有输出。条件分页–定义行块要在少于某一页剩余行数的条件下执行分页,请使用RESERVE语句:语法RESERVEnLINES.如果当前列表页的最后输出和页脚之间剩余的自由行数少于n,则该语句触发分页。n可以是变量。在开始新页之前,系统处理END-OF-PAGE事件。只有输出写入到后续页时,RESERVE才生效。不创建空页。REPORTSAPMZTSTLINE-SIZE40LINE-COUNT8(2).END-OF-PAGE.ULINE.START-OF-SELECTION.DO4TIMES.WRITE/SY-INDEX.ENDDO.DO1TIMES.WRITE/SY-INDEX.ENDDO.RESERVE3LINES.WRITE:/'LINE1',/'LINE2',/'LINE3'.该样本程序标准页眉的列表头定义为“标准页眉”。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语句的NOSTANDARDPAGEHEADING选项取消标准页眉,也能使用WITH-TITLE和WITH-HEADING激活单个组件的显示。因为TOP-OF-PAGE事件在新页上处理,所以NEW-PAGE语句不能影响在