11.7 Selektionsbilder frei gestalten 

In einer Vorbemerkung zur freien Gestaltung des Selektionsbildes möchten wir zunächst auf die Möglichkeiten und Grenzen hinweisen. Sie können Eingabefelder positionieren, freie Texte im Selektionsbild ausgeben und Eingabeblöcke bilden. Eingabeblöcke sind logische Gruppen von zusammengehörigen Informationen, die für die optische Benutzerführung sinnvoll erscheinen. Um diese Blöcke können Sie Rahmen ziehen und diese beschriften.
Hinter den Eingabefeldern stecken aber nach wie vor PARAMETERS- bzw. SELECT-OPTIONS-Anweisungen. Zusätze und Wirkungen dieser Anweisungen bleiben unverändert, auch an der Arbeit mit Varianten ändert sich hierdurch nichts.
[»] Eingeschränkte Freiheit
Als Konsequenz der Client-Server-Architektur und verteilter Anwendungen sollten Sie allerdings bei der freien Positionierung im Raster von Zeilen und Spalten bleiben: Mehrzeilige Texte, Hoch- und Tiefstellungen von Texten oder Ähnliches können Sie nicht einbauen. Auch bei Schriftgröße und Schriftart haben Sie so gut wie keinen Spielraum.
11.7.1 Einzelne Zeile gestalten 

Um eine Zeile frei zu gestalten, benötigen Sie wieder eine Struktur, die einen definierten Anfang und ein definiertes Ende hat. Dazwischen stehen die Anweisungen, wie die Zeile zu gestalten ist; für jede neue Zeile ist eine neue Struktur erforderlich.
Die Struktur beginnt mit SELECTION-SCREEN BEGIN OF LINE und endet mit SELECTION-SCREEN END OF LINE, wie im folgenden Codebeispiel zu sehen ist:
SELECTION-SCREEN BEGIN OF LINE.
* Anweisungsblock für die Zeilengestaltung
SELECTION-SCREEN END OF LINE.
Im Anweisungsblock stehen spezielle Anweisungen für Kommentare im Bildschirm, für Positions- und Längenangaben sowie die bekannten PARAMETERS- und SELECT-OPTIONS-Anweisungen. Sie können bei den freien Texten nicht mit Literalen arbeiten – zulässig sind nur Textelemente, genauer gesagt Textsymbole. Textsymbole könnte man auch mit Variablen oder Feldern vergleichen, nur dass die Inhalte außerhalb des Quellcodes in einem eigenen Textpool liegen. Der Name eines Textsymbols besteht aus der Zeichenkette TEXT- und einer Nummer zwischen 000 und 999, z. B. TEXT-123. Jeder ABAP-Report kann demnach in einer Sprache bis zu 1.000 Textsymbole verwalten.
Soll beispielsweise ein freier Text als Kommentar in einer Zeile stehen, wird die Anweisung SELECTION-SCREEN COMMENT benötigt. Für einen Kommentar, der z. B. in der Zeile ab Position 24 steht und eine Länge von 60 Zeichen hat, lautet der Name des Textsymbols, das den Text enthält, TEXT-005. Daher schreiben Sie in ABAP:
SELECTION-SCREEN COMMENT 24(60) text-005.
Soll der Kommentar im Selektionsbild linksbündig in der Zeile stehen und in der Länge 16 ausgegeben werden, lautet die Anweisung:
SELECTION-SCREEN COMMENT (16) text-005.
[»] Kürzer geht nicht
Kürzer geht es leider nicht; mindestens die Ausgabelänge muss als Zusatz angegeben werden.
Bis jetzt haben die Texte im Selektionsbild keinen Bezug zu Parametern oder Selektionstabellen; so liefert beispielsweise die (F1)-Taste keine Hilfestellung für den Text. Wenn Sie den Text mit dem Parameter bzw. der Selektionstabelle verknüpfen, erhalten Sie bei Bedarf auch für den Text die Hilfe, die Sie bekommen, wenn Sie ein Eingabefeld auswählen und beispielsweise die (F1)-Taste drücken. Der Text wird mit dem Zusatz FOR FIELD verknüpft.
Möchten Sie z. B. das Textsymbol 002 mit dem Parameter GESCHLEC verknüpfen, schreiben Sie:
SELECTION-SCREEN COMMENT (20) text-002
FOR FIELD geschlec.
Der Text wird linksbündig in der Länge 20 ausgegeben. Die Wirkungsweise der Anweisung sehen Sie erst, wenn Sie den Text im Selektionsbild auswählen und beispielsweise die (F1)-Taste drücken: Dann erhalten Sie die Dokumentation zum Geschlechtsschlüssel.
Bei der Ausgabe von Text befinden sich in der Anweisung Angaben zu Position und Länge, bezogen auf die aktuelle Zeile. Sie können jedoch mit dem Zusatz POSITION auch die Position für die nächste Ausgabe frei bestimmen. Soll die nächste Ausgabe, gleich, ob Text oder Parameter, in der Zeile ab Position 24 erfolgen, schreiben Sie im Anweisungsblock:
SELECTION-SCREEN POSITION 24.
[ ! ] Zu zeitraubend
Auf diese Weise können Sie beliebig viele Ausgaben in einer Zeile erzeugen – dies ist allerdings, offen gestanden, ziemlich zeitraubend. Außerdem müssen Sie genau auf die Positionsangaben achten: Eine Positionierung rückwärts ist möglich, und das System überschreibt alte Positionsangaben gnadenlos. Wer es übertreibt, sieht möglicherweise auch nicht mehr das, was er ursprünglich sehen wollte.
Ein Anweisungsblock für die Zeilengestaltung könnte daher folgendermaßen aussehen:
SELECTION-SCREEN COMMENT (20) text-002
FOR FIELD geschlec.
SELECTION-SCREEN POSITION 24.
PARAMETERS geschlec TYPE zteilnehmer02-tgeschlecht
OBLIGATORY VALUE CHECK.
In der Zeile wird linksbündig TEXT-002 in der Länge 20 ausgegeben; die nächste Ausgabe wird in Spalte 24 in der Zeile positioniert, und ab dieser Position wird der Parameter GESCHLEC ausgegeben. Jede Zeile des Selektionsbildes kann auf diese Art und Weise gestaltet werden – wie gesagt zeitaufwendig, aber manchmal notwendig.
11.7.2 Zeilenblock gestalten 

Eine oder mehrere zusammengehörige Zeilen können auch als Block deklariert werden. Ein Block ist farblich im Selektionsbild abgesetzt und kann mit einem Rahmen und einem Rahmentext versehen werden.
Sie benötigen hierzu wieder eine Struktur, die Blockanfang und Blockende definiert; zu diesem Zweck gibt es die Anweisungen SELECTION-SCREEN BEGIN OF BLOCK und SELECTION-SCREEN END OF BLOCK.
Den äußeren Rahmen bildet also die Struktur, die mit dem Zusatz BLOCK definiert wird. Die BLOCK-Struktur wiederum setzt sich aus mehreren Zeilen zusammen, die mit dem Zusatz LINE definiert werden. Innerhalb einer Zeile können einzelne Elemente wie Parameter und Kommentare stehen.
Möchten Sie beispielsweise zwei Zeilen zum Block B1 zusammenfassen, wäre der Aufbau der Struktur:
SELECTION-SCREEN BEGIN OF BLOCK B1.
SELECTION-SCREEN BEGIN OF LINE. "Zeile 1
* Anweisungsblock für die Zeilengestaltung Zeile 1
SELECTION-SCREEN END OF LINE. "Zeile 1
SELECTION-SCREEN BEGIN OF LINE. "Zeile 2
* Anweisungsblock für die Zeilengestaltung Zeile 2
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK B1.
Der Blockname B1 muss sowohl am Anfang als auch am Ende der Blockstruktur in der Anweisung stehen. Syntaktisch ist die Anweisung für den Block sonst nicht vollständig.
Zusätzlich kann ein Block über einen Rahmen sowie einen Rahmentext in der linken oberen Blockecke verfügen. Falls Sie einen solchen Rahmen wünschen, fügen Sie den Zusatz WITH FRAME hinzu.
Falls Sie einen Rahmentext wünschen, müssen Sie den Text in einem Textsymbol hinterlegen und den Zusatz TITLE verwenden. Ist der Rahmentext in Textsymbol 001 hinterlegt, lautet die Anweisung hierfür:
SELECTION-SCREEN BEGIN OF BLOCK teilnehmer
WITH FRAME TITLE text-001.
[»] Kontextsensitive Anweisungen
Auch SELECTION-SCREEN-Anweisungen sind kontextsensitiv: Einige Anweisungen sind nur innerhalb einer Zeile sinnvoll, andere nur innerhalb eines Blocks. Selbstverständlich sind auch Leerzeilen und Linien für das Selektionsbild möglich; darauf soll hier aber nicht weiter eingegangen werden.