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