SAP-LIST 报表

01-LIST报表功能介绍
02-LIST报表开发技巧
03-LIST报表开发实战

01-LIST报表功能介绍

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

02-LIST报表开发技巧

1.标准列表结构

(1)标准页眉:
标准页眉至少包括两行标准标题。
标准标题的首行包含列表表头和页号。第二行由水平线组成。
执行程序时,列表表头存储在系统字段SY-TITLE中。
如果需要,可以在标准标题中包括最多四行列头和另一条水平线。
(2)标准页:
输出数据显示在页眉之下。
标准列表包含一个动态长度的单页(内部限制60,000行)。
输出长度由当前列表大小确定。输出屏幕包括一个垂直滚动条,允许用户滚动页长超过窗口的列表。
(3)标准列表的宽度:
标准列表的宽度取决于执行报表时的窗口宽度。
如果用户窗口小于或等于标准窗口大小,则标准页宽应符合标准窗口宽度。用户可能必须滚动列表才能查看列表的所有部件。
如果用户窗口超过标准窗口宽度,则标准列表的宽度符合选定标准窗口的宽度。

2.修改列表和列标题

自定义列表:

可以修改标准列表的结构并创建单个结构的列表。
使用REPORT语句选项以及事件TOP-OF-PAGEEND-OF-PAGE
PROGRAM语句REPORT语句等介并有相同的选项。
如果列表包括几页,则可以分别定义每页的结构。
单个页眉:要分别定义页眉的格式,必须在紧随事件关键字TOP-OF-PAGE的处理块中定义,

语法:
TOP-OF-PAGE
WRITE……

TOP-OF-PAGE事件在系统开始处理列表新页时出现。系统在输出新页首行之前处理TOP-OF-PAGE后面的语句。
如果要取消标准页眉,使用语法:

REPORT  NO STANDARD PAGEHEADING.

使用该语句时,系统不在报表列表上显示标准页眉。

例子:
REPORT ZHY01_HY101_20220627_01 NO STANDARD PAGE HEADING.
TOP-OF-PAGE.
WRITE:sy-title,30 'page',sy-pagno."30指的是距离首字符有30个字符的间隔。
ULINE."表示横线
WRITE: / 'SAP AG', 20 '鼠小倩, ',SY-DATUM, / 'ALV LIST报表练习', / '修改列表和列标题'.
ULINE.

START-OF-SELECTION.
DO 5 TIMES.
  WRITE / SY-INDEX.
ENDDO.

运行结果

注意:
报表程序不使用标准页眉,而是使用 TOP-OF-PAGE 之后的自定义页眉。
要显式结束TOP-OF-PAGE处理块,必须指定事件关键字 START-OF-SELECTION。

3.确定列表宽度

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

REPORT LINE-SIZE.

该语句根据字符确定报表输出列表的宽度。
如果将设置为0,则系统使用标准列表的宽度。
一行最多可包含255个字符。如果要打印列表,大多数据打印机不能打印超过132个字符的列表。
创建列表时,系统字段SY-LINSZ包含当前行宽。
要将列表宽度调整为当前窗口宽度,使用ULINE语句(不带AT选项)创建的水平线自动适配自定义列表宽度。
例子:

*ALV LIST报表——确定列表宽度
REPORT ZHY01_HY101_20220627_01 LINE-SIZE 60.
WRITE: 'SY-LINSZ:',SY-linsz.
ULINE.
DO 5 TIMES.
  WRITE sy-index.
ENDDO.

结果展示

4.确定页长

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

REPORT LINE-COUNT[()]

该语句用行确定报表的页长。
如果指定选项号,则系统为页脚保留行页长。
并不将这些页脚行填写到END-OF-PAGE事件中,而是作为空行显示。
如果设置为0,则系统使用标准页长。
创建列表时,系统字段SY-LINCT包含每页的当前行数.
例子:

*ALV LIST报表——04确定列表宽度
REPORT ZHY01_HY101_20220627_01 LINE-SIZE 40 LINE-COUNT 4.
WRITE: 'SY-LINCT:',sy-linct."当前列表的页面长度
skip.
DO 5 TIMES.
  WRITE sy-index.
ENDDO.

运行结果,对比查看

该程序将页长确定为四行。使用标准页眉。假定标准页眉 包括两行列表表头。

05.定义页脚

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

END-OF-PAGE.
 WRITE:...

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

*ALV LIST报表——05定义页脚
REPORT ZHY01_HY101_20220627_01 line-SIZE 40 LINE-COUNT 6(2) NO STANDARD PAGE HEADING.
TOP-OF-PAGE."报表程序不使用标准页眉,而是使用 TOP-OF-PAGE 之后的自定义页眉。
WRITE: 'Page With Header and Footer'.
ULINE at /(27).
end-OF-PAGE.
ULINE.
WRITE: /30'Page',sy-pagno."当前列表页
START-OF-SELECTION."要显式结束TOP-OF-PAGE处理块,必须指定事件关键字 START-OF-SELECTION。
DO 6 TIMES.
WRITE / sy-index.
ENDDO.

报表程序不使用标准页眉,而是使用 TOP-OF-PAGE 之后的自定义页眉。
要显式结束TOP-OF-PAGE处理块,必须指定事件关键字 START-OF-SELECTION。
结果展示

说明:
该程序包括三个处理块。
关闭标准页眉。将页长设置为六行,其中两行留作
页脚。列表包括三页,每页六行。每页由自定义的两行页眉、两行实际列表
和两行页脚组成。页脚中显示的当前页号来自系统字段SY-PAGNO。

06.多页列表

如果在报表中写入列表输出页的行数超过在REPORT语句LINE-COUNT选项中定义的行数,则系统自动创建新页。
每个新页都包含为报表定义的页眉和页脚(如果有的话)。
除自动分布外,可以使用NEW-PAGERESERVE语句显式地编码分布。
NEW-PAGE语句的选项允许分别设置每页格式。也需要NEW-PAGE语句在程序内打印列表。

无条件分页:

要在页处理期间触发分页,请使用NEW-PAGE.

*ALV LIST报表——06 多页列表:无条件多页
REPORT zhy01_hy101_20220627_01 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.

结果展示:

条件多页:

语法:

RESERVE  LINES.

例子:

*ALV LIST报表——06 多页列表:条件分页
REPORT zhy01_hy101_20220627_01 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: / 'LINE1',/'LINE2',/'LINE3'.

结果展示

说明:
该样本程序标准页眉的列表头定义为“标准页眉”。
REPORT 语句将页长确定为八行 ,两行用于标准页眉,另外两行为页脚保留。页脚包括水平行和空行 。
因此,输出的实际列表,每页留下四行。
第一个 DO 循环填充四行,然后发生END-OF-PAGE 事件,其后系统自动开始新页。
第二个 DO 循环之后, 因为页上剩余的自由行 数少于三, 因此 RESERVE语句触发 END�OF-PAGE 事件和分页 。

07单页的标准页眉

标准页眉包括列表和列标题。

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-TITLEWITH-HEADING激活单个组件的显示.
例子:

*ALV LIST报表——07单页的标准页眉
REPORT zhy01_hy101_20220627_01  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.

结果展示

说明:
该程序创建五页,分别带有不同页眉。将列表表头标题文本元素定义为“标准页眉”,列标题定义为“列”。
第 1 和 5 页包含完整的标准页眉 。
第 2 页没有列表表头。
第 3 页上,取消整个页眉。
第 4 页上,省略列标题。

08窗口滚动

SCROLL LIST FORWARD|BACKWRAD[INDEX].

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

*ALV LIST报表——08窗口滚动
REPORT zhy01_hy101_20220627_01 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 30 TIMES.
    WRITE / SY-INDEX.
ENDDO.
DO 3 TIMES.
  SCROLL LIST FORWARD.
ENDDO.

结果展示

09.滚动

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

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

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

*ALV LIST报表——09滚动
REPORT zhy01_hy101_20220627_01 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.
WRITE: 'end-of-page',sy-pagno.
START-OF-SELECTION.
DO 5 TIMES.
  DO 3 TIMES.
     WRITE / sy-index.
  ENDDO.
ENDDO.
SCROLL LIST TO PAGE pag LINE lin.

结果展示:

10.页面滚动

滚动到列表的页边缘.语法:

SCROLL LIST LEFT|RIGHT [INDEX].

按列滚动

SCROLL LIST TO COLUMN [INDEX]

例子:

*ALV LIST报表——10页面滚动
REPORT zhy01_hy101_20220627_01 NO STANDARD PAGE HEADING line-SIZE 200.
TOP-OF-PAGE.
WRITE:at 161 'top-of-pafe:',sy-pagno.
ULINE.
START-OF-SELECTION.
DO 200 TIMES.
  WRITE sy-index.
ENDDO.
SCROLL LIST TO COLUMN 178.

结果展示

11.绝对定位

POSITION .

水平定位该语句将水平输出位置和SY-COLNO系统字段设置为

SKIP TO LINE.

垂直定位该语句将垂直输出位置和SY-LINNO系统字段设置为.

BACK. 

将输出定位到整个页眉之后的第一行.
例子:

*ALV LIST报表——11.绝对定位
REPORT zhy01_hy101_20220627_01 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.

结果展示:

12.相对定位

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

NEW-LINE.

该语句将输出定位在新行中,将SY-COLNO设置为1并且将SY-LINNO加1.

WRITE  UNDER.

系统从开始输出字段的同一列中开始输出。该语句不限于当前页。

RESERVE. ... BACK.

如果BACK紧随RESERVE,则后续输出出现在RESERVE之后的第一行中。
例子:

*ALV LIST报表——12.相对定位
REPORT zhy01_hy101_20220627_01 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输出。

13.设置输入

FORMAT INPUT [ON|OFF].

要在运行时将输出字段设置为“准备输入”。
例子:

*ALV LIST报表——13.设置输入
REPORT zhy01_hy101_20220627_01.
WRITE 'Please fill in vour 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.

结果展示:

14 设置热点

FORMAT HOTSPOT [ON|OFF].

将字段输出为热点
例子:

*ALV LIST报表——14.设置热点
REPORT zhy01_hy101_20220627_01.

INCLUDE .

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.

结果展示

在本程序中 ,首行的START-OF-SELECTION事件部分格式化为热点.
标准页眉定义为文本元素。
如果用户将鼠标移动到输出的HOTSPOT 单词上,则鼠标指针更改为手形。
单击触发事件AT-LINE-SELECTION。 在该事件中 ,程序创建包含其他热点的辅助列表。

15.设置语言

特殊输出格式

SET COUNTRY .

例子:

*ALV LIST报表——15.设置语言
REPORT zhy01_hy101_20220627_01 LINE-SIZE 40.

DATA: num TYPE p DECIMALS 3 VALUE '123456.789'.
ULINE.
WRITE: /'INITIAL:'.
WRITE: / num,sy-datum."应用服务器当前系统时间
ULINE.

SET COUNTRY 'US'.
WRITE: / 'US, SY-SUBRC:',sy-subrc."abap语句的返回码
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.
WRITE: / num,sy-datum.
ULINE.

结果展示

16.货币输出格式

WRITE  CURRENCY.

例子:

*ALV LIST报表——16.货币输出格式
REPORT zhy01_hy101_20220627_01 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'.

结果展示

17.单位输出格式

WRITE  UNIT.

例子:

*ALV LIST报表——17.单位输出格式
REPORT zhy01_hy101_20220627_01 LINE-SIZE 40.
DATA: NUM1 TYPE P DECIMALS 1 VALUE 1,
      NUM2 TYPE P DECIMALS 4 VALUE '2.5'.
SET COUNTRY 'US'.
WRITE: 'KG', NUM1 UNIT 'KG', NUM2 UNIT 'KG',
      / 'PC', NUM1 UNIT 'PC', NUM2 UNIT 'PC'.

结果展示:

18.划线+框架+网络

例子:

*ALV LIST报表——18.划线+网格+网络
REPORT zhy01_hy101_20220627_01 NO STANDARD PAGE HEADING.

SKIP TO LINE 3.
ULINE AT 2(1).    "ULINE 语句创建一列的水平线 。
WRITE 4 '-'.      "WRITE 语句的连字符显示为正常输出字段。
WRITE 6 '--'.    " WRITE语句的连字符创建两列宽的直线。
WRITE 9 '---'.
ULINE AT 12(4).    " 下面三个连字符与 ULINE 语句一起创建七列宽的直线。

SKIP TO LINE 1.
POSITION 18.
WRITE '|'.     "  '|'字符在第一行中创建垂直线。

SKIP TO LINE 3.
DO 4 TIMES.
 NEW-LINE.
 POSITION 18.
 WRITE '|'."四个 '|' 字符创建 条线段长的直线,从第 3 行开始。
ENDDO.

结果展示

19.T形交叉

例子:

*ALV LIST报表——19.T形交叉
REPORT zhy01_hy101_20220627_01 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 '|' .

结果展示

20.角

例子:

*ALV LIST报表——20.角
REPORT zhy01_hy101_20220627_01 NO STANDARD PAGE HEADING.
WRITE '--'.
WRITE / '|'.
SKIP TO LINE 1.
ULINE AT 5(6).
NEW-LINE.
WRITE 10 '|'.
SKIP TO LINE 4.
WRITE: '| |',
 / '----------'.

结果展示

21.十字交叉

例子:

*ALV LIST报表——21.十字交叉
REPORT zhy01_hy101_20220627_01 NO STANDARD PAGE HEADING.

WRITE ' |'.
WRITE /'-------'.
WRITE /' |'.

SKIP TO LINE 1.
DO 3 TIMES.
 WRITE 12 SY-vline."列表的竖线
 NEW-LINE.
ENDDO.

SKIP TO LINE 2.
ULINE AT 12(1).

结果展示

22.蜘蛛网

*ALV LIST报表——22.蜘蛛网
REPORT zhy01_hy101_20220627_01 NO STANDARD PAGE HEADING LINE-SIZE 60.
INCLUDE .
DATA: X0 TYPE I VALUE 10,
      Y0 TYPE I VALUE 10,
      N  TYPE I VALUE 16,
      I  TYPE I VALUE 0,
      X  TYPE I,
      Y  TYPE I.
X = X0. Y = Y0.
PERFORM POS.
WHILE I LE N.
 WRITE LINE_BOTTOM_LEFT_CORNER AS LINE.
 X = X + 1. PERFORM POS.
 ULINE AT X(I).
 X = X + I. PERFORM POS.
 WRITE LINE_BOTTOM_RIGHT_CORNER AS LINE.
 Y = Y - 1. PERFORM POS.
 DO I TIMES.
 WRITE '|'.
 Y = Y - 1. PERFORM POS.
 ENDDO.
WRITE LINE_TOP_RIGHT_CORNER AS LINE.
 I = I + 1.
 X = X - I. PERFORM POS.
 ULINE AT X(I).
 X = X - 1. PERFORM POS.
 WRITE LINE_TOP_LEFT_CORNER AS LINE.
 Y = Y + 1. PERFORM POS.
 DO I TIMES.
 WRITE '|'.
 Y = Y + 1. PERFORM POS.
 ENDDO.
 I = I + 1.
ENDWHILE.
FORM POS.
 SKIP TO LINE Y.
 POSITION X.
ENDFORM.

结果展示

23.编程框架

例子:

*ALV LIST报表——23.编程框架
REPORT zhy01_hy101_20220627_01 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.'.

结果展示

24.编程网络

例子:

REPORT zhy01_hy101_20220627_01 NO STANDARD PAGE HEADING LINE-SIZE 60.

TABLES SPFLI.

DATA: X TYPE I,
      Y TYPE I,
      L TYPE I.


PARAMETERS PA_CAR TYPE SPFLI-CARRID.
DATA WA_SPFLI TYPE SPFLI.

TOP-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.

SELECT * FROM SPFLI
  WHERE CARRID = PA_CAR.
ENDSELECT.

*GET SPFLI.
NEW_GRID.

WRITE_GRID: SPFLI-CARRID,
            SPFLI-CONNID,
            SPFLI-CITYFROM,
            SPFLI-CITYTO.

结果展示
筛选项

执行结果


你可能感兴趣的:(SAP-LIST 报表)