ABAP - Keyword Documentation →  ABAP - Reference →  User Dialogs →  Classic Lists →  Creating Lists → 


Quick Reference


WRITE {[AT] [/][pos][(len|*|**)]} dobj
      [UNDER other_dobj]
      [QUICKINFO info].


1. ... [AT] [/][pos][(len|*|**)]

2. ... UNDER other_dobj

3. ... NO-GAP

4. ... QUICKINFO info


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:

Formatting the Output

The output is formatted in accordance with

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 by the data type of dobj or it can be specified with len|*|** after AT. len specifies an absolute length, whereas * or ** ensures that characters are not truncated by mistake.

Page Break

If the last line of the current page is reached and a subsequent line is displayed, a new page is created. The maximum number of lines is determined by the addition LINE-COUNT of the introductory statement or the statement NEW-PAGE. For the basics 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 is positioned with a previous output statement and if the output length is greater 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.



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_codepage=>convert_to(
          source      = text
          codepage    = `UTF-8` ).

Addition 1

... [AT] [/][pos][(len|*|**)]


The output position and length for the current statement WRITE can be defined after AT. The output position of existing output in the list buffer is overwritten with the output length of the new output. Once an existing output is overwritten, the list cursor is placed in the next place (and not the place after this one).

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.

Data Type * **
c Number of columns needed in the list to display the entire content; trailing blanks are ignored. This length can be greater than the implicit length. Doubled length of data object
string Implicit length Doubled length of contained characters.
n, x, xtring 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 here is 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. If the values are too large, exceptions can be raised if one of these formats - O_SIGN_AS_POSTFIX, O_MONETARY, O_EXTENDED_MONETARY - is defined under 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.



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


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.



Table-like output of flight connections.

DATA: carrid TYPE spfli-carrid,
      connid TYPE spfli-connid.

WRITE: 10 'Carrier', 40 'Connection'.

SELECT carrid, connid
       FROM spfli
       INTO (@carrid, @connid).
  WRITE: / carrid UNDER 'Carrier',
           connid UNDER 'Connection'.

Addition 3

... NO-GAP


The list cursor is positioned directly after the output (and not in the place after the next place in the list buffer).


The output of the two WRITE statements is "NoGap".

WRITE: 'No' NO-GAP, 'Gap'.

Addition 4

... QUICKINFO info


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, no tooltip for the overwritten field appears at or after the position where overwriting starts.


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.


Additional information about date and time output.

WRITE: (10) sy-datum QUICKINFO 'Date of list creation',
       (8)  sy-uzeit QUICKINFO 'Time of list creation'.



WRITE - Output Length
WRITE - int_format_options
WRITE - ext_format_options
WRITE - Lines
WRITE - list_elements