Leerzeilen und Zeilensprung in ABAP Reports mit SKIP

kategorie
ABAP-Statements
Veröffentlicht
autor
Johannes

Die SKIP-Anweisung dient ausschließlich der vertikalen Positionierung des Ausgabecursors innerhalb der * klassischen ABAP-Listverarbeitung*. Wenn du also einen Report schreibst, der seine Ausgabe direkt mit WRITE, ULINE etc. auf eine Liste (Bildschirmliste oder Spool-Liste) schreibt, kannst du mit SKIP:

  1. Leerzeilen einfügen, um vertikalen Abstand zu schaffen.
  2. Die Ausgabe an den Anfang einer bestimmten Zeile auf der aktuellen Seite verschieben.

Wichtiger Kontext: SKIP hat keine Bedeutung oder Auswirkung in modernen ABAP-UI-Technologien wie ALV Grids ( <code>cl_salv_table</code>, <code>cl_gui_alv_grid</code>), Dynpros (Screen Painter), Web Dynpro ABAP oder SAP Fiori. Es ist ein Werkzeug für die traditionelle, zeilenorientierte Listenerstellung.

Syntax

Es gibt drei Varianten der SKIP-Anweisung:

1. Eine Leerzeile einfügen

SKIP.

Dies ist die einfachste Form und fügt genau eine Leerzeile nach der aktuellen Cursorposition ein. Die nächste Ausgabe startet auf der Zeile unterhalb dieser Leerzeile.

2. Mehrere Leerzeilen einfügen

SKIP <n>.

Hierbei ist <n> ein numerischer Ausdruck (Literal oder Variable, typischerweise vom Typ I), der die Anzahl der einzufügenden Leerzeilen angibt.

  • Ist <n> positiv, werden <n> Leerzeilen eingefügt.
  • Ist <n> Null oder negativ, hat die Anweisung keine Wirkung.
  • Wenn das Einfügen der Leerzeilen dazu führt, dass das Seitenende überschritten wird (definiert durch LINE-COUNT in der REPORT-Anweisung), wird automatisch ein Seitenumbruch durchgeführt und die restlichen Leerzeilen auf der neuen Seite eingefügt.

3. Zu einer bestimmten Zeile springen

SKIP TO LINE <zeile>.

Hierbei ist <zeile> ein numerischer Ausdruck (Literal oder Variable, Typ I), der die Ziel-Zeilennummer auf der * aktuellen Seite* angibt (Zeilennummerierung beginnt bei 1).

  • Der Ausgabecursor wird an den Anfang der Zeile <zeile> positioniert.
  • Die nachfolgende Ausgabe (z. B. mit WRITE) beginnt in dieser Zeile.
  • Die Anweisung hat keine Wirkung, wenn die Zeilennummer <zeile> auf der aktuellen Seite bereits ausgegeben wurde (d. h. der Cursor steht bereits in oder nach dieser Zeile) oder wenn <zeile> größer als die maximale Zeilenzahl pro Seite ist.

Beispiele

1. Leerzeilen einfügen

REPORT Z_SKIP_EXAMPLE_1 LINE-COUNT 15.
START-OF-SELECTION.
WRITE / 'Berichtsüberschrift'.
ULINE. " Linie unter der Überschrift
SKIP 2. " Zwei Leerzeilen Abstand
WRITE / 'Abschnitt 1: Details'.
WRITE / 'Detailzeile 1.1'.
SKIP. " Eine Leerzeile Abstand
WRITE / 'Abschnitt 2: Zusammenfassung'.
WRITE / 'Zusammenfassung Zeile 2.1'.
SKIP 5. " Fünf Leerzeilen Abstand (kann Seitenumbruch auslösen)
WRITE / 'Ende des Berichts'.

2. Zu einer Zeile springen

REPORT Z_SKIP_EXAMPLE_2 LINE-COUNT 25.
START-OF-SELECTION.
WRITE / 'Start auf Zeile 1'.
SKIP TO LINE 5.
WRITE AT 10 'Dieser Text steht in Zeile 5, Spalte 10'.
SKIP TO LINE 10.
WRITE / 'Dieser Text beginnt in Zeile 10'. " Das '/' ist optional, da SKIP TO LINE an den Anfang springt
SKIP TO LINE 7. " Keine Wirkung, da Zeile 10 schon erreicht wurde!
WRITE / 'Dieser Text folgt auf Zeile 10'.
SKIP TO LINE 20.
WRITE 'Dieser Text steht in Zeile 20'.

Wichtige Hinweise

  • Die SKIP-Anweisung ist ein Bestandteil der klassischen Listenprogrammierung. Für moderne, benutzerfreundliche und interaktive Oberflächen ist sie ungeeignet.
  • Nutze stattdessen ALV (ABAP List Viewer) für tabellarische Darstellungen oder andere geeignete UI-Technologien.
  • Das Verständnis von SKIP ist vor allem dann wichtig, wenn du ältere ABAP-Programme analysieren, warten oder verstehen musst, die noch klassische Listen erzeugen.
  • SKIP beeinflusst nur die vertikale Position. Für die horizontale Positionierung innerhalb einer Zeile werden der AT-Zusatz oder Positions- und Längenangaben bei der WRITE-Anweisung verwendet.