Selection Screens bieten eine standardisierte Benutzeroberfläche für die Eingabe von Selektionskriterien in ABAP-Reports. Mit PARAMETERS und SELECT-OPTIONS können flexible Eingabemasken erstellt werden.
Grundelemente
| Element | Beschreibung |
|---|---|
PARAMETERS | Einzelwert-Eingabe |
SELECT-OPTIONS | Bereichseingabe (von-bis, Mehrfachselektion) |
SELECTION-SCREEN | Layout-Steuerung |
Beispiele
1. Einfache Parameter
REPORT zselection_demo.
" Einzelne ParameterPARAMETERS: p_bukrs TYPE bukrs, " Buchungskreis p_gjahr TYPE gjahr DEFAULT sy-datum(4)," Jahr mit Default p_name TYPE string. " Freitext
" Parameter mit Suchhilfe (automatisch aus Domäne)PARAMETERS: p_matnr TYPE matnr.
" PflichtfeldPARAMETERS: p_kunnr TYPE kunnr OBLIGATORY.
START-OF-SELECTION. WRITE: / 'Buchungskreis:', p_bukrs, / 'Jahr:', p_gjahr, / 'Name:', p_name, / 'Kunde:', p_kunnr.2. SELECT-OPTIONS für Bereiche
" BereichsauswahlSELECT-OPTIONS: s_kunnr FOR kna1-kunnr, " Kundennummer s_erdat FOR vbak-erdat, " Datum s_matnr FOR mara-matnr. " Material
START-OF-SELECTION. " SELECT mit SELECT-OPTIONS SELECT * FROM kna1 WHERE kunnr IN @s_kunnr INTO TABLE @DATA(lt_customers).
" Oder mit mehreren Bedingungen SELECT * FROM vbak WHERE kunnr IN @s_kunnr AND erdat IN @s_erdat INTO TABLE @DATA(lt_orders).
WRITE: / 'Gefundene Kunden:', lines( lt_customers ).3. Checkbox und Radiobuttons
" CheckboxPARAMETERS: p_test AS CHECKBOX DEFAULT 'X'.PARAMETERS: p_detail AS CHECKBOX.
" Radiobuttons (Gruppe)PARAMETERS: p_opt1 RADIOBUTTON GROUP grp1 DEFAULT 'X', p_opt2 RADIOBUTTON GROUP grp1, p_opt3 RADIOBUTTON GROUP grp1.
START-OF-SELECTION. IF p_test = abap_true. WRITE: / 'Testmodus aktiv'. ENDIF.
CASE abap_true. WHEN p_opt1. WRITE: / 'Option 1 gewählt'. WHEN p_opt2. WRITE: / 'Option 2 gewählt'. WHEN p_opt3. WRITE: / 'Option 3 gewählt'. ENDCASE.4. Listbox (Dropdown)
" Listbox mit festen WertenPARAMETERS: p_status TYPE char1 AS LISTBOX VISIBLE LENGTH 20 DEFAULT 'A'.
" Werte werden bei INITIALIZATION gesetztINITIALIZATION. DATA: lt_values TYPE vrm_values.
lt_values = VALUE #( ( key = 'A' text = 'Aktiv' ) ( key = 'I' text = 'Inaktiv' ) ( key = 'B' text = 'Gesperrt' ) ).
CALL FUNCTION 'VRM_SET_VALUES' EXPORTING id = 'P_STATUS' values = lt_values.5. SELECTION-SCREEN Blöcke
" Block mit RahmenSELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-b01. PARAMETERS: p_bukrs TYPE bukrs OBLIGATORY, p_gjahr TYPE gjahr OBLIGATORY.SELECTION-SCREEN END OF BLOCK b1.
" Weiterer BlockSELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-b02. SELECT-OPTIONS: s_kunnr FOR kna1-kunnr, s_name FOR kna1-name1.SELECTION-SCREEN END OF BLOCK b2.
" Block für OptionenSELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE TEXT-b03. PARAMETERS: p_test AS CHECKBOX, p_alv AS CHECKBOX DEFAULT 'X'.SELECTION-SCREEN END OF BLOCK b3.6. Elemente in einer Zeile
" Mehrere Elemente nebeneinanderSELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(10) TEXT-001. " 'Von Datum:' PARAMETERS: p_from TYPE sy-datum. SELECTION-SCREEN COMMENT 30(10) TEXT-002. " 'Bis Datum:' PARAMETERS: p_to TYPE sy-datum DEFAULT sy-datum.SELECTION-SCREEN END OF LINE.
" Noch eine ZeileSELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(15) TEXT-003. PARAMETERS: p_check AS CHECKBOX. SELECTION-SCREEN COMMENT 20(20) TEXT-004.SELECTION-SCREEN END OF LINE.7. Dynamische Texte
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE gv_title. PARAMETERS: p_value TYPE i.SELECTION-SCREEN END OF BLOCK b1.
DATA: gv_title TYPE string.
INITIALIZATION. gv_title = 'Eingabeparameter'.
" Feldbezeichner dynamisch setzen %_p_value_%_app_%-text = 'Menge'.8. Tabstrips
" Tabstrip definierenSELECTION-SCREEN BEGIN OF TABBED BLOCK tab FOR 15 LINES. SELECTION-SCREEN TAB (20) tab1 USER-COMMAND ucomm1 DEFAULT SCREEN 100. SELECTION-SCREEN TAB (20) tab2 USER-COMMAND ucomm2 DEFAULT SCREEN 200. SELECTION-SCREEN TAB (20) tab3 USER-COMMAND ucomm3 DEFAULT SCREEN 300.SELECTION-SCREEN END OF BLOCK tab.
" Subscreen 100SELECTION-SCREEN BEGIN OF SCREEN 100. PARAMETERS: p_par1 TYPE string.SELECTION-SCREEN END OF SCREEN 100.
" Subscreen 200SELECTION-SCREEN BEGIN OF SCREEN 200. PARAMETERS: p_par2 TYPE i.SELECTION-SCREEN END OF SCREEN 200.
" Subscreen 300SELECTION-SCREEN BEGIN OF SCREEN 300. SELECT-OPTIONS: s_range FOR mara-matnr.SELECTION-SCREEN END OF SCREEN 300.
INITIALIZATION. tab1 = 'Allgemein'. tab2 = 'Details'. tab3 = 'Selektion'.9. Selection Screen Events
PARAMETERS: p_kunnr TYPE kunnr, p_name TYPE name1_gp.
" Vor Anzeige des SelektionsbildesINITIALIZATION. p_kunnr = '0000001000'. " Default-Wert
" Bei Wertänderung eines FeldesAT SELECTION-SCREEN ON p_kunnr. " Prüfung des Kundenfelds SELECT SINGLE kunnr FROM kna1 WHERE kunnr = @p_kunnr INTO @DATA(lv_kunnr).
IF sy-subrc <> 0. MESSAGE e001(zmsg) WITH p_kunnr. " 'Kunde & existiert nicht' ENDIF.
" Bei Wertänderung mit WerteübernahmeAT SELECTION-SCREEN ON VALUE-REQUEST FOR p_name. " Eigene F4-Hilfe DATA: lt_return TYPE TABLE OF ddshretval.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'NAME' value_org = 'S' TABLES value_tab = lt_names return_tab = lt_return.
IF lt_return IS NOT INITIAL. p_name = lt_return[ 1 ]-fieldval. ENDIF.
" Bei F1 (Hilfe)AT SELECTION-SCREEN ON HELP-REQUEST FOR p_kunnr. MESSAGE 'Geben Sie eine gültige Kundennummer ein' TYPE 'I'.
" Am Ende der Eingabe (vor START-OF-SELECTION)AT SELECTION-SCREEN. " Kreuzvalidierung IF p_kunnr IS INITIAL AND p_name IS INITIAL. MESSAGE e002(zmsg). " 'Mindestens ein Suchkriterium angeben' ENDIF.
START-OF-SELECTION. " Hauptlogik10. SELECT-OPTIONS modifizieren
SELECT-OPTIONS: s_kunnr FOR kna1-kunnr.
INITIALIZATION. " Default-Werte für SELECT-OPTIONS s_kunnr = VALUE #( ( sign = 'I' option = 'BT' low = '0000001000' high = '0000001999' ) ).
AT SELECTION-SCREEN OUTPUT. " SELECT-OPTION auf "nur gleich" einschränken LOOP AT SCREEN. IF screen-name CS 'S_KUNNR'. screen-required = '1'. " Pflichtfeld ENDIF. MODIFY SCREEN. ENDLOOP.11. Felder ein-/ausblenden
PARAMETERS: p_mode TYPE char1 AS LISTBOX VISIBLE LENGTH 10.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME. PARAMETERS: p_field1 TYPE string MODIF ID gr1, p_field2 TYPE string MODIF ID gr2.SELECTION-SCREEN END OF BLOCK b1.
AT SELECTION-SCREEN OUTPUT. LOOP AT SCREEN. " Gruppe 1 nur bei Mode = 'A' anzeigen IF screen-group1 = 'GR1'. IF p_mode = 'A'. screen-active = '1'. ELSE. screen-active = '0'. ENDIF. ENDIF.
" Gruppe 2 nur bei Mode = 'B' anzeigen IF screen-group1 = 'GR2'. IF p_mode = 'B'. screen-active = '1'. ELSE. screen-active = '0'. ENDIF. ENDIF.
MODIFY SCREEN. ENDLOOP.
AT SELECTION-SCREEN ON p_mode. " Screen nach Modusänderung neu aufbauen12. Felder schreibschützen
PARAMETERS: p_ref TYPE string, p_calc TYPE p DECIMALS 2 MODIF ID ro1. " Readonly
AT SELECTION-SCREEN OUTPUT. LOOP AT SCREEN. IF screen-group1 = 'RO1'. screen-input = '0'. " Keine Eingabe möglich screen-intensified = '1'. " Hervorgehoben ENDIF. MODIFY SCREEN. ENDLOOP.
AT SELECTION-SCREEN ON p_ref. " Berechnung bei Änderung p_calc = strlen( p_ref ).13. Drucktaste im Selektionsbild
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME. PARAMETERS: p_input TYPE string.SELECTION-SCREEN END OF BLOCK b1.
" DrucktasteSELECTION-SCREEN PUSHBUTTON /1(20) btn1 USER-COMMAND cmd1.SELECTION-SCREEN PUSHBUTTON 25(20) btn2 USER-COMMAND cmd2.
INITIALIZATION. btn1 = 'Validieren'. btn2 = 'Zurücksetzen'.
AT SELECTION-SCREEN. CASE sy-ucomm. WHEN 'CMD1'. " Validierung IF p_input IS INITIAL. MESSAGE 'Eingabe erforderlich' TYPE 'S' DISPLAY LIKE 'E'. ELSE. MESSAGE 'Eingabe OK' TYPE 'S'. ENDIF.
WHEN 'CMD2'. " Zurücksetzen CLEAR p_input. ENDCASE.14. Varianten speichern und laden
" Variante programmatisch ladenPARAMETERS: p_var TYPE raldb_vari.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_var. " Varianten-Auswahl CALL FUNCTION 'RS_VARIANT_CATALOG' EXPORTING report = sy-repid new_title = 'Variante auswählen' IMPORTING variant = p_var.
AT SELECTION-SCREEN. IF sy-ucomm = 'LOAD_VAR' AND p_var IS NOT INITIAL. " Variante laden CALL FUNCTION 'RS_SUPPORT_SELECTIONS' EXPORTING report = sy-repid variant = p_var. ENDIF.15. Komplettes Beispiel
REPORT zcomplete_selection.
" TexteSELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-b01. PARAMETERS: p_bukrs TYPE bukrs OBLIGATORY. SELECT-OPTIONS: s_gjahr FOR bkpf-gjahr DEFAULT sy-datum(4).SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-b02. SELECT-OPTIONS: s_kunnr FOR bsid-kunnr, s_lifnr FOR bsik-lifnr.SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE TEXT-b03. PARAMETERS: p_alv AS CHECKBOX DEFAULT 'X', p_detail AS CHECKBOX, p_test AS CHECKBOX.SELECTION-SCREEN END OF BLOCK b3.
" DrucktastenSELECTION-SCREEN FUNCTION KEY 1.SELECTION-SCREEN FUNCTION KEY 2.
" Globale DatenDATA: gt_data TYPE TABLE OF bsid.
INITIALIZATION. " Funktionstastentexte sscrfields-functxt_01 = 'Dokumentation'. sscrfields-functxt_02 = 'Alle löschen'.
AT SELECTION-SCREEN. CASE sscrfields-ucomm. WHEN 'FC01'. " Dokumentation anzeigen CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT' EXPORTING titel = 'Hilfe' textline1 = 'Dieses Programm erstellt einen Bericht.' textline2 = 'Wählen Sie Ihre Kriterien.'.
WHEN 'FC02'. " Alle Felder löschen CLEAR: s_kunnr[], s_lifnr[]. ENDCASE.
AT SELECTION-SCREEN ON p_bukrs. " Buchungskreis validieren SELECT SINGLE bukrs FROM t001 WHERE bukrs = @p_bukrs INTO @DATA(lv_bukrs).
IF sy-subrc <> 0. MESSAGE e010(zmsg) WITH p_bukrs. ENDIF.
START-OF-SELECTION. " Daten laden IF p_test = abap_true. WRITE: / 'Testmodus - keine Daten geladen'. RETURN. ENDIF.
SELECT * FROM bsid WHERE bukrs = @p_bukrs AND gjahr IN @s_gjahr AND kunnr IN @s_kunnr INTO TABLE @gt_data.
WRITE: / 'Geladene Datensätze:', lines( gt_data ).
END-OF-SELECTION. " ALV oder klassische Liste IF p_alv = abap_true. " ALV anzeigen TRY. cl_salv_table=>factory( IMPORTING r_salv_table = DATA(lo_alv) CHANGING t_table = gt_data ). lo_alv->display( ). CATCH cx_salv_msg. ENDTRY. ELSE. " Klassische Ausgabe LOOP AT gt_data INTO DATA(ls_data). WRITE: / ls_data-bukrs, ls_data-kunnr, ls_data-dmbtr. ENDLOOP. ENDIF.Report-Events
| Event | Zeitpunkt |
|---|---|
INITIALIZATION | Vor Anzeige des Selektionsbilds |
AT SELECTION-SCREEN OUTPUT | Vor jedem PBO |
AT SELECTION-SCREEN ON field | Nach Feldänderung |
AT SELECTION-SCREEN ON VALUE-REQUEST | Bei F4 |
AT SELECTION-SCREEN ON HELP-REQUEST | Bei F1 |
AT SELECTION-SCREEN | Am Ende der Eingabe |
START-OF-SELECTION | Nach Selektionsbild |
END-OF-SELECTION | Nach Datenverarbeitung |
Wichtige Hinweise / Best Practice
- OBLIGATORY für Pflichtfelder verwenden.
- DEFAULT für sinnvolle Vorbelegung.
- Blöcke mit FRAME für übersichtliche Gruppierung.
- Validierung in
AT SELECTION-SCREEN ON field. - MODIF ID für dynamisches Ein-/Ausblenden.
- SELECT-OPTIONS für flexible Bereichsauswahl.
- F4-Hilfe mit
VALUE-REQUESTanpassen. - Textelemente (TEXT-xxx) für Übersetzbarkeit.
- Varianten für wiederverwendbare Einstellungen.
- Kombinieren Sie mit ALV für professionelle Ausgabe.