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

 

posted @ 2015-02-15 13:51  江正军  阅读(29585)  评论(0编辑  收藏  举报