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

相關文章
相關標籤/搜索