ABAP WRITE、WRITE TO、FORMAT语句
WRITE
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].
在ABAP编辑器里,可以使用可视的方式来使用WRITE,上面语法中的所有选项都可以在下面体现,比如对颜色、图标等:
WRITE {[AT] [/][pos][(len|*|**)]}
WRITE AT [/][<pos>][(<len|*|**>)] dobj.
斜线/表示新的一行
<pos>是最长为三位数字的数字或变量,表示在屏幕上的位置
<len>是最长为三位数字的数字或变量,表示输出最大长度
如果<pos><len>只包含直接值(即,不是变量),可以忽略关键字 AT,否则为变量时不能省。
DATA: len TYPE i VALUE 10,
pos TYPE i VALUE 11,
text(10) VALUE '1234567890'.
WRITE 'The text ------------ appears in the text.'.
"注,这里的AT关键字不能省略,因为后面的pos len为变量,而不是直接量
WRITE AT pos(len) text."可以重新绘制屏幕,覆写已经输入的内容
The text -1234567890- appears in the text.
如果输出长度<len>太短,则显示部分内容。如果是数字类型,则左边截断数字,并用星号(*)作前缀;如果是字符类型,则截断右边字符,但是不会在后面向数字类型那样加上星号(*):
DATA: number TYPE i VALUE 1234567890,
text(10) VALUE 'abcdefghij'.
WRITE: (5) number, /(5) text.
*7890
abcde
如果指定的是* or **,一般与数据类型相关,且**比*要长或两倍
数据类型 |
输出长度 |
定位 |
b |
3 |
右对齐 |
s |
5 |
右对齐 |
P |
2 * 字段长度(+1如果有小数点) |
右对齐 |
F |
24 |
右对齐 |
I |
11 |
右对齐 |
C |
字段长度,maximum 255 |
左对齐 |
D |
8 |
左对齐 |
N |
字段长度,maximum 255 |
左对齐 |
T |
6 |
左对齐 |
X |
2 * 字段长度,maximum 255 |
左对齐 |
数字数据类型 F、I 和 P 是右对齐的,左边用空格填充,如果有足够的空间,也输出千位分隔符。如果类型 P 字段包含小数位,则默认输出长度会增加一位。
对数据类型D,当输出数据使用WRITE 语句时,系统自动设定的日期格式(例如,DD/MM/YYYY 或 MM/DD/YYYY,但要注意,输出宽度一定要指定为10,不能比10小,也不能是默认的输出宽度)来输出数据:
DATA: d TYPE d VALUE '20110709'.
WRITE: d , (9) d, (10)d.
20110709 20110709 2011.07.09
时间也是一样:
DATA : t TYPE t value '111111'.
WRITE: t , (7) t , (8) t.
111111 111111 11:11:11
下面字段number变量实际上输出总长为 13,即9 位数字(包括小数点)、前导负号和作为分隔符的两个逗号。但因为这里的变量为P(8)类型,所以默认情况下(Write语句中未使用len参数)系统会为P(8)类型预留输出长度为 2*8+1(一位符号位)=17,所以前面剩余的位置用四个空格填充。
DATA number TYPE p VALUE '-1234567.89' DECIMALS 2.
WRITE: number.
WRITE:/(12) number.
WRITE:/(11) number.
WRITE:/(10) number.
1,234,567.89-
1234,567.89-
1234567.89-
*34567.89-
P类型与日期或时间不一样,如果宽度没有足够宽,但又比最小宽度要大时,会输出部分的千分位符号,但日期与时间是要么全输出格式符号,要么全不输出。
int_format_options
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
QUICKINFO
鼠标放上去有提示信息
WRITE: (10) sy-datum QUICKINFO 'Date of list creation',
(8) sy-uzeit QUICKINFO 'Time of list creation'.
COLOR 、INTENSIFIED、INVERSE
ALV颜色输出,请参数《ALV.docx》文档中的颜色章节。
COLOR {{{color [ON]}|OFF}|{= col}}
如果INVERSE设置为OFF(默认),则该选项设置的为输出字符的背景色,INVERSE为ON时,设置的为输出字符的前景色(即字符本身的颜色)
你可以使用静态的color,或者使用动态的col。使用color时,可以省略ON。col是一个类型为i的变量。color与col的取值如下表:
color |
col |
颜色描述 |
COL_BACKGROUND 注:与其也不同,这里不能取数值0 其他可以两种取值:一种是1~7之间 的数值,另一种是后面 COL_* 开头 的颜色常量 |
0 |
GUI-dependent |
{1 |COL_HEADING } |
1 |
|
{ 2 |COL_NORMAL } |
2 |
|
3 |
Yellow |
|
{ 4 | COL_KEY } |
4 |
Blue-green |
{ 5 | COL_POSITIVE } |
5 |
Green |
{ 6 | COL_NEGATIVE } |
6 |
Red |
{ 7 | COL_GROUP } |
7 |
orange桔黄 |
OFF选项等效于color为COL_BACKGROUND或者col为0,这也是默认值,此时色依赖于GUI window。
INTENSIFIED [{ON|OFF}|{= flag }]
INTENSIFIED选项设置background color高亮显示(即颜色加深)。如果指定为ON或者flag为非0时,background color会使用高亮方式来显示(默认),否则为OFF或flag为0时,使用弱的background color。例外:An exception to this is the COL_BACKGROUND background color, used by INTENSIFIED OFF to control the foreground color.
如果ON、OFF、flag都没指定时,默认为ON,即高亮显示
INVERSE [{ON|OFF}|{= flag}]
该选项主要是用来设置COLOR选项是设置背景还是前景色,flag为i类型。如果指定为ON或者flag为非0时,则COLOR用来设置前景色(注:COLOR COL_BACKGROUND INVERSE ON时,前景与背景色一样,所以此时看不到文字);如果为OFF或者flag为0时,则COLOR用来设置背景色的(默认)
如果ON、OFF、flag都没指定时,默认为ON,即默认设置的就是背景色
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.
DATA sum TYPE i.
FORMAT COLOR COL_NORMAL.
DO 10 TIMES.
WRITE / sy-index.
sum = sum + sy-index.
WRITE sum COLOR COL_TOTAL.
ENDDO.
ULINE.
WRITE sum UNDER sum COLOR COL_GROUP.
HOTSPOT
HOTSPOT [{ON|OFF}|{= flag}]
鼠标放上去会显示成手的形状
如果为ON或者flag为非0,则放上去会显示手,此时的单击就如同双击(等效按F2);否则不会发生变化。
如果ON、OFF、flag都没指定时,默认为ON
点击列表上的超链接会触发AT LINE-SELECTION事件。如果输出字段不采用热点链接,则用户必须双击或按F2来触发事件
如INPUT ON 时,则HOTSPOT ON将会失效
START-OF-SELECTION.
"FORMAT HOTSPOT.
WRITE 'Click me!' COLOR 5 HOTSPOT ON.
"FORMAT HOTSPOT OFF.
AT LINE-SELECTION.
WRITE 'Yeah!' COLOR 3.
INPUT
INPUT [{ON|OFF}|{= flag}]
使用ON选项(或者flag不为0)格式化后继输出字段为可输入字段(Input-enabled)。
Input-enabled字段对于输出选项COLOR,INVERSE,andHOTSPOT不再起作用,但INTENSIFIED会有效
可以格式化ULINE为输入字段,但空行SKIP不能。
如果ON, OFF, nor flag都不输入时,默认为ON
如果输出的字段只包含空格,则不会显示为可输入,除非在之前使用了SET BLANK LINES ON。
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.
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.
RESET
与FORMAT语句作用一样
Addition |
State after RESET |
State after Program Start |
State after Reporting Event/List Event |
COLOR |
OFF |
OFF |
OFF |
INTENSIFIED |
OFF |
ON |
ON |
INVERSE |
OFF |
OFF |
OFF |
HOTSPOT |
OFF |
OFF |
OFF |
INPUT |
OFF |
OFF |
OFF |
FRAMES |
ON |
ON |
No change |
FORMAT RESET INTENSIFIED ON.
AS CHECKBOX
如果dobj的第一个字符为"X" or "x"时,复选框会被选中,否则不会被选中
钩选时,第一个字符为设置为"X"(注:不要使用类型为string的dobj,因为此时即使可以输出为复选框,但勾选后,其值不会发生改变)
除了INPUT, NO-GAP, UNDER,其它选项都会被忽略
INPUT OFF时,复制框是只读的
DATA: check1 TYPE c LENGTH 1 VALUE 'X',
check2 TYPE c LENGTH 1 VALUE ' ',
check3 TYPE string VALUE ``.
START-OF-SELECTION.
WRITE: / check1 AS CHECKBOX INPUT OFF, 'Checkbox 1',
/ check2 AS CHECKBOX, 'Checkbox 2',
/ check3 AS CHECKBOX, 'Checkbox 3'.
AT LINE-SELECTION.
READ: LINE 3 FIELD VALUE check1,
LINE 4 FIELD VALUE check2,
LINE 5 FIELD VALUE check2.
WRITE: / '-' NO-GAP FRAMES OFF,check1 NO-GAP,'-' NO-GAP FRAMES OFF,
check2 NO-GAP, '-' NO-GAP FRAMES OFF,check3 NO-GAP, '-' NO-GAP FRAMES OFF.
图标AS ICON
输出图标
图标的名称可以由ICON 类型组里来获得:
可以使用上面定义的图标常量名Name,或者是直接使用其值`@XX@`。另外,这些值也可以通过 SHOWICON 程序来快速查找,SHOWICON 显示了这些图标的详细信息,如:显示宽度、图标常量名、图标内部值(`@XX@`)、是否可打印等:
"注意:@0A@串只能放在字符串的最前面,否则原样输出
WRITE:/ `@15@ Icon`.
WRITE:/ `Icon@15@`.
WRITE:/ `@B_EXEC@ Icon`.
WRITE:/ icon_execute_object AS ICON.
在使用 @XX@ 格式时,可以不需使用AS ICON选项也会解释成图标,但要位于字符串的最前面
还可以通过RSTXICON程序来查看系统中预置的图标:
@XX@格式的图标代码可以直接在文本中使用:
AS SYMBOL
输出符号:打印机可打印的符号??
可以从SYM类型组中获取需要输入的符号名:
或快速从 SHOWSYMB 程序中获取:
WRITE sym_left_hand AS SYMBOL.
WRITE '? ' AS SYMBOL. "还可以直接使用符号常量的值
WRITE ' ? ' AS SYMBOL."不放在字符串首也可输出
AS LINE
画表格线。
画线实质上可以直接使用WRITE来输出"-" and "|",只要这些字符是继续的,它们也会自动的转换为下面这些相应的表格线。
line_space |
Blank |
line_top_left_corner |
Top left corner |
line_bottom_left_corner |
Bottom left corner |
line_top_right_corner |
Top right corner |
line_bottom_right_corner |
Bottom right corner |
line_horizontal_line |
Horizontal line |
line_vertical_line |
Vertical line |
line_left_middle_corner |
T section turned to the left |
line_right_middle_corner |
T section turned to the right |
line_bottom_middle_corner |
Reversed T section |
line_top_middle_corner |
T section |
line_cross |
Cross |
WRITE: /1(30) 'line_space:' RIGHT-JUSTIFIED, line_space as LINE.
SKIP.
WRITE: /1(30) 'line_top_left_corner:' RIGHT-JUSTIFIED, line_top_left_corner as LINE.
SKIP.
WRITE: /1(30) 'line_bottom_left_corner:' RIGHT-JUSTIFIED, line_bottom_left_corner as LINE.
SKIP.
WRITE: /1(30) 'line_top_right_corner:' RIGHT-JUSTIFIED, line_top_right_corner as LINE.
SKIP.
WRITE: /1(30) 'line_bottom_right_corner:' RIGHT-JUSTIFIED, line_bottom_right_corner as LINE.
SKIP.
WRITE: /1(30) 'line_horizontal_line:' RIGHT-JUSTIFIED, line_horizontal_line as LINE.
SKIP.
WRITE: /1(30) 'line_vertical_line:' RIGHT-JUSTIFIED, line_vertical_line as LINE.
SKIP.
WRITE: /1(30) 'line_left_middle_corner:' RIGHT-JUSTIFIED, line_left_middle_corner as LINE.
SKIP.
WRITE: /1(30) 'line_right_middle_corner:' RIGHT-JUSTIFIED, line_right_middle_corner as LINE.
SKIP.
WRITE: /1(30) 'line_bottom_middle_corner:' RIGHT-JUSTIFIED, line_bottom_middle_corner as LINE.
SKIP.
WRITE: /1(30) 'line_top_middle_corner:' RIGHT-JUSTIFIED, line_top_middle_corner as LINE.
SKIP.
WRITE: /1(30) 'line_cross:' RIGHT-JUSTIFIED, line_cross as LINE.
水平线
ULINE [AT [/][<pos>][(<len>)]].
等效下面两个语句:
WRITE [AT [/][<pos>][(<len>)]] SY-ULINE.
WRITE [AT [/][<pos>][(<len>)]] '-----'
ULINE:在当前位置画横线
ULINE AT m(n):在当前行的第m个位置画一个长度为n的横线
UNLINE /m(n):先用“/”换一行,然后在第m个位置画一个长度为n的横线
垂直线
WRITE [AT [/][<pos>]] sy-vline.
或者:
WRITE [AT [/][<pos>]] '|'.
空行
SKIP [<n>].
该语句从当前行开始,在输出屏幕上生成<n>个空行。如果没有指定<n>的值,就输出一个空行。
要将输出定位在屏幕的指定行上(SKIP [<n>]是输入空行后继续在后面输出,而下面的是直接将输出位置先定位到LINE <n>,然后再继续在LINE <n>后输出),请使用:
SKIP TO LINE <n>.
不能使用WRITE: / ' '.语句来直接输出空行,但如果使用以下语句后,WRITE: / ' '.语句还是可以输出空行:
SET BLANK LINES ON|OFF.
SET BLANK LINES ON.
DO 5 TIMES.
WRITE / ' '.
ENDDO.
SET BLANK LINES OFF.
WRITE / '*****'.
FORMAT
FORMAT [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].
使用WRITE输出时,对输出内容的格式设置。但如果WRITE语句中使用了FORMAT中同样的选项设置,将会覆盖FORMAT里的相应设置,所以FORMAT所有设置都可以移到WRITE语句中。
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 ].
source_name与destination必须是fixed length (flat data type)类型的
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.
Left
Center
Right
nterCenter
EXPONENT exp
定义了浮点数的指位位数。不能与ENVIRONMENT TIME FORMAT 、 TIME ZONE一起使用。只能用于f 类型或者 STYLE 选项。
DATA: float TYPE f,
formatted_text TYPE c LENGTH 23.
float = 123456789.
WRITE float TO formatted_text EXPONENT 0.
WRITE: / formatted_text .
WRITE float TO formatted_text EXPONENT 1.
WRITE: / formatted_text .
WRITE float TO formatted_text EXPONENT 16.
WRITE: / formatted_text .
WRITE float TO formatted_text EXPONENT -4.
WRITE: / formatted_text .
123456789,00000000
12345678,900000000E+01
0,0000000123456789E+16
1234567890000,0000E-04
NO-GROUPING
此选项不能与ENVIRONMENT TIME FORMAT 、 TIME ZONE一起使用。对数字类型起作用,使用该选项表示没有千分位
NO-SIGN
此选项不能与ENVIRONMENT TIME FORMAT 、 TIME ZONE一起使用。对数字类型起作用,使用该选项表示+号不输出
DATA: number TYPE i,
formatted_text TYPE c LENGTH 2.
number = -1.
WRITE number TO formatted_text.
WRITE:/ formatted_text.
WRITE number TO formatted_text NO-SIGN.
WRITE:/ formatted_text.
1-
1
NO-ZERO
此选项不能与ENVIRONMENT TIME FORMAT 、 TIME ZONE一起使用。零或者前导零不会显示
DATA: num TYPE n LENGTH 10 VALUE '123',
formatted_text TYPE c LENGTH 10.
WRITE num TO formatted_text.
WRITE:/ formatted_text.
WRITE num TO formatted_text NO-ZERO.
WRITE:/ formatted_text.
DATA: i TYPE i VALUE 0.
WRITE i TO formatted_text NO-ZERO.
WRITE:/ '-',formatted_text,'-'.
0000000123
123
- -
WRITE: '000123',
/ '000123' NO-ZERO.
000123
123
CURRENCY cur
不能与ENVIRONMENT TIME FORMAT 、 TIME ZONE、STYLE一起使用,适用于i, p, f类型。
数据库字段TCURC-WAERS存储了货币代码,一般货币都是精确到小数点后两位,除非这些货币代码在 TCURX-CURRKEY出现,则此时的货币的小数位以TCURX-CURRDEC为准
DATA: int TYPE i VALUE 12345678,
formatted_text TYPE c LENGTH 10.
WRITE int TO formatted_text NO-GROUPING CURRENCY 'JPY'.
WRITE:/ formatted_text.
WRITE int TO formatted_text NO-GROUPING CURRENCY 'EUR'.
WRITE:/ formatted_text.
12345678
123456,78
DECIMALS dec
不能与ENVIRONMENT TIME FORMAT, TIME ZONE, UNIT一起使用,决定了数字的小数位数
如果是P类型,同时使用CURRENCY选项,则会先执行CURRENCY,再应用DECIMALS;如果是f类型则会忽略CURRENCY。
DATA: pack TYPE p LENGTH 8 DECIMALS 4
VALUE '1234.5678',
formatted_text TYPE c LENGTH 10.
WRITE pack TO formatted_text NO-GROUPING DECIMALS 2.
WRITE: / formatted_text.
1234,57
ROUND scale
不能与STYLE, ENVIRONMENT TIME FORMAT, TIME ZONE, UNIT一起使用
作用是:在格式化之前,将 源值 乘以 10-/+scale,然后对于整数(I或P无小数)取整(与DECIMALS选项一起使用时则会保留数位)。对于浮点数f,好像不起作用
DATA: pack TYPE p LENGTH 8 DECIMALS 0
VALUE '12345678',
formatted_text TYPE c LENGTH 24,
f TYPE f VALUE '123.456',
i TYPE i VALUE '12345678'.
WRITE pack TO formatted_text NO-GROUPING ROUND 2 DECIMALS 4.
WRITE: / formatted_text.
WRITE: / f.
WRITE f TO formatted_text NO-GROUPING ROUND 2.
WRITE: / formatted_text.
WRITE i TO formatted_text NO-GROUPING ROUND 2.
WRITE: / formatted_text.
123456,7800
1,2345600000000000E+02
1,2345600000000000E+02
123457
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
UNIT unit
不能与DECIMALS, ROUND, STYLE, ENVIRONMENT TIME FORMAT, TIME ZONE一起使用
单位代码可从数据库表 T006-MSEHI获得,DECAN列决定了小数点的位置,如果指定的单位代码中T006中不存在,则会忽略。如果为P类型同时有CURRENCY选项,则会先执行CURRENCY选项 ,f类型会忽略。
对于f类型,UNIT选项与DECIMALS作用一样 请参见 知识小结.docx文档
DATA: pack TYPE p LENGTH 8 DECIMALS 4
VALUE '1234.0000',
formatted_text TYPE c LENGTH 12.
WRITE pack TO formatted_text NO-GROUPING UNIT 'PC'.
WRITE: / formatted_text.
1234,0000
ENVIRONMENT TIME FORMAT
不能与CURRENCY, DECIMALS, EXPONENT, NO-GROUPING, NO-SIGN, NO-ZERO, ROUND, STYLE, TIME ZONE, or UNIT同时使用
可以使用 SET COUNTRY来设置。对T类型有使用,其他类型忽略
USING { {NO EDIT MASK}|{EDIT MASK mask} }
USING NO EDIT MASK 撤消对 ABAP/4 词典中指定的格式模板的激活。
DATA time TYPE t VALUE '154633'.
WRITE: time,
"这里直接使用的是格式模板,还可以使用词典中已有的转换规则函数
/(8) time USING EDIT MASK '__:__:__'.
154633
15:46:33
示例:因为数据元素(data element)S_FLTIME的domain域S_DURA在词典中关联一个名叫“SDURA”的转换规则(请看后面两个截图),所以msk返回"==SDURA",然后WRITE语句使用该规则将seconds转换分钟的格式进行显示:
DATA: time TYPE s_fltime,
minutes TYPE i,
msk TYPE string, output(6) TYPE c.
DESCRIBE FIELD time EDIT MASK msk.
WRITE: / msk.
minutes = 333.
"将分钟转换小时为单位显示
WRITE: / minutes USING EDIT MASK msk.
"使用转换规则相应的转换函数结果也是一样
CALL FUNCTION 'CONVERSION_EXIT_SDURA_OUTPUT'
EXPORTING
input = 333
IMPORTING
OUTPUT = output.
WRITE: / output.
==SDURA
5:33
5:33
其实规则是由转换函数来实现的,可以通过转换规则找到对应的转换函数:
DD/MM/YY|MM/DD/YY|DD/MM/YYYY|MM/DD/YYYY|DDMMYY|MMDDYY|YYMMDD
选项 |
用途 |
DD/MM/YY |
注,这里的分隔符 / 是一种语法格式,它会在运行时根据用户所设置的具体日期格式来替换它。 |
MM/DD/YY |
|
DD/MM/YYYY |
|
MM/DD/YYYY |
|
DDMMYY |
无分隔符。 |
MMDDYY |
无分隔符。 |
YYMMDD |
无分隔符。 |
- DD/MM/YY and MM/DD/YY
Both additions have the same effect. The date output has a two-digit year value and a separator. The separator and the order are taken from the definition for date output in the user master record. DD/MM/YY 与 MM/DD/YY具有同样的作用,日期输入时使用2位的年表示,并且有日期分隔符,但日期分隔符与年月日的输入顺序是由Client端用户主数据设置的值来决定的,所以这两种格式只是决定了日期输出时年的位数与年月日的输入顺序,它只是个掩码,不是真正日期。 - DD/MM/YYYYand MM/DD/YYYY
Both additions have the same effect. The date output has a four-digit year value and separator. The separator and the order are taken from the definition for date output in the user master record. DD/MM/YYYY und MM/DD/YYYY具有同样的作用,日期输入时使用4位的年表示,并且有日期分隔符,但日期分隔符与年月日的输入顺序是由Client端用户主数据设置的值来决定的,所以这两种格式只是决定了日期输出时年的位数与年月日的输入顺序,它只是个掩码,不是真正日期。 - DDMMYY、MMDDYY
Both additions have the same effect. The date output has a two-digit year value and no separator. The order is taken from the definition for date output in the user master record. ? DDMMYY 与 MMDDYY具有同样的作用,日期输入时使用2位的年表示,但没有日期分隔符,日期年月日的输出顺序是由Client端用户主数据设置的值来决定的,所以这两种格式只是决定了日期输入时年的位数与年月日的输入顺序,它只是个掩码,不是真正日期。 - YYMMDD
This addition provides a date output with a two-digit year value without a separator in the format YYMMDD. 该格式与上面三种不同的时,它本身就是一种日期格式,输出时会按此来格式化输出。
Write具体成什么格式的日期,这与当前用户主数据所设定的格式来显示,用户主数据日期格式可以通过以下方式获取到:
获取当前Client端的日期格式与时间格式:
SELECT datfm INTO lv_datfm FROM usr01
UP TO 1 ROWS WHERE bname = sy-uname.
ENDSELECT.
DATA: date_short TYPE c LENGTH 8,
date_long TYPE c LENGTH 10,
date_mask TYPE c LENGTH 8,
date_mask2 TYPE c LENGTH 8.
WRITE sy-datum TO: date_short,
date_long,
date_mask DD/MM/YY,
date_mask2 DD/MM/YYYY.此处会截断
WRITE: sy-datum,
/ sy-datum YYMMDD.
2012.07.04
120704