ABAP Keyword Documentation → ABAP − Reference → SAP GUI User Dialogs → Classic Lists → Creating Lists
WRITE
Other versions: 7.31 | 7.40 | 7.54
Syntax
WRITE {[AT] [/][pos][(len||*)]} dobj
[UNDER other_dobj]
[NO-GAP]
[int_format_options]
[ext_format_options]
[list_elements]
[QUICKINFO info].
Extras
1. ... [AT] [/][pos][(len||*)]
2. ... UNDER other_dobj
3. ... NO-GAP
4. ... QUICKINFO info
Effect
This statement formats the content of the data object dobj
and writes it to the current page of the current list in the list buffer. This is either a
screen list in the list buffer or a
spool list. dobj
is a
general expression position with the restriction that no
arithmetic expressions and no
bit expressions can be specified directly.
For dobj
, data types are permitted, which are grouped under the generic type simple
:
- All flat data types; flat
structures are handled like a data object of type
c
and can only contain any character-like components.
- The data types
STRING
andXSTRING
- enumeration types; the name (maximum three characters) of the enumerated constant is used in uppercase letters, which defines the the current enumerated value.
Formatting the Output
The output is formatted
-
in accordance with the same predefined formats as in the statement
WRITE ... TO
or -
with the additions
int_format_options
.
ext_format_options
allows
output to be formatted and the additions list_elements
allow specific list elements to be displayed. By default, adjacent characters "-" and "|" in a list are joined together to form continuous lines.
Output Position
The output position is either determined by the
list cursor, or specified using pos
after AT
or by UNDER
. The list cursor itself can be adjusted using NO-GAP
.
At the start of every output, the output position in the list buffer is the same as the output position
in the list representation. The positions of individual characters within an output field can differ between the list representation and the list buffer. In both cases, however, the
output length is the same.
Output Length
The output length is
determined either by the data type of dobj
or can be specified after AT
using len||
. len
specifies an absolute length and or
**
are used to prevent unwanted truncations.
Page Break
If the last line of the current page is reached and a subsequent line is output, a new page is generated.
The maximum number of lines is determined by the addition LINE-COUNT
of the
introductory statement
or the statement NEW-PAGE
. For
the basic list, the event END-OF-PAGE
is raised when the area reserved for the
page footer is reached, and a new page is then created.
Line Break
Once the list cursor has been positioned with a previous output statement, if the output length is larger than the area available in the current line of the list buffer, the output goes to the next line. If this line is also not sufficient for a complete output, the output length is shortened accordingly and the output is displayed in this line.
If the list cursor is positioned using by specifying pos
or a statement
BACK
, NEW-LINE
,
NEW-PAGE
,
POSITION
or SKIP
and not with a previous output statement, the output is always displayed in the current line, and the output length is shortened, if necessary.
List Cursor
After the output is displayed, the list cursor is positioned by default in the second place after the
output; the sy-colno
and sy-linno
system fields are set accordingly.
Field Help and Input Help
If the data object dobj
is declared with reference to a data type from ABAP Dictionary, the field and input help defined here are available in the list displayed on the screen.
Notes
-
In the default setting, the system does not place a new line that contains only blank characters in
a list. A blank line is only outputed if the list cursor is directly positioned in an existing line,
in other words, not using a line break. This setting can be changed using the statement
SET BLANK LINES ON
. - Arithmetic expressions and bit expressions cannot be specified directly, but can be specified in embedded expressions in string templates.
-
Control characters for line breaks or tabs are ignored in strings that are displayed using
WRITE
. These characters are displayed as #, like all other non-reproducible characters. -
If the start of a character string, which is output with
WRITE
, contains an internal ID (key or internal name) for an icon (between two characters "@"), this is displayed in the list as an icon - even without additionAS ICON
. This can lead to unwanted of icons and unexpected effects in terms of the output length. By default, the output length is determined by the length of the character string. -
Obsolete calculations used in connection with
WRITE
are still possible outside of classes. -
The methods of the class CL_DEMO_OUTPUT demonstrate how simple
WRITE
output can be replaced by using a suitable output stream.
Example
WRITE
output for data objects, function calls, string expressions and method calls.
DATA text TYPE string VALUE 'Hello classical list'.
WRITE / text.
WRITE / |{ text WIDTH = 40 ALIGN = RIGHT }|.
WRITE / to_upper( text ).
WRITE / |{ 6 * 7 }|.
WRITE / `4` && `2`.
WRITE / cl_abap_conv_codepage=>create_out( codepage = `UTF-8`
)->convert( text ).
Addition 1
... [AT] [/][pos][(len||*)]
Effect
The output position and length for the current statement WRITE
can be defined
after AT
. The output position of existing outputs in the list buffer is overwritten
with the output length of the new output. Once an existing output has been overwritten, the list cursor is placed at the next position (and not the position after next).
The components of the specified position and length /
,pos
and len
or or
*
must be specified with no blanks and in the given order. If position and length are only specified as numeric literals, the addition AT
can be omitted.
-
/
is used to display the output in the next line after the current line. If no positionpos
is specified, the output is written from the first column onward. If specified immediately after the positioning of the list cursor in a list line (that is not the result of a previous output statement),/
is ignored. This is the case during initial writing to a list page, and after explicit positioning with the statementsSKIP
,NEW-LINE
,NEW-PAGE
andBACK
. -
The output position is determined by specifying
pos
.pos
expects a data object of typei
that contains a value within the current list width. If the value inpos
is less than 1, it is ignored. If it is greater than the current list width, there is no output. -
The output length is determined by specifying
len
,*
or**
in parentheses.Len
can be used to specify an absolute value.len
expects a data object of typei
which contains a value greater than zero and which is within the current list width. If islen
specified, the number of characters displayed in the list can differ from the number of characters stored in the list buffer. By specifying*
or**
, the output length depends on the data type of the data objectdobj
, as shown in the following table.
Data Type | * | ** |
---|---|---|
c |
Number of columns needed in the list to display the entire content; closing spaces are not taken into account. This length can be greater than theimplicit length. | Doubled length of the data object. |
string |
implicit length | Doubled length of contained characters. |
n , x , xstring , utclong |
Implicit length | implicit length |
d |
10 | 10 |
t |
8 for 24-hour format, 11 for 12-hour format | 8 without using the addition ENVIRONMENT TIME FORMAT , 11 using this addition |
(b , s ), f , i , int8 , p |
Length required to output the current value, including thousand separators. The value used hereis the value after the application of the possible additions CURRENCY , DECIMALS ,NO-SIGN , ROUND or UNIT . |
Length required to output the maximum possible values, including signs and thousand separators.The value used here is the value after the application of the possible additions CURRENCY , DECIMALS ,NO-SIGN , ROUND or UNIT . |
decfloat16 , decfloat34 |
The same as for ** applies here. However, leading and trailing blanks are removed. |
24 or 26. These are the predefined output lengths that can also include thousand separators. Ifthe values are too large, exceptions may be raised if the format O_SIGN_AS_POSTFIX is specified after STYLE . |
When a conversion routine
is executed with reference to a data type in ABAP Dictionary, if len
is specified,
the routine is performed for the relevant specified length, and if or
* is specified, the routine is performed for the output length specified in ABAP Dictionary.
If
or
is specified, the output length is
then determined from the conversion routine result, using the rules explained above. If
or
is specified when using edit masks
(
USING EDIT MASK
, DD/MM/YYYY ...
), special
rules apply. or
* cannot be entered in combination with the option
TIME ZONE
.
Notes
-
Specifying the output length
len
afterAT
should always be preferred over specifying a length for the data objectdobj
(substring access). In contrast to partial field access, the specification of the output length is not restricted to byte-type and character-type data objects. Furthermore, the assignment of the list output to the data object is lost during a partial field access, which means that it can no longer be addressed in the list. -
The specification of
*
or**
for the output length ensures that, regardless of data type, all characters fromdobj
are displayed, even when more columns are needed in the list than positions in the list buffer. With*
, the minimum possible length is used, and with**
, the maximum possible length is used. -
When an output position is specified within an existing output, you should ensure that the position
always refers to the characters stored in the list buffer. If characters that require more than one
column in the list are displayed, the displayed output position can differ from the specified output
position. In addition, the displayed content of a partially overwritten output can be shifted, depending on the characters that overwrote the output.
Example
Displays a text field text
at different positions, with different output lengths.
DATA: text TYPE string VALUE '0123456789ABCDEF',
col TYPE i VALUE 25,
len TYPE i VALUE 5.
WRITE text.
WRITE /5(10) text.
WRITE AT col(len) text.
Addition 2
... UNDER other_dobj
Effect
The output is made in the current line at the place where the data object other_dobj
was the output of a previous WRITE
statement. The data object other_dobj
must be written exactly as in the corresponding WRITE
statement, including
all possible specified offset/lengths and so on. If the data object other_dobj
was not specified before, the addition is ignored. If it was specified more than once, the horizontal output position of the last WRITE
statement is used.
The addition UNDER
cannot be used together with a position pos
specified after AT
. For other_dobj
, a
boxed component or component of a boxed component cannot be specified.
Notes
-
Vertical positioning must be carried out by the user. If the
list cursor is positioned
underneath the output of
other_dobj
, the output also appears underneath. If the list cursor is positioned in the same line in whichother_dobj
is displayed, this output is overwritten. If the list cursor is positioned above the output ofother_dobj
, the output also appears above. -
The data object
other_dobj
should be defined globally in the current program. Using local data objects in procedures may lead to unwanted results, for example, if the components of the same structures are used in different procedures. -
The data object
other_dobj
can also be specified as a field symbol or as a dereferenced data reference. In this case, the field symbol or data reference must not point to a row of an internal table.
Example
Table-type output of flight connections.
DATA: carrid TYPE spfli-carrid,
connid TYPE spfli-connid.
WRITE: 10 'Carrier', 40 'Connection'.
ULINE.
SELECT carrid, connid
FROM spfli
INTO (@carrid, @connid).
WRITE: / carrid UNDER 'Carrier',
connid UNDER 'Connection'.
ENDSELECT.
Addition 3
... NO-GAP
Effect
The list cursor is positioned directly after the output (and not in the place after the next place in the list buffer).
Addition 4
... QUICKINFO info
Effect
A tooltip is associated
with the output. If the mouse cursor is placed on the output area of dobj
,
the content of info
appears in a colored rectangle. info
expects a character-like data object with length 80. Character strings that exceed this length are cut off after position 80.
The addition QUICKINFO
is ignored by fields that are ready for input and
line elements. If a list
output is overwritten by another output, then no Quickinfo for the overwritten field appears at or after the position where overwriting starts.
Note
The character @ is represented internally in the tooltip text by @@ and it occupies two places rather than just one. This means that for every @ character, there is one less character available to display it.
Example
Additional information on the output of date and time.
WRITE: (10) sy-datum QUICKINFO 'Date of list creation',
(8) sy-uzeit QUICKINFO 'Time of list creation'.
Exceptions
See WRITE - TO