Anfang des Inhaltsbereichs

Linien auf Listen Dokument im Navigationsbaum lokalisieren

ABAP bietet Ihnen verschiedene Möglichkeiten horizontale und vertikale Linien in Listen zu erzeugen. Eine Auflistung der entsprechenden Anweisungen finden Sie unter Linien und Leerzeilen.

Das System verbindet aufeinandertreffende Linien automatisch zu geschlossenen Linien bzw. Rahmen. Linien treffen genau dann aufeinander, wenn in Verlängerungsrichtung mindestens einer Linie keine Leerzeichen oder Leerzeilen zwischen ihnen stehen. Je nach Art und Anzahl der an einer Stelle aufeinandertreffenden Linien können so verschiedene Linienstücke gebildet werden. Sie können das Erzeugen zusammenhängender Linienstücke ausnahmsweise verhindern, indem Sie Sonderlinien verwenden:

Hinweis

Beachten Sie in diesem Zusammenhang, daß Seitenkopf und Seitenfuß auch Zeilen der Seite belegen. Dies kann zu unerwünschten Linienverbindungen führen, falls Sie nicht für genügend Leerzeilen sorgen. Beispielsweise bewirkt die Ausgabe von senkrechten Linien '|' in der ersten Zeile unter dem Standardseitekopfkopf automatisch eine Verbindung dieser Linien mit der Unterstreichungszeile des Seitenkopfs.

Für eine Demonstration von automatischen Linienverbindungen können Sie auch das im System vorhandenen ausführbare Programm SHOWLINE aufrufen.

Geraden

Das folgende Beispiel zeigt die Erzeugung horizontaler und vertikaler Geraden.

Beispiel

REPORT demo_list_straight_lines NO STANDARD PAGE HEADING.

SKIP TO LINE 3.
ULINE AT 2(1).
WRITE 4  '-'.
WRITE 6  '--'.
WRITE 9  '---'.
ULINE AT 12(4).

SKIP TO LINE 1.
POSITION 18.
WRITE '|'.

SKIP TO LINE 3.
DO 4 TIMES.
  NEW-LINE.
  POSITION 18.
  WRITE '|'.
ENDDO.

Die Ausgabe sieht folgendermaßen aus:

Diese Grafik wird im zugehörigen Text erklärt

Die erste ULINE-Anweisung erzeugt eine horizontale Linie über eine Spalte. Der Trennstrich in der ersten WRITE-Anweisung wird als normales Ausgabefeld dargestellt. Die beiden Trennstriche der zweiten WRITE-Anweisung erzeugen eine Gerade über zwei Spalten. Genauso bilden die drei nächsten Trennstriche zusammen mit der ULINE-Anweisung eine Gerade über sieben Spalten.

Die Ausgabe des ersten Zeichens '|' erzeugt eine vertikale Linie in der ersten Zeile. Die anderen vier Zeichen '|' werden ab Zeile 3 zu einer vertikalen Geraden über vier Zeilen verbunden.

Ecken

Das folgende Beispiel zeigt die Erzeugung verschiedener Ecken.

Beispiel

REPORT demo_list_edges NO STANDARD PAGE HEADING.

WRITE   '--'.
WRITE / '|'.

SKIP TO LINE 1.
ULINE AT 5(6).
NEW-LINE.
WRITE 10 '|'.

SKIP TO LINE 4.
WRITE: '|        |',
     / '----------'.

Die Ausgabe sieht so aus:

Diese Grafik wird im zugehörigen Text erklärt

Überall dort, wo die Enden von horizontalen und vertikalen Linien aufeinandertreffen, entstehen Ecken.

T-Stücke

Das folgende Beispiel zeigt die Erzeugung verschiedener T-Stücke.

Beispiel

REPORT demo_list_t_pieces NO STANDARD PAGE HEADING.

WRITE '---'.
WRITE /2 '|     |'.
ULINE AT /5(8).

SKIP TO LINE 4.
DO 3 TIMES.
  WRITE '|'.
  NEW-LINE.
ENDDO.
SKIP TO LINE 5.
WRITE '---------'.
SKIP TO LINE 4.

ULINE AT 6(10).
WRITE 15 '|' .

Die Ausgabe sieht so aus:

Diese Grafik wird im zugehörigen Text erklärt

Beim rechtwinkligen Auftreffen von Linienenden auf Linien entstehen T-Stücke.

Kreuze

Das folgende Beispiel zeigt die Erzeugung von Kreuzen.

Beispiel

REPORT demo_list_crosses NO STANDARD PAGE HEADING.

WRITE   '   |'.
WRITE  /'-------'.
WRITE  /'   |'.

SKIP TO LINE 1.
DO 3 TIMES.
  WRITE 12 sy-vline.
  NEW-LINE.
ENDDO.
SKIP TO LINE 2.
ULINE AT 12(1).

Die Ausgabe sieht so aus:

Diese Grafik wird im zugehörigen Text erklärt

Überschneiden sich zwei Linien, entsteht ein Kreuz.

Sonderlinien verwenden

In eng ineinandergeschachtelten Rahmen oder dichten Hierarchiedarstellungen kann es vorkommen, daß Sie bestimmte Linienstücke zwar nicht miteinander verbinden wollen, der Platz aber nicht für zusätzliche Leerzeichen und Leerzeilen ausreicht.

In diesem Fall können Sie Sonderlinien, die als systemdefinierte Konstanten in dem INCLUDE-Programm <LINE> definiert sind, über folgende Syntax verwenden:

Syntax

WRITE <lin> AS LINE.

Um Sonderlinien für Ihr Programm verfügbar zu machen, müssen Sie das INCLUDE-Programm <LINE> oder das umfassendere INCLUDE-Programm <LIST> in Ihr Programm einbinden. In dem INCLUDE-Programm <LINE> finden Sie auch eine Kurzbeschreibung der Sonderlinien.

Sonderlinien werden in der Ausgabeliste exakt so angezeigt, wie sie definiert sind. Verbindungen entstehen nur dort, wo Linien wirklich aufeinandertreffen. Das System führt keine automatischen Verlängerungen von und zu Sonderlinien durch.

Am einfachsten ist es, die Ausgabe von Sonderlinien über Anweisungsmuster vorzunehmen (siehe WRITE über Anweisungsmuster verwenden). Wählen Sie im Bild Zusammenstellen eines WRITE-Statements den Auswahlknopf Linie und danach Anzeigen. Das folgende Dialogfenster erscheint:

Diese Grafik wird im zugehörigen Text erklärt

Hier finden Sie alle verfügbaren Sonderlinien und können sie einfach in Ihr Programm einfügen.

Beispiel

Das folgende Programm demonstriert zum einen die Benutzung von Sonderlinien zur Erzeugung eines engen Musters und zum anderen ist es ein Beispiel für die dynamische Erzeugung von Linien in Listen.

REPORT demo_list_special_lines NO STANDARD PAGE HEADING LINE-SIZE 60.

INCLUDE <line>.

DATA: x0 TYPE i VALUE 10,
      y0 TYPE i VALUE 10,
      n TYPE i VALUE 16,
      i TYPE i VALUE 0,
      x TYPE i, y TYPE i.

x = x0. y = y0. PERFORM pos.

WHILE i LE n.
  WRITE line_bottom_left_corner AS LINE.
  x = x + 1. PERFORM pos.
  ULINE AT x(i).
  x = x + i. PERFORM pos.
  WRITE line_bottom_right_corner AS LINE.
  y = y - 1. PERFORM pos.
  DO i TIMES.
    WRITE '|'.
    y = y - 1. PERFORM pos.
  ENDDO.
  WRITE line_top_right_corner AS LINE.
  i = i + 1.
  x = x - i. PERFORM pos.
  ULINE AT x(i).
  x = x - 1. PERFORM pos.
  WRITE line_top_left_corner AS LINE.
  y = y + 1. PERFORM pos.
  DO i TIMES.
    WRITE '|'.
    y = y + 1. PERFORM pos.
  ENDDO.
  i = i + 1.
ENDWHILE.

FORM pos.
  SKIP TO LINE y.
  POSITION x.
ENDFORM.

In diesem Programm wird die Position X,Y für jede einzelne Ausgabe in dem Unterprogramm POS gesetzt. Das Ausgabebild sieht folgendermaßen aus:

Diese Grafik wird im zugehörigen Text erklärt

Das Programm erzeugt eine enge Spirale, die ohne Sonderlinien nicht möglich wäre. Die Anzahl der Spiralwindungen ist über die Variable N einstellbar.

Rahmen programmieren

Mit den in ABAP möglichen Linienformen können Sie Rahmen programmieren. Das folgende Beispiel enthält ein Programm, in dem ein Makro WRITE_FRAME definiert ist, welches Sie statt der Anweisung WRITE <f> verwenden können. Um ein über WRITE_FRAME ausgegebenes Feld <f> wird ein Rahmen gezeichnet, der sich dynamisch an die Länge des Felds anpaßt.

Beispiel

REPORT demo_list_write_frame NO STANDARD PAGE HEADING LINE-SIZE 60.

DATA: x TYPE i, y TYPE i, l TYPE i.

DEFINE write_frame.
  x = sy-colno. y = sy-linno.
  write: '|' no-gap, &1 no-gap, '|' no-gap.
  l = sy-colno - x.
  y = y - 1. skip to line y. position x.
  uline at x(l).
  y = y + 2. skip to line y. position x.
  uline at x(l).
  y = y - 1. x = sy-colno. skip to line y. position x.
END-OF-DEFINITION.

SKIP.
WRITE       'Demonstrating'.
write_frame 'dynamic frames'.
WRITE       'in'.
write_frame 'ABAP'.
WRITE       'output lists.'.

In diesem Programm wird ein Makro WRITE_FRAME definiert und seine Funktion wird in der folgenden Ausgabe demonstriert. Mehr Informationen zu Makros finden Sie unter Makros definieren und aufrufen.

Diese Grafik wird im zugehörigen Text erklärt

Gitterlinien programmieren

Mit den in ABAP möglichen Linienformen können Sie Gitter in tabellenartigen Listen programmieren. Das folgende Beispiel enthält ein Programm, in dem zwei zusammengehörige Makros NEW_GRID und WRITE_GRID definiert sind. NEW_GRID dient zur Initialisierung eines Gitters und für Zeilenvorschübe im Gitter. WRITE_GRID kann statt der Anweisung WRITE <f> verwendet werden. Zu jedem Feld, das über WRITE_GRID ausgegeben wird, werden rechts eine vertikale und darunter eine horizontale Gitterlinie gezeichnet. Die horizontale Linie paßt sich dynamisch an die Länge des Felds an. Die Linien aller ausgegebenen Felder ergeben zusammen ein Gitter.

Beispiel

REPORT demo_list_grid LINE-SIZE 60 NO STANDARD PAGE HEADING.

TABLES spfli.
DATA:  x TYPE i, y TYPE i, l TYPE i.

TOP-OF-PAGE.
  WRITE 3 'List of Flights in a Dynamic Grid'
           COLOR COL_HEADING.
  ULINE.

START-OF-SELECTION.

  DEFINE new_grid.
    y = sy-linno. y = y + 2. skip to line y.
    x = sy-colno. position x. write '|'.
  END-OF-DEFINITION.

  DEFINE write_grid.
    x = sy-colno. y = sy-linno. position x.
    write:  &1, '|'.
    l = sy-colno - x + 1.
    x = x - 2. y = y + 1. skip to line y. position x.
    uline at x(l).
    y = y - 1. x = sy-colno. skip to line y. position x.
  END-OF-DEFINITION.

GET spfli.

  new_grid.
  write_grid: spfli-carrid,
              spfli-connid,
              spfli-cityfrom,
              spfli-cityto.

In diesem Programm werden ein Makro NEW_GRID und ein Makro WRITE_GRID definiert und ihre Funktion wird demonstriert. Mehr Informationen zu Makros finden Sie unter Makros. Das ausführbare Programm sei mit der logischen Datenbank F1S verknüpft. Die Ausgabe sieht bei entsprechender Benutzereingabe auf dem Selektionsbild z.B. so aus:

Diese Grafik wird im zugehörigen Text erklärt

Beachten Sie, daß die oberste Gitterlinie aus der Anweisung ULINE im Anweisungsblock hinter TOP-OF-PAGE stammt. Das System verbindet die vertikalen Linien des Listenkörpers automatisch mit dieser Linie.

 

 

Ende des Inhaltsbereichs