您现在的位置:e-works > 智造书屋 > 书籍列表 > 工程师突击:SAP ABAP实用程序开发攻略 > Report List 报表开发

第七章 SAP应用界面开发及ABAP报表设计

第三节 Report List 报表开发

    Report List主要应用于数据的格式化输出,其同样在ABAP编辑器中开发,前面的章节中曾介绍了其开发环境和基本语法等内容,本节将重点介绍Report List数据格式的定义和颜色设定等。

7.3.1  Report List的输出定义

    所有的Report都是以Report为关键字加上程序名来进行定义的,如下:

     Report <name>.

    Report还可以通过以下参数设置来控制报表标题显示、报表分页控制、参考数据库表及参考Message类等,具体扩展语法如下:

    ... NO STANDARD PAGE HEADING:输出的报表不包含表头;

     ... LINE-SIZE col :设置页宽;

    ... LINE-COUNT (m) :设置每页行数及每页间空行数,如LINE-COUNT 18(2)表示每页18行,每页之间空两行;

    ... MESSAGE-ID mid :在程序中应用标准的Message类;

    ... DEFINING DATABASE ldb:定义程序中所使用逻辑数据库。

7.3.2  图标符号的输出

    报表输出中通常会有一些特殊的符号,如CheckBoox、图标及符号等,具体输出参数如下。

    1. WRITE ... AS CHECKBOX

    输出一个CHECKBOX。

    DATA: MARKFIELD(1) TYPE C VALUE 'X'.

    WRITE MARKFIELD AS CHECKBOX.           "输出符号CHECKBOX,默认已选

     MARKFIELD = SPACE.

    WRITE MARKFIELD AS CHECKBOX.           "输出符号CHECKBOX,默认未选

    WRITE MARKFIELD AS CHECKBOX INPUT OFF. "输出符号CHECKBOX,默认无法选择

     2.WRITE ... AS SYMBOL

    输出符号,需定义包含程序INCLUDE <SYMBOL>. 或 INCLUDE <LIST>.

     include <SYMBOL> .

    WRITE: / SYM_RIGHT_HAND AS SYMBOL,    "输出符号

    'Tip, Note',

    SYM_LEFT_HAND  AS SYMBOL.     "输出符号         

    3.WRITE ... AS ICON

     输出图标,需定义包含程序,具体图标可通过TCode:ICON查看,但是程序中需要定义INCLUDE <ICON>.  或  INCLUDE <LIST>.

    INCLUDE <ICON> .

    WRITE: / ICON_OKAY AS ICON,         "输出图标

    'Text line'.   

7.3.3  报表输出格式控制

    1.表格的制作

    我们在Excel和Word的使用中都使用过表格,通过表格使得数据输出排列整齐美观,但是在SAP Report List开发中并没有完整的表格概念,所谓的表格,实际上是通过多个线条绘制而成。具体的线条输出位置,需要开发人员根据输出报表的大小,字段长短及位置来定量。

    1)线条包括横线及竖线,横线的绘制语法可以指定具体位置及长度,默认为当前屏幕宽度。

    横线绘制语法:ULINE AT POS 或 WRITE POS SY-ULINE。

    ULINE AT 3(10).

     WRITE AT 3(10) SY-ULINE.                 "两者输出效果一样

    2)竖线的输出固定为一个字符高度,Report List中字符大小是固定的。

    竖线绘制语法:WRITE POS SY-ULINE。在Report绘制一个方框,需要制定具体的线条位置及长度,具体代码如例7-21所示。

    例7-21  绘制表格。

    REPORT ZREPORT_LIST_1 NO STANDARD PAGE HEADING .

    DO 3 TIMES.

     ULINE AT 1(50).

     WRITE: /1 SY-VLINE,50 sy-vline.

    ULINE AT /1(50).

     ENDDO.

    上例输出一个一列三行的报表,执行效果如图7-25所示。

 图7-25  Report List绘制表格输出

图7-25  Report List绘制表格输出

     2.控制输出格式

    ABAP输出控制语法及属性如下:

    (1)SKIP

    用于输出空行,其扩展语法如下:

    SKIP n.           从上行开始创建n个空行。

    SKIP TO LINE n.  在第n行创建一个空行。

    WRITE 'Line 1'.

    SKIP 5.

    WRITE 'Line 5'.

    SKIP TO LINE 8 .

    (2)NEW-LINE

    用于在Report List输出中产生换行,但不会产生空行。

    (3)... NO-SCROLLING

    锁定其下一行所输出值,不会随屏幕左右移动,该定义只对语法的下一行有效,主要应用于报表输出中一些关键栏位的冻结功能。

    (4)... SCROLLING

    其下一行所输出值会随屏幕左右移动,以上定义具体用法请参照以下代码。

    NEW-PAGE LINE-SIZE 255.

    WRITE: / 'This line will be moved'.

    NEW-LINE NO-SCROLLING.

     WRITE: / 'This line will  n o t  be moved'.       "该行输出值锁定

    WRITE: / 'This line will be moved'.

    (5)NEW-PAGE

    对输出报表时进行分页,其扩展语法如下。

    ... NO-TITLE :新的分页中不会有标题、日期、页码。

    ... WITH-TITLE :新的分页中继承首页的标题、日期、页码。

    ... NO-HEADING :在该报表的新分页中不产生表头。

     ... WITH-HEADING :输出的新页中继承首页的Column heading。

    ... LINE-COUNT lin :设置新页的行数。

    ... LINE-SIZE col:设置新页的宽度。

    (6)TOP-OF-PAGE

    该语法用于定义动态页眉,在所有的页面首行显示出来。

    (7)END-OF-PAGE

    该语法用于定义动态页脚,要触发该事件,需要在Report语句的LINE-COUNT附加项中为其预留输出行数。页脚事件块中的输出始终出现在页面下方,如例7-22所示。

    例7-22  报表输出事件的应用。

    REPORT ZREPORT_LIST_2 LINE-SIZE 30

    LINE-COUNT 10(5)                     "定义每页行数

    NO STANDARD PAGE HEADING.          "不需要表头

    START-OF-SELECTION.

    WRITE: / 'NAME:',10 'TOM'.

    WRITE: / 'Age:',30.

    WRITE: / 'Address:','Bei Jing'.

    NEW-PAGE NO-HEADING NO-TITLE.               "新页面中不需要标题及表头

    WRITE: / 'NAME:',10 'JERY'.

    WRITE: / 'Age:',28.

    WRITE: / 'Address:','Shen Zhen'.

    SET BLANK LINES ON.

    TOP-OF-PAGE.                                   "定义页眉

    WRITE: / 'Curr Page:',SYST-PAGNO.

    ULINE.

    END-OF-PAGE.                                   "定义页脚

    ULINE.

    WRITE: / 'This the End!'.

    输出界面如图7-26所示。

 图7-26  Report List分页输出界面

图7-26  Report List分页输出界面

7.3.4  获取输出屏幕中的数据

    当双击Report List所输出的某行数据时,触发AT LINE-SELECTION事件。而HIDE定义使输出的内容和当前选择行相关联,会自动获取该行内容,如例7-23所示。

    例7-23  AT LINE-SELECTION与HIDE事件的应用。

    REPORT ZREPORT_LIST_2

    DATA TEXT(20).

    START-OF-SELECTION.

    PERFORM WRITE_AND_HIDE.

    AT LINE-SELECTION.

    CASE TEXT.

    WHEN 'LINE1'.

    WRITE: 'You had select the LINE1'.

    WHEN 'LINE2'.

    WRITE: 'You had select the LINE2'.

    WHEN OTHERS.

    WRITE: 'The other line'.

    ENDCASE.

    CLEAR TEXT.

    FORM WRITE_AND_HIDE.

    TEXT = 'LINE1'.

    WRITE / TEXT.

    HIDE TEXT.

    TEXT = 'LINE2'.

    WRITE / TEXT.

    HIDE TEXT.

    ENDFORM.

    上例中,输出行与其内容相关联,当双击某行时,会根据HIDE关联内容输出相应的值。

7.3.5  列表程序中的系统参数

    在列表输出过程中,系统将填充下列相关系统字段,可以在程序中直接调用。

    SY-LINCT :REPORT语句中设定的LINE-COUNT。

    SY-LINSZ :REPORT语句中设定的LINE-SIZE。

    SY-SROWS :当前窗口中的列表行数。

    SY-SCOLS :当前窗口中的列表栏目数。

    SY-PAGNO :当前页的页码。

    SY-LINNO :当前输出页面中的选定行序号。

    SY-COLNO :当前输出页面中的选定列序号。

7.3.6  输出列表颜色的设定

    使用FORMAT语句可以实现其他一些屏幕格式化功能,例如调整输出颜色等。

    FORMAT <option1> [ON|OFF] <option2> [ON|OFF] ...

    一旦设定,FORMAT语句中设置的格式将适用于所有后续输出语句,直到再次使用OFF选项关闭,其具体选项列表如下:

    COLOR n [ON|OFF]:设定列表行的背景色。

    INTENSIFIED [ON|OFF] :设定是否将字段强化输出。

    INVERSE [ON|OFF]:设定是否将背景即文字颜色反转输出。

    HOTSPOT [ON|OFF]:将光标以手型显示,单击触发行选择事件。

    INPUT   [ON|OFF]:设定输入字段,允许用户输入。

    RESET:恢复上述的所有设定默认值。

    COLOR的类型及描述如表7-2所示。

表7-2  COLOR类型及描述

 表7-2  COLOR类型及描述

    FORMAT语句中的全部选项都可用做WRITE语句的格式化选项,如下面的两条语句,输出效果一样,具体颜色输出效果请读者朋友在实际开发中实践摸索。

    WRITE: 'Hello SAP' COLOR 1 NTENSIFIED ON.

    WRITE: ' Hello SAP' COLOR COL_HEADING INTENSIFIED ON.

7.3.7  实现Report的格式化分页输出

    下面将列举一典型的开发案例以方便读者朋友进一步掌握Report的开发技巧。

    创建一ICON数据查询程序,将ICON的名称及相关图标从系统抓出。控制报表每页显示数量最多不超过10行,如例7-24所示。

    例7-24  创建分页报表实例。

    REPORT ZREPORT_LIST_03 NO STANDARD PAGE HEADING.

    DATA: PAGELINE TYPE I VALUE 10,      "控制每页行数参数

    CONTAB LIKE STANDARD TABLE OF V_ICON WITH HEADER LINE,  "参照View建内表

    NUM TYPE I.

    *每次分页时绘制表头

    TOP-OF-PAGE.

    WRITE: /2 'Pages:',SYST-PAGNO LEFT-JUSTIFIED.

    ULINE AT /1(80).

    WRITE: /1(1) SY-VLINE ,'ID '   COLOR 1,

    7(1) SY-VLINE ,'ICON' COLOR 1,

    15(1) SY-VLINE ,'NAME'  COLOR 1,

    41(1) SY-VLINE ,'SHORTTEXT' COLOR 1,

    80(1) SY-VLINE .

    ULINE AT /1(80).

    START-OF-SELECTION.

    SELECT * FROM ICON INNER JOIN ICONT

    ON ICON~ID = ICONT~ID

    INTO CORRESPONDING FIELDS OF TABLE ICONTAB

    WHERE ICONT~LANGU = SY-LANGU.

    *按格式输出内表查询数据

    LOOP AT ICONTAB.

    WRITE:  /1(1) SY-VLINE,SY-TABIX LEFT-JUSTIFIED,

    7(1) SY-VLINE,ICONTAB-ID AS ICON CENTERED,

    15(1) SY-VLINE,ICONTAB-NAME,

    41(1) SY-VLINE,ICONTAB-SHORTTEXT,

    80(1) SY-VLINE.

    ULINE /1(80).

    *控制当行数满足分页条件时进行分页设定

    NUM = SY-TABIX MOD PAGELINE.

    IF NUM = 0.

    NEW-PAGE.   

    ENDIF.

    ENDLOOP.

    上例输出界面如图7-27所示。

 图7-27  分页报表输出界

图7-27  分页报表输出界