SELECTION-SCREEN
ist keine einzelne Anweisung, sondern eine Familie von Anweisungen, die Du im *
Deklarationsteil* eines ABAP-Programms (typischerweise ein REPORT
, aber auch in Funktionsgruppen oder Modulpools)
verwendest. Ihr Hauptzweck ist es, das Standard-Selektionsbild (Dynpro 1000), das automatisch durch die Deklaration
von PARAMETERS
und SELECT-OPTIONS
erzeugt wird, visuell zu gestalten, zu strukturieren und zu erweitern.
Mit SELECTION-SCREEN
-Anweisungen kannst Du:
- Parameter und Selektionsoptionen in Blöcken gruppieren (mit oder ohne Rahmen und Titel).
- Elemente gezielt auf einer Zeile anordnen.
- Kommentare und statische Texte hinzufügen.
- Horizontale Linien (
ULINE
) und vertikale Abstände (SKIP
) einfügen. - Drucktasten (Pushbuttons) hinzufügen, die Benutzeraktionen auslösen.
- Tabstrips (Reiter) definieren (komplexer).
- Die Sichtbarkeit oder Eingabebereitschaft von Elementen zur Laufzeit dynamisch steuern (im Ereignis
AT SELECTION-SCREEN OUTPUT
).
Wichtiger Kontext: Diese Anweisungen definieren das Aussehen und die Struktur des Selektionsbildes. Sie gehören
in den Deklarationsteil Deines Programms, vor den eigentlichen Verarbeitungsblöcken wie INITIALIZATION
oder
START-OF-SELECTION
. Die Logik zur dynamischen Anpassung gehört in den Ereignisblock AT SELECTION-SCREEN OUTPUT
.
Syntax und wichtige Varianten
Hier sind die gebräuchlichsten SELECTION-SCREEN
-Anweisungen:
1. Blöcke definieren
SELECTION-SCREEN BEGIN OF BLOCK <blockname> [WITH FRAME [TITLE <titel>]] [NO INTERVALS]. " Hier PARAMETERS und SELECT-OPTIONS einfügen, die zum Block gehören PARAMETERS p_param TYPE ... SELECT-OPTIONS s_selopt FOR ...SELECTION-SCREEN END OF BLOCK <blockname>.
WITH FRAME
: Erzeugt einen sichtbaren Rahmen um die Elemente.TITLE <titel>
: Gibt dem Rahmen eine Überschrift (kann ein Literal oder ein Textsymboltext-xxx
sein).NO INTERVALS
: Blendet bei allenSELECT-OPTIONS
innerhalb dieses Blocks das “Bis”-Feld (Intervallgrenze) aus.
2. Zeilen formatieren
SELECTION-SCREEN BEGIN OF LINE. " Beginnt eine neue Zeile SELECTION-SCREEN POSITION <spalte>. " Positioniert das nächste Element PARAMETERS p_feld1 ... SELECTION-SCREEN POSITION <spalte2>. PARAMETERS p_feld2 ...SELECTION-SCREEN END OF LINE. " Ende der Zeilendefinition
SELECTION-SCREEN ULINE [[/]<pos>(<len>)]. " Horizontale Linie (Underline) " / = Neue Zeile, pos = Startspalte, len = Länge
SELECTION-SCREEN SKIP [<n>]. " Fügt <n> (Standard 1) Leerzeilen ein
3.Kommentare / Texte
SELECTION-SCREEN COMMENT [/]<pos>(<len>) <text> [FOR FIELD <feldname>] [VISIBLE LENGTH <vlen>] [MODIF ID <key>].
- Zeigt den statischen Text
<text>
(Literal odertext-xxx
) an. FOR FIELD
: Verknüpft den Kommentar mit einem Parameter oder Select-Option (z.B. für F1-Hilfe).MODIF ID
: Gruppe für dynamische Anpassung (siehe unten).
4. Drucktasten
SELECTION-SCREEN PUSHBUTTON [/]<pos>(<len>) <button_text> USER-COMMAND <funktionscode> [VISIBLE LENGTH <vlen>] [MODIF ID <key>].
- Erzeugt einen Button. Bei Klick wird
AT SELECTION-SCREEN
ausgelöst undsy-ucomm
enthält den<funktionscode>
.
5. Funktionsleiste (Toolbar)
SELECTION-SCREEN FUNCTION KEY <n>. " n = 1, 2, 3, 4 oder 5
- Aktiviert die Drucktasten FKEY<n> in der Anwendungssymbolleiste (der Text muss im GUI-Status gesetzt werden).
Dynamische Anpassung (im Ereignis AT SELECTION-SCREEN OUTPUT
)
Bevor das Selektionsbild angezeigt wird, kannst Du im Ereignis AT SELECTION-SCREEN OUTPUT
das Aussehen und Verhalten
der Elemente ändern. Dazu weist Du den Elementen bei der Deklaration eine MODIF ID <key>
zu und bearbeitest dann die
interne Tabelle SCREEN
:
AT SELECTION-SCREEN OUTPUT. LOOP AT SCREEN. IF screen-group1 = 'KEY'. " 'KEY' ist die MODIF ID IF <bedingung>. screen-active = '1'. " Eingabebereit screen-invisible = '0'. " Sichtbar screen-required = '1'. " Pflichtfeld ELSE. screen-active = '0'. " Nicht eingabebereit screen-invisible = '1'. " Unsichtbar screen-required = '0'. " Kein Pflichtfeld ENDIF. MODIFY SCREEN. ENDIF. ENDLOOP.
Beispiele
1. Gruppierung mit Blöcken und Linien
REPORT z_sel_screen_demo.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001. PARAMETERS: p_matnr TYPE matnr, p_werks TYPE werks_d.SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN SKIP 1. " Eine LeerzeileSELECTION-SCREEN ULINE. " Eine TrennlinieSELECTION-SCREEN SKIP 1. " Eine Leerzeile
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002. SELECT-OPTIONS: s_date FOR sy-datum.SELECTION-SCREEN END OF BLOCK b2.
2. Elemente auf einer Zeile
SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(15) text-003 FOR FIELD p_carrid. SELECTION-SCREEN POSITION 17. PARAMETERS: p_carrid TYPE s_carr_id. SELECTION-SCREEN COMMENT 30(15) text-004 FOR FIELD p_connid. SELECTION-SCREEN POSITION 47. PARAMETERS: p_connid TYPE s_conn_id.SELECTION-SCREEN END OF LINE.
3. Drucktaste mit Aktion
SELECTION-SCREEN PUSHBUTTON /10(25) btn_show USER-COMMAND show.
INITIALIZATION. btn_show = 'Details anzeigen'. " Text der Taste setzen
AT SELECTION-SCREEN. " Ereignis nach Eingabe, vor START-OF-SELECTION CASE sy-ucomm. WHEN 'SHOW'. MESSAGE 'Aktion "Details anzeigen" wurde ausgelöst.' TYPE 'S'. " Hier könntest Du z.B. weitere Felder ein/ausblenden " oder eine Vorverarbeitung starten. ENDCASE.
START-OF-SELECTION. WRITE / 'Hauptverarbeitung gestartet.'.
Zusammenfassend:
SELECTION-SCREEN
-Anweisungen sind das Werkzeug, um das Standard-Selektionsbild von ABAP-Programmen über die reine
Definition von PARAMETERS
und SELECT-OPTIONS
hinaus zu gestalten. Sie ermöglichen eine bessere visuelle
Strukturierung und können durch Ereignisbehandlung (AT SELECTION-SCREEN OUTPUT
, AT SELECTION-SCREEN
) auch
dynamisches Verhalten realisieren. Für komplexere Oberflächen greift man jedoch auf den Screen Painter (SE51
) oder
moderne UI-Technologien zurück.