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,上面語法中的所有選項都可以在下面體現,比如對顏色、圖標等:

image012

image013

image014

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

左對齊

數字數據類型 FI  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

請參考WRITE … TO的格式

UNDERNO-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',
      
(8sy-uzeit QUICKINFO 'Time of list creation'.

image015

COLOR INTENSIFIEDINVERSE

ALV顏色輸出,請參數ALV.docx文檔中的顏色章節。

 

COLOR {{{color [ON]}|OFF}|{= col}}

如果INVERSE設置為OFF(默認),則該選項設置的為輸出字符的背景色,INVERSEON時,設置的為輸出字符的前景色(即字符本身的顏色)

你可以使用靜態的color,或者使用動態的col。使用color時,可以省略ONcol是一個類型為i的變量。colorcol的取值如下表:

color

col

顏色描述

COL_BACKGROUND

注:與其也不同,這里不能取數值0

其他可以兩種取值:一種是1~7之間

的數值,另一種是后面 COL_* 開頭

的顏色常量

0

GUI-dependent

{1 |COL_HEADING }

1

Gray-blue

{ 2 |COL_NORMAL }

2

Light gray

{ 3 | COL_TOTAL }

3

Yellow

{ 4 | COL_KEY }

4

Blue-green

{ 5 | COL_POSITIVE }

5

Green

{ 6 | COL_NEGATIVE }

6

Red

{ 7 | COL_GROUP }

7

orange桔黃

 

OFF選項等效於colorCOL_BACKGROUND或者col0,這也是默認值,此時色依賴於GUI window

 

INTENSIFIED [{ON|OFF}|{= flag }]

INTENSIFIED選項設置background color高亮顯示(即顏色加深)。如果指定為ON或者flag為非0時,background color會使用高亮方式來顯示(默認),否則為OFFflag0時,使用弱的background color。例外:An exception to this is the COL_BACKGROUND background color, used by INTENSIFIED OFF to control the foreground color.

如果ONOFFflag都沒指定時,默認為ON,即高亮顯示

 

INVERSE [{ON|OFF}|{= flag}]

該選項主要是用來設置COLOR選項是設置背景還是前景色,flagi類型。如果指定為ON或者flag為非0時,則COLOR用來設置前景色(注:COLOR COL_BACKGROUND INVERSE ON時,前景與背景色一樣,所以此時看不到文字);如果為OFF或者flag0時,則COLOR用來設置背景色的(默認)

如果ONOFFflag都沒指定時,默認為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.

image016

 

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.

image017

HOTSPOT

HOTSPOT [{ON|OFF}|{= flag}]

鼠標放上去會顯示成手的形狀

如果為ON或者flag為非0,則放上去會顯示手,此時的單擊就如同雙擊(等效按F2);否則不會發生變化。

如果ONOFFflag都沒指定時,默認為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.

image018

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.

image019

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.

image020

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"(注:不要使用類型為stringdobj,因為此時即使可以輸出為復選框,但勾選后,其值不會發生改變)

除了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.

image021

圖標AS ICON

輸出圖標

圖標的名稱可以由ICON 類型組里來獲得:

image022

可以使用上面定義的圖標常量名Name,或者是直接使用其值`@XX@`。另外,這些值也可以通過 SHOWICON 程序來快速查找,SHOWICON 顯示了這些圖標的詳細信息,如:顯示寬度、圖標常量名、圖標內部值(`@XX@`)、是否可打印等:

image023

 

"注意:@0A@串只能放在字符串的最前面,否則原樣輸出
WRITE:/ `@15@ Icon`.
WRITE:/ `Icon@15@`.
WRITE:/ `@B_EXEC@ Icon`.
WRITE:/ icon_execute_object AS ICON.

image024

在使用 @XX@ 格式時,可以不需使用AS ICON選項也會解釋成圖標,但要位於字符串的最前面

 

還可以通過RSTXICON程序來查看系統中預置的圖標:

image025

 

@XX@格式的圖標代碼可以直接在文本中使用:

image026

image027

AS SYMBOL

輸出符號:打印機可打印的符號??

可以從SYM類型組中獲取需要輸入的符號名:

image028

或快速從 SHOWSYMB 程序中獲取:

image029

WRITE sym_left_hand AS SYMBOL.
WRITE '? ' AS SYMBOL. "還可以直接使用符號常量的值
WRITE ' ? ' AS SYMBOL."
不放在字符串首也可輸出

image030

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.

image031

水平線

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 / '*****'.

image032

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_namedestination必須是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 ZONESTYLE一起使用,適用於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,然后對於整數(IP無小數)取整(與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 elementS_FLTIMEdomainS_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

其實規則是由轉換函數來實現的,可以通過轉換規則找到對應的轉換函數:

image033

image034

image035

image036

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
    端用戶主數據設置的值來決定的,所以這兩種格式只是決定了日期輸出時年的位數與年月日的輸入順序,它只是個掩碼,不是真正日期。
  • DDMMYYMMDDYY
    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.

image037

image038

image039

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.
此處會截斷

image040

WRITE: sy-datum,
     / sy
-datum YYMMDD.

2012.07.04

120704

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM