Show TOC Anfang des Inhaltsbereichs

Relative Positionsangaben  Dokument im Navigationsbaum lokalisieren

Relative Positionsangaben beziehen sich auf bereits in der Liste vorgenommene Ausgaben. Verschiedene relative Positionierungen geschehen automatisch. Bei der WRITE-Anweisung ohne Positionsangabe erscheint die Ausgabe durch eine Spalte getrennt hinter der vorhergehenden Ausgabe. Ist in der aktuellen Zeile nicht genug Platz, wird ein Zeilenvorschub erzeugt. Die ULINE- und SKIP-Anweisungen erzeugen ohne Positionsangabe einen Zeilenvorschub.

Sie können relative Positionierungen mit Hilfe der Systemfelder sy-colno und sy-linno und den unter Absolute Positionsangaben beschriebenen Anweisungen programmieren oder die folgenden Anweisungen zur relativen Positionierung verwenden.

Zeilenvorschub erzeugen

Einen Zeilenvorschub erzeugen Sie entweder durch den Schrägstrich '/' im Zusatz AT der Anweisungen WRITE oder ULINE oder durch:

Syntax

NEW-LINE.

Diese Anweisung positioniert die Ausgabe in eine neue Zeile. sy-colno wird auf eins gesetzt und sy-linno wird um eins erhöht. Die Anweisung ist nur wirksam, wenn seit dem letzten Zeilenvorschub eine Ausgabe erfolgte. D.h. NEW-LINE erzeugt keine Leerzeilen. Zum Erzeugen von Leerzeilen verwenden Sie die Anweisung SKIP (siehe Leerzeilen erzeugen).

Weiterhin erzeugen die Anweisung NEW-PAGE und das Eintreten eines Ereignisses einen automatischen Zeilenvorschub.

Ausgaben untereinander positionieren

Sie können eine WRITE-Ausgabe in der gleichen Spalte positionieren wie eine vorangegangene WRITE-Ausgabe. Hierzu verwenden Sie die Aufbereitungsoption UNDER der WRITE-Anweisung wie folgt:

Syntax

WRITE f UNDER g.

Die Ausgabe von f beginnt in der Spalte, ab der auch das Feld g ausgegeben wurde. Diese Anweisung ist seitenübergreifend. D.h. g muss nicht auf der gleichen Seite ausgegeben worden sein.

Hinweis

Sie müssen selbst für die vertikale Positionierung sorgen. Eventuell schon vorhandene Ausgaben werden überschrieben.

Das Bezugsfeld g muss genauso geschrieben werden, wie in der entsprechenden WRITE-Anweisung, also z.B. mit eventuellen Offset-Angaben (siehe Offset-Werte für Datenobjekte angeben). Ist g dagegen ein Textsymbol (siehe Textsymbole), wird das Bezugsfeld über die Nummer des Textsymbols bestimmt.

Ausgaben in erste Zeile eines Zeilenblocks positionieren

Um als nächste Ausgabezeile die erste Zeile eines Zeilenblocks, der durch die RESERVE-Anweisung (siehe Seitenvorschübe programmieren) definiert wurde, festzulegen, verwenden Sie die Anweisung BACK wie folgt:

Syntax

RESERVE.
  .....
BACK.

Steht BACK hinter RESERVE, erfolgt die nächste Ausgabe in der ersten nach RESERVEausgegebenen Zeile. Sie können diese Anweisung beispielsweise verwenden um nach Ausgaben in Schleifen in bestimmte Zeilen zurückzuspringen.

Beispiele für relative Positionsangaben

Das erste Beispiel demonstriert Ihnen, wie Sie eine Spaltenorientierte Liste über einen selbst definierten Seitenkopf erstellen können.

Beispiel

REPORT demo_list_position_relative_1 NO STANDARD PAGE HEADING
                                     LINE-SIZE 80 LINE-COUNT 7.

DATA: h1(10) TYPE c VALUE '    Number',
      h2(10) TYPE c VALUE '    Square',
      h3(10) TYPE c VALUE '      Cube',
      n1 TYPE i, n2 TYPE i, n3 TYPE i,
      x TYPE i.

TOP-OF-PAGE.

  x = sy-colno + 8.  POSITION x. WRITE h1.
  x = sy-colno + 8.  POSITION x. WRITE h2.
  x = sy-colno + 8.  POSITION x. WRITE h3.
  x = sy-colno + 16. POSITION x. WRITE sy-pagno.
  ULINE.

START-OF-SELECTION.

  DO 10 TIMES.
    n1 = sy-index. n2 = sy-index ** 2. n3 = sy-index ** 3.
    NEW-LINE.
    WRITE: n1 UNDER h1,
           n2 UNDER h2,
           n3 UNDER h3.
  
ENDDO.

Dieses Programm erzeugt eine zweiseitige Liste. Im selbstdefinierten Seitenkopf werden Spaltenüberschriften mit Hilfe des Systemfelds sy-colno und der POSITION-Anweisung relativ zueinander positioniert. Die eigentliche Listausgabe wird durch die Option UNDER der WRITE-Anweisung unter die Felder der Kopfzeile positioniert. Die Zeilenvorschübe werden durch NEW-LINE besorgt. Die Ausgabe sieht folgendermaßen aus:

Diese Grafik wird im zugehörigen Text erklärt

Die Ausrichtung der Felder kommt daher, dass Zeichenketten standardmäßig linksbündig und numerische Felder standardmäßig rechtsbündig dargestellt werden. Die Bündigkeit können Sie mit den Aufbereitungsoptionen LEFT-JUSTIFIED, RIGHT-JUSTIFIED und CENTERED der WRITE-Anweisung beeinflussen (siehe Aufbereitungsoptionen).

Das zweite Beispiel zeigt die Wirkung der Anweisung BACK hinter RESERVE.

Beispiel

REPORT demo_list_position_relative_2
       NO STANDARD PAGE HEADING LINE-SIZE 40.

DATA x TYPE i.

WRITE 'Some numbers:' NO-GAP.
x = sy-colno.
ULINE AT /(x).

RESERVE 5 LINES.

DO 5 TIMES.
  WRITE / sy-index.
ENDDO.

x = sy-colno.

BACK.
WRITE AT x '   <- Start of
Loop'.

Diese Programm erzeugt folgende Ausgabe:

Diese Grafik wird im zugehörigen Text erklärt

Nach der Ausgabe der ersten beiden Zeilen wird die RESERVE-Anweisung verwendet. Die nächsten fünf Zeilen werden als Block definiert. Die Ausgabe hinter der Anweisung BACK wird in die erste Zeile des Blocks gestellt. Beachten Sie wie das Systemfeld sy-colno zum Unterstreichen der ersten Zeile und zur Positionierung der letzten WRITE-Ausgabe verwendet wird.

 

Ende des Inhaltsbereichs