Show TOC

HintergrundRelative Positionsangaben Dieses Dokument in der Navigationsstruktur finden

 

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 Hinweis

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

Ende des Hinweises.

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 Syntax

  1. RESERVE.
  2.    ..... 
  3. BACK.
Ende des Codes

Steht BACK hinter RESERVE, erfolgt die nächste Ausgabe in der ersten nach RESERVE ausgegebenen 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.

Syntax Syntax

  1. REPORT demo_list_position_relative_1 NO STANDARD PAGE HEADING
  2.                                      LINE-SIZE 80 LINE-COUNT 7.
  3. DATA: h1(10) TYPE c VALUE '    Number',
  4.       h2(10) TYPE c VALUE '    Square',
  5.       h3(10) TYPE c VALUE '      Cube',
  6.       n1 TYPE i, n2 TYPE i, n3 TYPE i,
  7.       x TYPE i.
  8. TOP-OF-PAGE.
  9.   x = sy-colno + 8.  POSITION x. WRITE h1.
  10.   x = sy-colno + 8.  POSITION x. WRITE h2.
  11.   x = sy-colno + 8.  POSITION x. WRITE h3.
  12.   x = sy-colno + 16. POSITION x. WRITE sy-pagno.
  13.   ULINE.
  14. START-OF-SELECTION.
  15.   DO 10 TIMES.
  16.     n1 = sy-index. n2 = sy-index ** 2. n3 = sy-index ** 3.
  17.     NEW-LINE.
  18.     WRITE: n1 UNDER h1,
  19.            n2 UNDER h2,
  20.            n3 UNDER h3.
  21.   ENDDO.
Ende des Codes

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:

Die Abbildung wird im Begleittext erläutert.

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.

Syntax Syntax

  1. REPORT demo_list_position_relative_2
  2.        NO STANDARD PAGE HEADING LINE-SIZE 40.
  3. DATA x TYPE i.
  4. WRITE 'Some numbers:' NO-GAP.
  5. x = sy-colno.
  6. ULINE AT /(x).
  7. RESERVE 5 LINES.
  8. DO 5 TIMES.
  9.   WRITE / sy-index.
  10. ENDDO.
  11. x = sy-colno.
  12. BACK.
  13. WRITE AT x '   <- Start of Loop'.
Ende des Codes

Diese Programm erzeugt folgende Ausgabe:

Die Abbildung wird im Begleittext erläutert.

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.