[ABAP] Element des Selektionsbiles über RadioButtons ein-/ausblenden

PARAMETERS

* PARAMETERS
* Element, dass ein-/bzw. ausgeblendet werden soll
SELECTION-SCREEN BEGIN OF LINE.
  SELECTION-SCREEN COMMENT (9) lbl1 FOR FIELD p_test.
  PARAMETERS: p_test TYPE matnr.
SELECTION-SCREEN END OF LINE.

* Radiobutton 1, sendet USER_COMMAND, damit beim Umschalten AT SELECTION-SCREEN OUTPUT ausgelöst wird
SELECTION-SCREEN BEGIN OF LINE.
  SELECTION-SCREEN COMMENT (9) lbl2 FOR FIELD p_rb1.
  PARAMETERS: p_rb1 RADIOBUTTON GROUP grp DEFAULT 'X' USER-COMMAND rb.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
  SELECTION-SCREEN COMMENT (9) lbl3 FOR FIELD p_rb2.
  PARAMETERS: p_rb2 RADIOBUTTON GROUP grp.
SELECTION-SCREEN END OF LINE.

INITIALIZATION.
  lbl1 = 'Material:'.
  lbl2 = '      An:'.
  lbl3 = '     Aus:'.

AT SELECTION-SCREEN OUTPUT.
* Elemente des Selektionsbiles durchgehen
  LOOP AT SCREEN INTO DATA(wa).
* Wenn Element 'P_TEST'
    IF wa-name = 'P_TEST'.
* Aktvsetzung in Abhängigkeit von RB2
      wa-active = COND #( WHEN p_rb2 = abap_true THEN 0 ELSE 1 ).
      MODIFY SCREEN FROM wa.
    ENDIF.
  ENDLOOP.

SELECT-OPTIONS

* Element, dass ein-/bzw. ausgeblendet werden soll
SELECTION-SCREEN BEGIN OF LINE.
  SELECTION-SCREEN COMMENT (9) lbl1 FOR FIELD so_test.
  SELECT-OPTIONS: so_test FOR sy-uname MODIF ID 100.
SELECTION-SCREEN END OF LINE.

* Radiobutton 1, sendet USER_COMMAND, damit beim Umschalten AT SELECTION-SCREEN OUTPUT ausgelöst wird
SELECTION-SCREEN BEGIN OF LINE.
  SELECTION-SCREEN COMMENT (9) lbl2 FOR FIELD p_rb1.
  PARAMETERS: p_rb1 RADIOBUTTON GROUP grp DEFAULT 'X' USER-COMMAND rb.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
  SELECTION-SCREEN COMMENT (9) lbl3 FOR FIELD p_rb2.
  PARAMETERS: p_rb2 RADIOBUTTON GROUP grp.
SELECTION-SCREEN END OF LINE.

INITIALIZATION.
  lbl1 = 'Name:'.
  lbl2 = '  An:'.
  lbl3 = ' Aus:'.

AT SELECTION-SCREEN OUTPUT.
* Elemente des Selektionsbiles durchgehen
  LOOP AT SCREEN INTO DATA(wa).
* Wenn Element 'SO_TEST'
    IF wa-group1 = '100'.
* Aktvsetzung in Abhängigkeit von RB2
      wa-active = COND #( WHEN p_rb2 = abap_true THEN 0 ELSE 1 ).
      MODIFY SCREEN FROM wa.
    ENDIF.
  ENDLOOP.

[ABAP] SCREEN-Felder im Selektionsbild manuell setzen

DATA: pernr TYPE persno.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE title.

PARAMETERS: pa_bukrs TYPE pa0001-bukrs.
SELECT-OPTIONS: so_pernr FOR pernr.

TYPES: ty_it_screen TYPE STANDARD TABLE OF screen WITH DEFAULT KEY.
DATA: it_screen TYPE ty_it_screen.

SELECTION-SCREEN END OF BLOCK b1.

INITIALIZATION.

  title = 'Testblock'.

* SCREEN-Felder auslesen
  LOOP AT SCREEN INTO DATA(lv_screen).
    APPEND lv_screen TO it_screen.
  ENDLOOP.

  %_pa_bukrs_%_app_%-text = 'Par'.
  %_so_pernr_%_app_%-text = 'SelOpt'.

START-OF-SELECTION.
*SSCRFIELDS-UCOMM
*TITLE
*%_PA_BUKRS_%_APP_%-TEXT
*PA_BUKRS
*%_SO_PERNR_%_APP_%-TEXT
*%_SO_PERNR_%_APP_%-OPTI_PUSH
*SO_PERNR-LOW
*%_SO_PERNR_%_APP_%-TO_TEXT
*SO_PERNR-HIGH
*%_SO_PERNR_%_APP_%-VALU_PUSH
*%_17SNS0000194656_%_%_%_%_%_%_

* SCREEN-Felder ausgeben
  cl_demo_output=>display_data( it_screen ).

[ABAP] Eigene SET/GET-Parameter-ID im Programm verwenden

Oft ist es hilfreich, wenn man sich eigene Parameter festlegen kann, über die man in einem Programm Funktionen steuert.

Anlegen eines Parameters

  • SE80 -> Paket -> Rechtsklick -> Anlegen -> Weitere (1) -> SET/GET-Parameter-ID
  • Parameter-ID (z.B. ‚ZADM_SHOW_PARAMS‘) und Kurzbeschreibung eingeben

Wert für Parameter setzen

  • SU3 -> Reiter „Parameter“
  • Set-/Get-Parameter-Id: zuvor angelegten Parameter (z.B. ‚ZADM_SHOW_PARAMS‘) auswählen
  • Parameterwert: beliebigen Wert zur späteren Auswertung eintragen, z.B. ‚X‘

Werte werden in folgenden Tabelle abgelegt

  • TPARA (Verzeichnis der Memory-Id’s (vorlaeufig))
  • TPARAT (Kurztexte zu den Memory-Id’s)
  • USR05 (Benutzerstamm Parameter-ID)

Variante 1 (GET PARAMETER ID)

* Konstante für angelegten Parameter 'Z_SHOW_PARAMS'
CONSTANTS: co_parameter_id TYPE usr05-parid VALUE 'Z_SHOW_PARAMS'.

* Parameter mit einer Modifikationsgruppe namens 'ADM'
PARAMETERS: p_matnr TYPE matnr MODIF ID adm.
PARAMETERS: p_bukrs TYPE bukrs MODIF ID adm.

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN INTO DATA(lv_scr).
* Name der Modifikationsgruppe ermitteln
    CASE lv_scr-group1.
* wenn in Modifikationsgruppe 'ADM'
      WHEN 'ADM'.
* Wert vorbelegen
        DATA(lv_show_params) = CONV usr05-parva( abap_false ).

* Benutzerparameter lesen, muss in Tabelle TPARA enthalten sein
        GET PARAMETER ID co_parameter_id FIELD lv_show_params.
* wenn Parameter vorhanden
        IF sy-subrc = 0.
* anhand des Benutzerparameters die Anzeige der Modifikationsgruppe namens 'ADM' aktivieren / deaktivieren
          lv_scr-active = COND #( WHEN lv_show_params = abap_true THEN '1' ELSE '0' ).
* Adminparameter zur Info als hervorgehoben darstellen
          lv_scr-intensified = 1.
        ENDIF.
    ENDCASE.

* geänderte Anzeigewerte setzen
    MODIFY screen FROM lv_scr.
  ENDLOOP.

Variante 2 (SELECT)

* Konstante für angelegten Parameter 'Z_SHOW_PARAMS'
CONSTANTS: co_parameter_id TYPE usr05-parid VALUE 'Z_SHOW_PARAMS'.

* Benutzerstamm Parameter-ID
SELECT SINGLE FROM usr05
  FIELDS parva
  WHERE bname = @sy-uname
    AND parid = @co_parameter_id
   INTO @DATA(lv_parva).

IF sy-subrc = 0.
  WRITE: / lv_parva.
ENDIF.

Links

[ABAP] Folge von Selektionsbildschirmen durchschalten

SELECTION-SCREEN BEGIN OF SCREEN 100.
SELECTION-SCREEN BEGIN OF BLOCK sel1 WITH FRAME TITLE title1.
PARAMETERS: p_s_v TYPE spfli-cityfrom.
PARAMETERS: p_s_n TYPE spfli-cityto.
SELECTION-SCREEN END OF BLOCK sel1.
SELECTION-SCREEN END OF SCREEN 100.

SELECTION-SCREEN BEGIN OF SCREEN 200.
SELECTION-SCREEN BEGIN OF BLOCK sel2 WITH FRAME TITLE title2.
PARAMETERS: p_fh_v TYPE spfli-airpfrom.
PARAMETERS: p_fh_n TYPE spfli-airpto.
SELECTION-SCREEN END OF BLOCK sel2.
SELECTION-SCREEN END OF SCREEN 200.

INITIALIZATION.
  title1 = 'Städte'.
  title2 = 'Flughäfen'.

START-OF-SELECTION.
  CALL SELECTION-SCREEN 100 STARTING AT 10 10.
  CALL SELECTION-SCREEN 200 STARTING AT 10 10.

[ABAP] Subscreens auf dem Selektionsbild verwenden und per Pushbutton umschalten

SELECTION-SCREEN COMMENT /1(50) comm1.
SELECTION-SCREEN SKIP.

* TabStrip als Containerobjekt, ohne Tabs
SELECTION-SCREEN BEGIN OF TABBED BLOCK sub FOR 3 LINES.
SELECTION-SCREEN END OF BLOCK sub.

* Umschaltbuttons
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 1.
SELECTION-SCREEN PUSHBUTTON (10) btn_1 USER-COMMAND btn_back.
SELECTION-SCREEN PUSHBUTTON (10) btn_2 USER-COMMAND btn_fwd.
SELECTION-SCREEN END OF LINE.

* SUBSCREEN 1
SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE title1.
PARAMETERS: p1 TYPE string.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN END OF SCREEN 100.

* SUBSCREEN 2
SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE title2.
PARAMETERS: p2 TYPE string.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN END OF SCREEN 200.

* SUBSCREEN 3
SELECTION-SCREEN BEGIN OF SCREEN 300 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE title3.
PARAMETERS: p3 TYPE string.
SELECTION-SCREEN END OF BLOCK b3.
SELECTION-SCREEN END OF SCREEN 300.

INITIALIZATION.
  comm1 = 'Beispiel für die Verwendung von Subscreens'.

  title1 = 'Sub1'.
  title2 = 'Sub2'.
  title3 = 'Sub3'.

  btn_1 = |{ icon_column_left }Zurück|.
  btn_2 = |{ icon_column_right }Vor|.

* Subscreen 100 anzeigen
  sub-prog = sy-repid.
  sub-dynnr = 100.

  p1 = '11'.
  p2 = '22'.
  p3 = '33'.

AT SELECTION-SCREEN.

  CASE sy-dynnr.
    WHEN 100.
      IF sy-ucomm = 'BTN_BACK'.
        sub-dynnr = 300.
      ELSEIF sy-ucomm = 'BTN_FWD'.
        sub-dynnr = 200.
      ENDIF.
    WHEN 200.
      IF sy-ucomm = 'BTN_BACK'.
        sub-dynnr = 100.
      ELSEIF sy-ucomm = 'BTN_FWD'.
        sub-dynnr = 300.
      ENDIF.
    WHEN 300.
      IF sy-ucomm = 'BTN_BACK'.
        sub-dynnr = 200.
      ELSEIF sy-ucomm = 'BTN_FWD'.
        sub-dynnr = 100.
      ENDIF.
  ENDCASE.

START-OF-SELECTION.

  WRITE: / p1, p2, p3.

[ABAP] Verwendung von Tabstips auf dem Selektionsbildschirm

Variante 1 (Tabstrip (TabControl) verwenden)

* Tabstrip erzeugen, 10 Zeilen hoch
SELECTION-SCREEN BEGIN OF TABBED BLOCK tbl FOR 10 LINES.
SELECTION-SCREEN TAB (15) tbl_tab1 USER-COMMAND tab1 DEFAULT SCREEN 9001.
SELECTION-SCREEN TAB (15) tbl_tab2 USER-COMMAND tab2 DEFAULT SCREEN 9002.
SELECTION-SCREEN END OF BLOCK tbl.

* Subscreen 9001 für Tab1
SELECTION-SCREEN BEGIN OF SCREEN 9001 AS SUBSCREEN.
PARAMETERS: pa_test.
SELECTION-SCREEN END OF SCREEN 9001.

* Subscreen 9002 für Tab2
SELECTION-SCREEN BEGIN OF SCREEN 9002 AS SUBSCREEN.
PARAMETERS: pa_test2.
SELECTION-SCREEN END OF SCREEN 9002.

INITIALIZATION.
* Tabnamen vergeben
  tbl_tab1 = 'Tab1'.
  tbl_tab2 = 'Tab2'.

* aktiven Tab setzen, Großbuchstaben beachten
  tbl-activetab = 'TAB1'.
  tbl-dynnr = 9001.
  tbl-prog  = sy-repid.

AT SELECTION-SCREEN.
* Ereignis bei Klick auf Tabstrip abfangen
  CASE sy-ucomm.
    WHEN 'TAB1'.
      MESSAGE 'TAB1' TYPE 'S'.
    WHEN 'TAB2'.
      MESSAGE 'TAB2' TYPE 'S'.
  ENDCASE.

START-OF-SELECTION.
  WRITE: / 'Aktiver Tab:', tbl-activetab.
  WRITE: / 'Aktiver Tab Subscreen:', tbl-dynnr.
  WRITE: / 'Programmname:', tbl-prog.

Variante 2 (zuletzt gewählen Tabstrip zwischenspeichern)

* nach Listenverarbeitung wieder zurück zum Selektionsbildschirm
* und dort den letzten gewählten Tab anzeigen
CONSTANTS: gv_tbl_memory TYPE c LENGTH 10 VALUE 'TBL_ACTIVE'.

* Tabstrip erzeugen, 20 Zeilen hoch
SELECTION-SCREEN BEGIN OF TABBED BLOCK tbl FOR 10 LINES.
SELECTION-SCREEN TAB (15) tbl_tab1 USER-COMMAND tab1 DEFAULT SCREEN 9001.
SELECTION-SCREEN TAB (15) tbl_tab2 USER-COMMAND tab2 DEFAULT SCREEN 9002.
SELECTION-SCREEN END OF BLOCK tbl.

* Subscreen 9001 für Tab1
SELECTION-SCREEN BEGIN OF SCREEN 9001 AS SUBSCREEN.
PARAMETERS: pa_test.
SELECTION-SCREEN END OF SCREEN 9001.

* Subscreen 9002 für Tab2
SELECTION-SCREEN BEGIN OF SCREEN 9002 AS SUBSCREEN.
PARAMETERS: pa_test2.
SELECTION-SCREEN END OF SCREEN 9002.

INITIALIZATION.
* Tabnamen vergeben
  tbl_tab1 = 'Tab1'.
  tbl_tab2 = 'Tab2'.

* Zustand des Tabstrips aus dem Zwischenspeicher holen
  IMPORT tbl FROM MEMORY ID gv_tbl_memory.

AT SELECTION-SCREEN.
  CASE sy-ucomm.
    WHEN 'TAB1'.
      MESSAGE 'TAB1' TYPE 'I'.
    WHEN 'TAB2'.
      MESSAGE 'TAB2' TYPE 'I'.
  ENDCASE.

START-OF-SELECTION.
* Zustand des Tabstrips in den Zwischenspeicher ablegen
  EXPORT tbl TO MEMORY ID gv_tbl_memory.

  WRITE: / 'Aktiver Tab:', tbl-activetab.
  WRITE: / 'Aktiver Tab Subscreen:', tbl-dynnr.
  WRITE: / 'Programmname:', tbl-prog.

[ABAP] Strukturbeschreibung für System-Datenobjekt SCREEN

Komponente      Länge Typ Attribut                    Bedeutung

name            132   c   Name                        Name
group1          3     c   Gruppe1                     Modifikationsgruppe
group2          3     c   Gruppe2                     Modifikationsgruppe
group3          3     c   Gruppe3                     Modifikationsgruppe
group4          3     c   Gruppe4                     Modifikationsgruppe
required        1     c   Muss-Feld                   obligatorisches Feld
input           1     c   Eingabe                     eingabebereites Feld (enabled)
output          1     c   Ausgabe                     Anzeigefeld
intensified     1     c   Hell                        hervorgehobenes Feld
invisible       1     c   Unsichtbar                  unsichtbares Element
length          1     x   visLänge                    Feldlänge
active          1     c   Eingabe/Ausgabe/Unsichtbar  aktives Feld (visible)
display_3d      1     c   Zweidimensional             Rahmen
value_help      1     c   Eingabehilfe                Eingabehilfetaste
request         1     c   -                           Eingabe vorhanden
values_in_combo 1     c   Dropdown-Listbox            Wertehilfe vorhanden
color           10    i                               Farbe vom Wert 0 - 7