第七章 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绘制表格输出
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.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类型及描述
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 分页报表输出界