ABAP WRITE、WRITE TO、FORMAT语句

声明:原创作品,转载时请注明文章来自SAP师太技术博客:www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4292819.html

WRITE. 22

WRITE {[AT] [/][pos][(len|*|**)]}24

int_format_options. 25

UNDER、NO-GAP. 25

QUICKINFO.. 25

COLOR 、INTENSIFIED、INVERSE. 26

HOTSPOT. 27

INPUT. 28

FRAMES. 28

RESET. 29

AS CHECKBOX. 29

图标AS ICON.. 29

AS SYMBOL. 31

AS LINE. 32

水平线... 33

垂直线... 34

空行... 34

FORMAT. 34

WRITE … TO.. 35

LEFT-JUSTIFIED|CENTERED|RIGHT-JUSTIFIED.. 35

EXPONENT exp. 35

NO-GROUPING.. 36

NO-SIGN.. 36

NO-ZERO.. 36

CURRENCY cur. 36

DECIMALS dec. 37

ROUND scale. 37

UNIT unit. 37

ENVIRONMENT TIME FORMAT. 38

USING { {NO EDIT MASK}|{EDIT MASK mask} }38

DD/MM/YY|MM/DD/YY|DD/MM/YYYY|MM/DD/YYYY|DDMMYY|MMDDYY|YYMMDD

WRITE

WRITE {[AT] [/][pos][(len|*|**)]} dobj
      [UNDERother_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}
      ]
      [QUICKINFOinfo].

在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

请参考WRITE … TO的格式

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


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选项等效于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,或者是直接使用其值`@[email protected]`。另外,这些值也可以通过 SHOWICON 程序来快速查找,SHOWICON 显示了这些图标的详细信息,如:显示宽度、图标常量名、图标内部值(`@[email protected]`)、是否可打印等:

"注意:@[email protected]串只能放在字符串的最前面,否则原样输出
WRITE:/ `@[email protected] Icon`.
WRITE:/ `[email protected]@`.
WRITE:/ `@[email protected] Icon`.
WRITE:/ icon_execute_object AS ICON.

在使用 @[email protected] 格式时,可以不需使用AS ICON选项也会解释成图标,但要位于字符串的最前面

还可以通过RSTXICON程序来查看系统中预置的图标:

@[email protected]格式的图标代码可以直接在文本中使用:

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]
    { { [EXPONENTexp]
        [NO-GROUPING]
        [NO-SIGN]
        [NO-ZERO]
        [CURRENCYcur]
        { {[DECIMALSdec][ROUNDscale]}|[UNITunit]}
}
      | {[ENVIRONMENT TIME FORMAT][TIME ZONE tz]} [STYLEstl]
}
    [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 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端用户主数据设置的值来决定的,所以这两种格式只是决定了日期输出时年的位数与年月日的输入顺序,它只是个掩码,不是真正日期。
  • 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.

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

时间: 2024-10-14 05:09:57

ABAP WRITE、WRITE TO、FORMAT语句的相关文章

ABAP:for all entries in 语句

在ABAP开发中,对于不能使用join的聚集表或者需要使用SELECT 的内表,我们一般使用for all entries in 语句将该表与内表串联,查询出需要的数据,例如: BSEG聚集表为例,如下: SELECT bseg~kunnr bseg~lifnr bseg~belnr INTO TABLE itab_bseg FROM bseg FOR ALL ENTRIES IN itab_main WHERE bukrs in _bukrs and ( belnr = itab_main-b

ABAP程序互调用:SUBMIT、CALL TRANSACTION、LEAVE TO TRANSACTION

Calling Executable Programs(SUBMIT)... 343 设置选择屏幕参数值(SUBMIT...WITH)... 343 实例一:参数传递... 345 实例二:参数传递及返回值接收... 346 控制Called Programs中LISTS输出... 348 修改输出LISTS行列数... 348 将被调程序的输出列表打印到spool system.. 349 将输出列表保存到ABAP memory. 349 使用LEAVE语句退出被调程序... 350 CALL

ABAP 常用函数

函数名 描述 SD_VBAP_READ_WITH_VBELN 根据销售订单读取表vbap中的信息EDIT_LINES 把READ_TEXT返回的LINES中的行按照TDFORMAT="*"重新组织VIEW_MAINTENANCE_CALL 维护表视图 函数名 描述 DY_GET_FOCUS 获得屏幕焦点 DY_GET_SET_FIELD_VALUE 获得或者设置屏幕字段的值 函数名 描述 F4IF_INT_TABLE_VALUE_REQUEST 显示检索help READ_TEXT 读

【SAS BASE】FORMAT Statement及PROC FORMAT

1 FORMAT Profit Loss DOLLAR8.2 Saledate MMDDYY8.; 2 PUT Profit DOLLAR8.2 LOSS DOLLAR8.2 Saledate MMDDYY8.; FORMAT语句指定每个变量具体的格式;这里特别要注意的是,FORMAT语句中,指定Profit和Loss同一个格式,为DOLLAR8.2. 1 DATA Carsurvey; 2 INFILE 'c:\myrawdata\cars.dat'; 3 INPUT Age Sex Inco

abap常用函数

获取生产定单状态 ----------------------------------------------------- call function 'STATUS_TEXT_EDIT' EXPORTING flg_user_stat    = 'X' objnr            = LO_OBJNR only_active      = 'X' spras            = sy-langu IMPORTING line             = ls_statu EXCE

SAS PROC PRINT 常用选项和语句说明

常用选项1.使用选项OBS=修改观测序号标签2.使用NOOBS选项不显示观测序号列3.使用ID语句在输出中取代观测序号列4.使用VAR选择输出的变量5.使用WHERE语句选择输出的观测6.使用数据集选项FIRSTOBS=和使用OBS=来控制观测输出的区间 制作增强型报表:1.使用SUM语句对变量进行求和2.使用SUM语句对变量进行分组汇总 改进报表显示:1.添加标题(TITLE)和脚注(FOOTNOTE)2.使用FORMAT语句规定输出格式3.使用LABEL语句规则输出变量的标签(需要在PROC

列表屏幕(List Screen)

声明:原创作品,转载时请注明文章来自SAP师太技术博客:www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4292407.html 列表屏幕(List Screen). 205 生成列表屏幕... 205 复杂LIST. 206 标准LIST. 206 standard page header. 206 自定义LIST. 207 自定义Page H

屏幕 Dynpro

声明:原创作品,转载时请注明文章来自SAP师太技术博客:www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4292250.html 对话屏幕Dynpro(SE51). 11 屏幕元素... 11 屏幕属性... 11 PAI事件的触发.屏幕元素Function Code设置... 12 屏幕流逻辑Screen Flow Logic. 12 对话屏幕

JCL笔记

本文转自<http://leowzy.iteye.com/blog/888931> ----------------------------------------------------------------------------- 整理笔记 很TM烦,不过效果确实蛮好的,所以...硬着头皮,接着写吧. 笔记内容: 作业控制语言JCL(类似UNIX下的shell语言)是批处理作业的用户与操作系统的接口 . 作业(作业步1,作业步2,……,作业步n),作业步1……作业步n是顺序执行的 .