1、WRITE {[AT] [/][pos][(len|*|**)]} dobj
[UNDER other_dobj]
[NO-GAP]
[int_format_options]
[
[COLOR {{{color [ON]}|OFF}|{= col}}]
[INTENSIFIED [{ON|OFF}|{= flag}]]
[INVERSE [{ON|OFF}|{= flag}]]
[HOTSPOT [{ON|OFF}|{= flag}]]
[INPUT [{ON|OFF}|{= flag}]]
[FRAMES [{ON|OFF}|{= flag}]]
[RESET]
]
[
{AS CHECKBOX}
| {AS ICON}
| {AS SYMBOL}
| {AS LINE}
]
[QUICKINFO info].
上面的这些语法都可以在下面的小工具中实现。
1)、WRITE {[AT] [/][pos][(len|*|**)]} -- 替换输出文本字段
斜线/表示新的一行
<pos>是最长为三位数字的数字或变量,表示在屏幕上的位置
<len>是最长为三位数字的数字或变量,表示输出最大长度
如果<pos><len>只包含直接值(即,不是变量),可以忽略关键字 AT,否则为变量时不能省。
WRITE AT表示替换上一行的某些内容, write表示从从本行某位置开始的内容。
DATA: text TYPE string VALUE '0123456789ABCDEF',
col TYPE i VALUE 5,
len TYPE i VALUE 5.
WRITE text.
WRITE /5(10) text.
WRITE / text.
WRITE AT col(len) text.
"结果
*0123456789ABCDEF
* 0123456789
*0123012349ABCDEF
2)、UNDER、NO-GAP
under -- 与某字段对齐 NO-GAP 去掉空格
DATA: g(5) VALUE 'Hello',
f(5) VALUE 'Dolly'.
WRITE: g, f.
WRITE: /10 g,
/ f UNDER g.
WRITE: / g NO-GAP, f.
"结果
*Hello Dolly
* Hello
* Dolly
*HelloDolly
3)、QUICKINFO -- 鼠标放在上面有提示信息
WRITE: (10) sy-datum QUICKINFO 'Date of list creation',
(8) sy-uzeit QUICKINFO 'Time of list creation'.
4)、COLOR 、INTENSIFIED、INVERSE -- 颜色参数等
DATA col TYPE i VALUE 0.
DO 8 TIMES.
col = sy-index - 1.
" FORMAT COLOR = col.
WRITE: / col COLOR OFF,
"此种好像不存在,与高亮前景是一样的,即前景色只能是高亮的?
'低亮前景' COLOR = col INTENSIFIED OFF INVERSE ON ,
'高亮前景' COLOR = col INTENSIFIED ON INVERSE ON ,
'低亮背景' COLOR = col INTENSIFIED OFF INVERSE OFF ,
'高亮背景' COLOR = col INTENSIFIED ON INVERSE OFF .
enddo.
5)、HOTSPOT -- 热点单击事件
HOTSPOT [{ON|OFF}|{= flag}]
鼠标放上去会显示成手的形状
START-OF-SELECTION.
"FORMAT HOTSPOT.
WRITE 'Click me!' COLOR 5 HOTSPOT ON.
"FORMAT HOTSPOT OFF.
AT LINE-SELECTION.
WRITE 'Yeah!' COLOR 3.
6)、INPUT -- 输入参数
INPUT [{ON|OFF}|{= flag}]
DATA: input_field TYPE c LENGTH 100,
line_num TYPE i.
START-OF-SELECTION.
WRITE 'Input text:'.
SET BLANK LINES ON.
"FORMAT INPUT.
WRITE / input_field INPUT on.
"FORMAT INPUT OFF.
WRITE / '>>> OK <<<' COLOR 5 HOTSPOT.
AT LINE-SELECTION.
IF sy-lisel = '>>> OK <<<'.
line_num = sy-lilli - 1.
READ LINE line_num FIELD VALUE input_field.
WRITE: 'The input was:',/ input_field.
ENDIF.
7)、FRAMES -- 字符和边框标识
FRAMES [{ON|OFF}|{= flag}]
该选项决定了"-" and "|"字符是否显示为表格框线,还是普通的字符。如果为ON或者flag为非0时,则显示为表格框线(默认);否则显示为普通的字符。
如果ON, OFF, nor flag都指定,默认为ON
"FORMAT FRAMES ON.
WRITE: / '----',
/ '| |',
/ '----'.
"FORMAT FRAMES OFF.
WRITE: / '----' FRAMES OFF,
/ '| |' FRAMES OFF,
/ '----' FRAMES OFF.
8)、AS CHECKBOX / AS ICON / AS SYMBOL / AS LINE
复选框,图标,符号,表格线
9)、水平线,垂直线,空行
ULINE [AT [/][<pos>][(<len>)]].
ULINE:在当前位置画横线
ULINE AT m(n):在当前行的第m个位置画一个长度为n的横线
UNLINE /m(n):先用“/”换一行,然后在第m个位置画一个长度为n的横线
WRITE [AT [/][<pos>][(<len>)]] SY-ULINE.
WRITE [AT [/][<pos>][(<len>)]] '-----'
"垂直线
WRITE [AT [/][<pos>]] sy-vline.
或者:
WRITE [AT [/][<pos>]] '|'.
SKIP TO LINE <n>.
2、WRITE … TO
WRITE {source|(source_name)} TO destination
[LEFT-JUSTIFIED|CENTERED|RIGHT-JUSTIFIED]
{ { [EXPONENT exp]
[NO-GROUPING]
[NO-SIGN]
[NO-ZERO]
[CURRENCY cur]
{ {[DECIMALS dec][ROUND scale]}|[UNIT unit]}
}
| {[ENVIRONMENT TIME FORMAT][TIME ZONE tz]} [STYLE stl]
}
[USING{ {NO EDIT MASK}|{EDIT MASK mask} }]
[ DD/MM/YY|MM/DD/YY|DD/MM/YYYY|MM/DD/YYYY|DDMMYY|MMDDYY|YYMMDD ].
1)、LEFT-JUSTIFIED|CENTERED|RIGHT-JUSTIFIED
所有源source都会看作是String,如果是固定长度类型C,则尾部空格会被去掉。
对齐时,会在前、后或前后补空格。如果是右对齐时,如果目标太短,则会截断左边。
destination目标类型只能是固定长度的CNDT类型。
DATA: formatted_text TYPE c LENGTH 10.
WRITE 'Left' TO formatted_text LEFT-JUSTIFIED.
WRITE:/ formatted_text.
WRITE 'Center' TO formatted_text CENTERED.
WRITE:/ formatted_text.
WRITE 'Right' TO formatted_text RIGHT-JUSTIFIED.
WRITE:/ formatted_text.
WRITE 'CenterCenter' TO formatted_text RIGHT-JUSTIFIED.
WRITE:/ formatted_text.
2)、NO-GROUPING,NO-SIGN,NO-ZERO
没有千分位,+号不输出,零或者前导零不会显示
3)、CURRENCY cur,DECIMALS dec,ROUND scale,UNIT unit
× 货币因子,指定小数位,四舍五入,
DATA pack TYPE p VALUE '123.456'
DECIMALS 3.
WRITE pack DECIMALS 2.
WRITE: / pack ROUND -2,
/ pack ROUND -1,
/ pack ROUND 1,
/ pack ROUND 2.
123.46
12,345.600
1,234.560
12.346
1.235
4)、USING { {NO EDIT MASK}|{EDIT MASK mask} } -- 撤消对 ABAP/4 词典中指定的格式模板的激活
DATA time TYPE t VALUE '154633'.
WRITE: time,
"这里直接使用的是格式模板,还可以使用词典中已有的转换规则函数
/(8) time USING EDIT MASK '__:__:__'.
154633
15:46:33
DD/MM/YY|MM/DD/YY|DD/MM/YYYY|MM/DD/YYYY|DDMMYY|MMDDYY|YYMMDD
3、 页面布局:
1)、取消标准页眉 ,列宽,页长
每列最长是能够显示255,如果是打印的话不能超过132。
REPORT y_lazhao_test005 NO STANDARD PAGE HEADING LINE-SIZE 132 LINE-COUNT 4
2)、定义页眉页脚:
TOP-OF-PAGE. -- 页眉
END-OF-PAGE. -- 页脚
该程序包括三个处理块。关闭标准页眉。将页长设置为六行,其中两行留作页脚。列表包括三页,每页六行。每页由自定义的两行页眉、两行实际列表和两行页脚组成。页脚中显示的当前页号来自系统字段SY-PAGNO 。
REPORT ZJESSE02 LINE-SIZE 40 LINE-COUNT 6(2)
NO STANDARD PAGE HEADING.
TOP-OF-PAGE.
WRITE: 'Page with Header and Footer'.
ULINE AT /(27).
END-OF-PAGE.
ULINE.
WRITE: /30 'Page', SY-PAGNO.
START-OF-SELECTION.
DO 6 TIMES.
WRITE / SY-INDEX.
ENDDO.
如果设置了line-count参数,则当达到每页的行数限制就会自动换页,当然也可以程序中通过语法实现换页。
NEW-PAGE.
RESERVE 3 LINES. 当前页剩余行数不足3行时,自动换页。
3)、单独设置每页的页宽,页长,页眉,页脚
NEW-PAGE [NO-TITLE|WITH-TITLE] [NO-HEADING|WITH-HEADING].
能够单独确定每个页眉是否使用标准抬头
NEW-PAGE LINE-SIZE <width> LINE-COUNT<length>."该语句将后续的页长确定为<length>。0则表示标准页长,页长会适配当前窗口的长度,SY-SROWS。
4)、定位
SY-COLNO用于当前列 SY-LINNO 用于当前行
POSITION <col>."水平定位该语句将水平输出位置和SY-COLNO系统字段设置为<col>.
SKIP TO LINE<n>."垂直定位该语句将垂直输出位置和SY-LINNO系统字段设置为<lin>.
BACK. "将输出定位到整个页眉之后的第一行
5)、格式输出
使字段可接受输入
FORMAT INPUT [ON|OFF]. "要在运行时将输出字段设置为“准备输入”。
将字段输出为热点
FORMAT HOTSPOT [ON|OFF]
SET COUNTRY <c>. --国家属性
货币特有的输出格式
WRITE <f> CURRENCY<c>.
单位特有输出格式
WRITE <f> UNIT<u>.