Die WRITE
-Anweisung ist eine der fundamentalsten Anweisungen in ABAP zur Ausgabe von Daten. Ihr Hauptzweck ist das
Schreiben von Werten (Variableninhalten, Literalen, Systemfeldern etc.) in die aktuelle Ausgabeliste (auch bekannt
als “klassische Liste” oder “Spool-Liste”). Diese Liste wird typischerweise angezeigt, wenn ein ausführbares Programm (
Report) im Dialog läuft, oder sie wird als Spool-Auftrag gespeichert, wenn das Programm im Hintergrund läuft.
Syntax
Die einfachste Form der Syntax lautet:
WRITE <ausgabe> [formatierungsoptionen].
<ausgabe>
: Dies ist der Wert, der ausgegeben werden soll. Es kann sein:
- Ein Datenobjekt (Variable, Konstante)
- Ein Textliteral (z. B.
'Hallo Welt'
) - Ein Feld-Symbol
- Ein Systemfeld (z. B.
sy-datum
,sy-uzeit
) - Eine Komponente einer Struktur (z. B.
struktur-feldname
) - Ein Ausdruck
[formatierungsoptionen]
: Optionale Zusätze, um die Position und das Aussehen der Ausgabe zu steuern.
Positionierung auf der Liste
Standardmäßig wird jede WRITE
-Anweisung direkt hinter der vorherigen Ausgabe in der aktuellen Zeile fortgesetzt (mit
einem Leerzeichen dazwischen). Man kann die Position aber genau steuern:
-
Neue Zeile (
/
):WRITE / <ausgabe>.Beginnt die Ausgabe in einer neuen Zeile in der ersten Spalte (Spalte 1).
-
Absolute Position (
AT <spalte>
):WRITE AT <spalte> <ausgabe>.WRITE AT /<spalte> <ausgabe>. " Kombiniert: Neue Zeile und SpalteBeginnt die Ausgabe in der aktuellen Zeile (oder einer neuen Zeile bei
AT /
) ab der angegebenen Spaltennummer<spalte>
. -
Position mit Längenangabe (
AT <spalte>(<länge>)
):WRITE AT <spalte>(<länge>) <ausgabe>.WRITE AT /<spalte>(<länge>) <ausgabe>.Gibt
<ausgabe>
ab Spalte<spalte>
aus, aber reserviert dafür genau<länge>
Zeichen. Der Inhalt wird ggf. abgeschnitten oder aufgefüllt (Standard: rechtsbündig für Zahlen, linksbündig für Text).
Wichtige Formatierungsoptionen
Es gibt zahlreiche Optionen, um das Aussehen der Ausgabe zu beeinflussen:
Ausrichtung:
LEFT-JUSTIFIED
: LinksbündigCENTERED
: ZentriertRIGHT-JUSTIFIED
: Rechtsbündig (Standard für numerische Typen) Keine Lücke:NO-GAP
: Unterdrückt das automatische Leerzeichen zwischen direkt aufeinanderfolgendenWRITE
-Ausgaben in derselben Zeile. Formatierungsmasken:USING EDIT MASK <maske>
: Wendet eine Maske an.<maske>
ist ein Literal oder eine Variable, z. B.'__:__'
für Uhrzeit,'RR__,___,___.__'
für Zahlen,'TT.MM.JJJJ'
für Datum.USING NO EDIT MASK
: Unterdrückt die Anwendung von Standard-Konvertierungsroutinen (z. B. für Datumsformate). Zahlenformate:CURRENCY <wfeld>
: Formatiert einen Betrag gemäß dem Währungsschlüssel in<wfeld>
. Berücksichtigt die Anzahl der Dezimalstellen und das Tausendertrennzeichen der Währung.DECIMALS <anz>
: Gibt den Wert mit<anz>
Dezimalstellen aus.NO-ZERO
: Gibt nichts aus, wenn der Wert Null oder der Initialwert des Datentyps ist.NO-SIGN
: Unterdrückt die Ausgabe des Vorzeichens (+/-).EXPONENT <exp>
: Für Fließkommazahlen (Typf
), Ausgabe mit Exponent<exp>
. Erscheinungsbild (Farben, etc.):COLOR <farbe> | COL_<key> | <n>
: Setzt die Farbe.<farbe>
kann1
-7
sein,<key>
kann z. B.HEADING
,NORMAL
,TOTAL
,POSITIVE
,NEGATIVE
sein.INTENSIFIED [ON|OFF]
: Verstärkte (helle) Darstellung.INVERSE [ON|OFF]
: Inverse Darstellung (Hintergrund-/Vordergrundfarbe vertauscht).INPUT [ON|OFF]
: Macht das Feld eingabebereit (nur sinnvoll in Listen, die zur Eingabe dienen). Spezielle Ausgaben:AS CHECKBOX
: Gibt das Feld als Ankreuzfeld aus (Wert ‘X’ = angekreuzt, ’ ’ = nicht angekreuzt).AS SYMBOL
: Gibt ein vordefiniertes Symbol aus (z. B.SYM_BULLET
,SYM_PHONE
; siehe TypgruppeSYM
).AS ICON
: Gibt ein Icon aus (z. B.ICON_OKAY
,ICON_CANCEL
; siehe TypgruppeICON
).AS LINE
: Zeichnet Linien (verwendet mitULINE
,VLINE
).
Beispiele
1. Einfache Ausgaben und Zeilenumbrüche
DATA: text1 TYPE string VALUE 'Hallo', text2 TYPE string VALUE 'ABAP Welt!', count TYPE i VALUE 10, today TYPE d.
today = sy-datum. " Heutiges Datum (z.B. 20250420)
WRITE text1. " Ausgabe: HalloWRITE text2. " Ausgabe: ABAP Welt! (mit Lücke)WRITE / 'Neuer Absatz.'. " Ausgabe: Neuer Absatz. (in neuer Zeile)WRITE / 'Anzahl:'.WRITE count. " Ausgabe: 10 (rechtsbündig in Standardlänge)WRITE / 'Datum:'.WRITE today. " Ausgabe: 20.04.2025 (Standardformat aus Benutzerstamm)
2. Positionierung
WRITE: / AT 5 'Text in Spalte 5', / AT 10(20) 'Begrenzter Text ab Spalte 10 auf 20 Zeichen', sy-vline, " Vertikale Linie an aktueller Position AT 40 'Nach der Linie'.
3. Formatierungsoptionen
DATA: price TYPE p DECIMALS 2 VALUE '1234.99', currency_code TYPE waers VALUE 'EUR', datum TYPE d VALUE '20250420', uhrzeit TYPE t VALUE '103000'.
WRITE: / 'Preis (Standard):', price.WRITE: / 'Preis (Währung):', price CURRENCY currency_code.WRITE: / 'Preis (Zentriert):', price CENTERED.WRITE: / 'Preis (Keine Nullen):' NO-ZERO price.
WRITE: / 'Datum (Maske):', datum USING EDIT MASK '____/__/__'. " Ausgabe: 2025/04/20WRITE: / 'Uhrzeit (Maske):', uhrzeit USING EDIT MASK '__:__:__'. " Ausgabe: 10:30:00
WRITE: / 'Wichtige Meldung' COLOR COL_NEGATIVE INTENSIFIED.WRITE ' hier' COLOR COL_NEGATIVE INTENSIFIED NO-GAP. " Direkt dran, ohne Lücke
4. Spezielle Ausgaben
DATA: checkbox_val TYPE c LENGTH 1 VALUE 'X'.
WRITE: / 'Status:' AS ICON, icon_led_green AS ICON NO-GAP.WRITE: / 'Option A:' AS CHECKBOX, checkbox_val AS CHECKBOX INPUT. " EingabebereitWRITE: / 'Bullet Point:' AS SYMBOL, sym_bullet AS SYMBOL NO-GAP, ' Text'.ULINE AT /1(30). " Horizontale Linie über 30 Spalten in neuer Zeile
Wichtige Hinweise
- Die
WRITE
-Anweisung ist fundamental für die klassische ABAP-Listverarbeitung. - Die Breite der Liste wird normalerweise durch den
LINE-SIZE
Zusatz derREPORT
-Anweisung bestimmt. - In modernen ABAP-Anwendungen (z. B. mit ALV = ABAP List Viewer, oder Fiori Apps) wird die Darstellung der Daten meist
von den UI-Frameworks übernommen. Dort wird
WRITE
seltener für die primäre Datenanzeige verwendet, ist aber weiterhin nützlich für einfache Protokolle, Debugging oder das Erzeugen einfacher Spool-Listen im Hintergrund.