12 Reports and Selektionsbildschirme
12.1 Ereignisse eines Reports
12.2 Eingabeelemente
12.3 Strukturierungselement für den Selektionsbildschirm
12.4 Ereignisse eines Selektionsbildschirms
12.5 Textelemente
12.6 Nachrichtenklassen
12.7 Einen Report mit ABAP aufrufen
12.8 SPA-/GPA-Parameter
INITIALIZATION
START-OF-SELECTION
AT SELECTION-SCREEN
um Variablen oder Eingabefelder Ihres Selektionsbildschirms zu initialisieren
Dieser Block definiert den Standardverarbeitungsblock Ihres ausführbaren Programms.
Hier programmieren Sie die Logik zur Verarbeitung der Eingabe. Das Ereignis definiert also, wo Ihre erste richtige Zeile ABAP-Code anfängt.
Wir immer dann aufrufen, wenn das Selektionsbild bestätigt wird oder wenn der Zusatz USER-COMMAND für Selektionsbildelemente angegeben ist.
12.2.1 Parameter
12.2.2 Checkboxen
12.2.3 Radiobuttons
12.2.4 Dropdown-Liste
12.2.5 Selektionsoptionen
12.2.6 Buttons
12.2.7 Buttons auf Funktionsleiste ❓
PARAMETERS {parameter} | {parameter [LENGTH laenge]}
{{TYPE typ [DECIMALS dezimalstellen]}
|{LIKE dobj}}
[OBLIGATORY | NO-DISPLAY]
[VISIBLE LENGTH vlaenge]
[DEFAULT wert]
[LOWER CASE]
[MATCHCODE OBJECT suchhilfe]
[MEMORY ID pid]
[VALUE CHECK] ...
Mit der Anweisung PARAMETERS können Sie ähnlich der DATA-Anweisung programmlokale Datenobjekte definieren. Zusätzlich wird bei der Anweisung PARAMETERS ein Eingabefeld auf einem vom System generierten Selektionsbild zur Eingabe angeboten.
DEFAULT wert
einen Namen mit einer maximalen Länge 8 angeben
MATCHCODE OBJECT suchhilfe
MEMORY ID pid
VALUE CHECK
OBLIGATORY
NO-DISPLAY
LENGTH laenge
VISIBLE LENGTH vlaenge
einen Standardwert eingeben
eine Suchhilfe direkt spezifizieren
wird das Eingabefeld mit einem Set-/Get-Parameter im SAP-Memory verknüpft
die Werteprüfung einschalten
Dies funktioniert nur, wenn Sie sich auf einen Typ aus dem ABAP Dictionary bezogen haben.
das Eingabefeld als Pflichtfeld markieren
die Anzeige unterdrückt
Dies ist hilfreich, falls Sie den Report später programmatisch aurfuren und mit zusätzlichen Werten versorgen wollen.
die Länge des Eingabefelds über laenge beschränken
die sichtbare Ausgabelänge des Parameters über vlaenge auf dem Selektionsbildschirm beeinflussen
PARAMETERS paremetername {{TYPE | LIKE} ... } AS CHECKBOX
[USER-COMMAND funktionscode].
Der angegebene Typ muss c und seine Länge 1 sein.
PARAMETERS parametername {{TYPE | LIKE} ... }
RADIOBUTTON GROUP gruppe
[USER-COMMAND funktionscode]:
PARAMETERS parametername {{TYPE | LIKE} ... }
AS LISTBOX VISIBLE LENGTH vlaenge
[USER-COMMAND funktionscode]
Dropdown-Liste füllen
im Initialisierungsereignis INITIALIZATION mit dem Funktionsbaustein VRM_SET_VALUES befüllen
Dazu müssen Sie im Parameter ID den Namen der Dropdown-Liste (in Großbeschreibung) und im Parameter VALUES ein Wertetabelle vom Typ VRM_VALUES übergeben.
REPORT zreport.
PARAMETERS: p_tage TYPE c AS LISTBOX VISIBLE LENGTH 20.
DATA: lt_tage TYP vrm_values,
ls_tage TYPE vrm_value.
INITIALIZATION.
ls_tage-key = '1'.
ls_tage-text = 'Montag'.
APPEND ls_tage TO lt_tage.
ls_tage-key = '1'
ls_tage-text = 'Dienstag'.
APPEND ls_tage TO lt_tage.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = 'P_TAGE' ''Name des Parameters
values = lt_tage
EXCEPTIONS
OTHERS = 0.
Dropdown-Liste auslesen ❓
Dazu müssen Sie den Funktionsbaustein DYNP_VALUES_READ aufrufen und sich den Index der ausgewählten Zeile zu der Dropdown-Liste zurückgegeben lassen, mit dem Sie wiederum den Wert aus Ihrer originalen Wertetabelle auslesen können.
AT SELECTION-SCREEN ON p_tage.
DATA: lt_werte TYPE TABLE OF dynpread,
ls_werte TYPE dynpread.
CLEAR: lt_werte, ls_werte.
ls_werte-fieldname = 'P_TAGE'.
APPEND ls_werte TO lt_werte.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = sy-cprog
dynumb = sy-dynnr
translate_to_upper = 'X'
TABLES
dynpfields = lt_werte.
READ TABLE lt_werte INDEX1 INTO ls_werte.
IF sy-subrc = 0.
READ TABLE lt_tage INTO ls_tage WITH KEY key = ls_werte-fieldvalue.
IF sy-subrc = 0.
ENDIF.
ENDIF.
Im Unterschied zur Anweisung PARAMETERS wird allerdings kein einfaches Eingabefeld, sondern eine Von-bis-Eingabe in Form von zwei Eingabefeldern und einem dahinter angezeigten Button für die Mehrfachselektion generiert.
SELECTION-OPTIONS so_name FOR datenobjekt
[OBLIGATORY | NO-DISPLAY]
[VISIBLE LENGTH vlaenge]
[NO-EXTENSION]
[NO INTERVALS]
[MODIF ID modid]
[LOWER CASE]
[MATCHCODE OBJECT suchhilfe]
[MEMORY ID pid]
[DEFAULT wert1 [TO wert2]
[OPTION option] [SIGN sign]]
Mit der Anweisung SELECT-OPTIONS wird vom System eine interne Tabelle, genauer gesagt eine Range-Tabelle, aufgebaut.
NO-EXTENSION
verhindern Sie, dass der Button für die Mehrfachselektion angezeigt wird
NO INTERVALS
wird nur das erste Eingabefeld ähnlich einem Parameter angezeigt
SELECTION-SCREEN PUSHBUTTON [/][pos](len)
button_text USER-COMMAND fcode
[VISIBLE LENGTH vlaenge]
REPORT zreport.
TABLES: sscrifields.
SELECTION-SCREEN PUSHBUTTON /1(10) text-001 USER-COMMAND but1.
AT SELECTION-SCREEN.
IF sscrifields-ucomm = 'BUT1'.
MESSAGE 'Button wurde geklickt!' TYPE 'I'.
ENDIF.
Icon zuweisen
Auf dem Button können Sie ein Icon und beim Überfahren des Buttons mit dem Mauszeiger können Sie eine Quickinfo anzeigen lassen.
Der einfachste Weg dazu ist die Verwendung des Funktionsbausteins ICON_CREATE, bei dem Sie lediglich den Namen des gewünschten Icons und der Quickinfo angeben müssen.
Das Ergebnis dieses Funktionsbausteinaufrufs weisen Sie anschlißend dem Button als Text zu.
SELECTION-SCREEN PUSHBUTTON /1(50) text
USER-COMMAND btn1 VISIBLE LENGTH 30.
INITIALIZATION.
CALL FUNCTION 'ICON_CREATE'
EXPORTING
name = icon_information ''Name des Icons
text = 'Mein Button mit Icon'
info = 'Meine Quickinfo'
IMPORTING
RESULT = text
EXCEPTIONS
OTHERS = 0.
SELECTION-SCREEN FUNCTION KEY n
REPORT zreport.
TABLES: sscrifields.
* Struktur zur Definierung der Button-Anzeige definieren
DATA: ls_menu_btn1 TYPE smp_dyntxt.
SELECTION-SCREEN FUNCTION KEY 1.
INITIALIZATION.
* Definition zum Button ausprägen
ls_menu_btn1-icon_id = ICON_DUMMY.
ls_menu_btn1-icon_text = 'Mein Icon-Text'.
ls_menu_btn1-quickinfo = 'Mein Quickino'.
* Der Schnittstellenstruktur zuweisen
sscrfields-functxt_01 = ls_menu_btn1.
AT SELECTION-SCREEN.
*Auf einen Klick auf den Button reagieren
CASE sscrifields-ucomm.
WHEN 'FC01'. ...
ENDCASE.
Neben den normalen BUttons, die Sie frei auf dem Selektionsbildschirm anordnen können, haben Sie die Möglichkeit, über den Zusatz FUNCTION KEY bis zu fünf vordefinierte Buttons in der Funktionsleiste zu definieren.
Den Text, ein Icon sowie eine Quickinfo können Sie über die Schnittstelle SSCRFIELDS setzen, die Sie vorher durch eine TABLES-Anweisung deklariert haben müssen.
Die Struktur SSCRFIELDS stellt dabei für jeden Button eine Unterstruktur mit dem Namen FUNCTTXT_0n bereit, wobei das letzte n für die Nummer des Buttons steht.
Auf die Buttons können Sie dann über vordefinierte Funktionscodes im Ereignis AT SELECTION-SCREEN reagieren, die in dem Feld UCOM der Struktur SSCRFIELDS stehen.
Die Funktionscodes haben den Namen FC0n, wobei das n für die Nummer des Buttons steht.
12.3.1 Blöcke
12.3.2 Leerzeilen
12.3.3 Horizontale Linien
12.3.4 Textausgaben
12.3.5 Tabstrips
12.3.6 Modifikationsgruppen
SELECTION-SCREEN BEGIN OF BLOCK block
[WITH FRAM [TITLE title]].
'' Eingabeelemente, wie z.B. PARAMETERS ...
SELECTION-SCREEN END OF BLOCK block.
SELECTION-SCREEN BEGIN OF BLOCK rad1
WITH FRAME TITLE text-001.
PARAMETERS: r1 RADIOBUTTON GROUP gr1,
r2 RADIOBUTTON GROUP gr1,
r3 RADIOBUTTON GROUP gr1.
SELECTION-SCREEN BEGION OF BLOCK rad1.
SELECTION-SCREEN SKIP [anzahl].
SELECTION-SCREEN ULINE [[/][pos | POS_LOW | POS_HIGH] (len)]
Sie können den Start und die Länge der Linie (maximal 83 Zeichen lang) auch exakt spezifizieren.
Mehrere Linien können dabei hintereinanderstehen und müssen, falls dies nicht erwünscht ist, mit dem Zusatz >>/<< (Schrägstrich) umbrochen werden.
SELECTION-SCREEN COMMENT [/][pos](len){text}
Mit dem Zusatz COMMENT der Anweisung SELECTION-SCREEN können Sie normale Texte auf dem Selektionsbildschirm ausgeben.
REPORT zreport.
* Definition der ersten Registerkarte
SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS: field2 TYPE c.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN END OF SCREEN 100.
* Definition der zweiten Registerkarte
SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME.
PARAMETERS: feld2 TYPE c.
SELECTION-SCREEN END OF SCREEN BLOCK b2.
SELECTION-SCREEN END OF SCREEN 200.
* Definition des Tabstrips.
SELECTION-SCREEN.
BEGIN OF TABBED BLOCK meintab FOR 10 LINES.
TAB(20) reiter1 USER-COMMAND reiter1,
TAB(20) reiter2 USER-COMMAND reiter2.
END OF TABBED BLOCK meintab.
INITIALIZATION. ''Text vergeben und Selektionsbildschirm zuordnen
reiter1 = 'Reiter 1'.
reiter2 = 'Reiter 2'.
meintab-prog = sy-repid.
meintab-dynnr = 100.
AT SELECTION-SCREEN. ''Wenn Anwender auf einen Reiter klickt
CASE sy-dynnr.
WHEN 1000.
CASE sy-uncomm. ''Setzen des angeklickten Reiters
WHEN 'REITER1'.
meintab-dynnr = 100.
meintab-activetab = 'REITER1'.
WHEN 'REITER2'.
meintab-dynnr = 200.
meintab-activetab = 'REITER2'.
ENDCASE.
ENDCASE.
Mithilfe des Zusatzes BEGIN OF SCREEN ... AS SUBSCREEN können Sie einzelne Unterselektionsbildschirme (Subscreen) anlegen, die Sie dynamisch zur Laufzeit laden können, wenn der Anwender auf einen Reiter klickt. Dieser wird mit TABBED BLOCK angelegt. Dazu müssen Sie beim Ereignis AT SELECTION-SCREEN im Feld DYNNR Ihres Tabstrips die gewünschte Subscreen-Nummer angeben und sagen, welche Registerkarte geöffnet werden soll.
Mit dem Zusatz MODIF-ID können Sie Bildschirmelemente zu einer Modifikationsgrupppe zusammenfassen. Eine Modifikationsgruppe ermöglicht die gleichzeitige Bearbeitung mehrerer Elemente durch den Entwickler. Die Angabe einer solchen Modifikationsgruppe ist bei den Zusätzen COMMENT, PUSHBUTTON, TAB, ULINE, PARAMETERS und SELECT-OPTIONS möglich.
Alle Bildschirmelemente einer Modifikationsgruppe können vor der Darstellung des Selektionsbildschirms mit der Anweisung MODIFY SCREEN modifiziert werden.
REPORT zreport.
* Definition des Selektionsbildschirms inklusive Zuordnung der MODIF-ID
PARAMETERS zeige AS CHECKBOX USER-COMMAND com1.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS: p1 TYPE c LENGTH 10,
p2 TYPE c LENGTH 10.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME.
PARAMETERS: p3 TYPE c LENGTH 10 MODIF ID bl2,
p4 TYPE c LENGTH 10 MODIF ID bl2.
SELECTION-SCREEN END OF BLOCK b2.
AT SELECTION-SCREEN OUPUT.
DATA: ls_screen LIKE screen.
LOOP AT screen INTO ls_screen.
IF zeige <> 'X' AND ls_screen-group1 = 'BL2'.
ls_screen-active = '0'.
MODIFY screen FROM ls_screen.
ENDIF.
ENDLOOP.
AT SELECTION-SCREEN {OUTPUT}
| {ON {parameter | seloption}}
| {ON END OF seloption}
| {ON BLOCK block}
| {ON RADIOBUTTON GROUP gruppe}
| {ON {HELP-REQUEST | VALUE-REQUEST}
FOR {parameter | seloption-low | seloptionl-high}}
| {ON EXIT-COMMAND}.
Dies ermöglicht es Ihnenm den Selektionsbildschirm zu verschiedenen Zeitpunkten (vor und nach der Anzeige, bei Ausführung, bei Auswahl eines Elements) zu beeinflussen oder zusätzliche Logik anzubieten.
AT SELECTION-SCREEN
AT SELECTION-SCREEN OUTPUT
AT SELECTION-SCREEN ON ... FOR
ON END OF
ON BLOCK
ON RADIOBUTTON GROUP
ON HELP-REQUEST FOR
ON EXIT-COMMAND
Wird ohne Zusatz immer dann aufgerufen, wenn das Selektionsbild bestätigt wird oder wenn der Zusatz USER-COMMAND für Selektionsbildelemente angegeben ist.
Wird vor dem Anzeigen des Selektionsbildschirms (und durch Drücken der Enter-Taste) ausgelöst und kann genutzt werden, um die angezeigten Werte der Selektionselemente zu ändern.
Dieser Ereignisblock kann darüber hinaus dazu genutzt werden, ein dynamische Bildschirmsmodifikation vorzunehmen.
Dieser Ereignisblock wird nach jeder Eingabe eines Wertes zum angegebenen Parameter oder der Selektionsoption ausgelöst. In diesem Ereignisblock kann die Benutzereigabe überprüft oder gegebenfalls umgewandelt werden.
Wird ausgelöst, wenn der Anwender die Mehrfachselektionsoptionen benutzt, also etwas eingegeben hat. In diesem Ereignisblock aknn die gesamte Selektionstabelle überprüft werden.
Wird ausgelöst, wenn alle Eingabefelder des angegebenen Blocks übergeben wurden.
Wird ausgelöst, wenn alle Radiobuttons der angegebenen Radiobutton-Gruppe übergeben wurden.
Wird aufgerufen, wenn für ein Eingabefeld eines Parameters oder eines der Eingabefelder einer Selektionsoption die Feldhilfe F1 oder die Eingabehilfe F4 aufgerufen wurde.
Wird ausgelöst, wenn der Anwender einen der ampelfarbenen Navigations-Buttons ZURÜCK oder BEENDEN angeklickt hat oder ABBRECHEN aufgerufen hat. Welche Button der Anwender geklickt hat, kann über das Systemfeld sy-ucomm, abgefragt werden.
12.5.1 Zugriff auf Textelemente
12.5.2 Textsymbole
12.5.3 Selektionstexte
12.5.4 Listenüberschriften
Textelemente können Sie innerhalb des ABAP Editors entweder über Hauptmenü unter Springen -> Textelemente oder über das Kontextmenü des Programmordners über Anzeigen -> Textelemente erreichen.
Auf der Registerkarte Textsymbole können Sie neue Textsymbole eingeben.
Textsymbole können jegliche Literale innerhalb eines Quellcodes ersetzen.
in der ersten Spalten Sym eine dreistellige eindeutige ID zugeben, über die Später aus dem Programm heraus auf das Textsymbol zugreifen können
Die Länge und die maximale Länge werden automatisch bestimmt.
Anlage im Quellcode
Sie können Textsymbole auch direkt im Quellcode anlegen.
Schreiben Sie dazu Ihren Text als Literal aus, und vergeben Sie anschließend, von Klammern eingeschlossen, die eindeutige dreistellige ID
Wenn Sie anschließend zum ersten Mal doppelt auf das Literal klicken, wird Sie der ABAP Editor fragen, ob Sie noch nicht vorhandene Textsymbol anlegen möchten.
Auf der Registerkarte Selektionstexte können Sie Ihren für den Selektionsbildschirm definierten Parametern und Selektionsoptionen einen Text zuweisen.
Sie haben darüber hinaus die Möglichkeit, sich die im ABAP Dictionary gepflegten Texte angeben zu lassen.
Ändert sich der Text im ABAP Dictionary, ändert sich auch automatisch der hier angezeigte Text.
Auf der Registerkarte Listüberschriften können Sie eine Überschrift für eine Listenausgabe vergeben sowie den einzelnen Spalten der Liste Überschriften zuordnen.
Komfortabler lässt sich dies direkt im Ergebnis der Listenausgabe unter SYSTEM -> LISTE -> LISTEÜBERSCHRIFT einstellen.
Die Einrückung der Spaltenüberschriften geschieht dabei über Leerzeichen.
12.6.1 Nachrichtenklassen anlegen
12.6.2 Nachrift aufrufen
12.6.3 Parameterisierte Nachrichten
Transaktion SE91
Nachrichtenklassen sind das globale Gegenstück zu lokalen Textsymbolen. Während Textsymbole nur innerhalb eines Programmes aufgerufen und benutzt werden können, lassen sich die Texte von Nachrichtenklassen programmübergreifend verwenden.
einen Namen für die Nachrichtenklasse eintragen
auf der Registerkarte Nachrichten
Nachrichten eintragen
Ist der Nachrichtentext selbsterklärend, markieren Sie die entsprechende Checkbox in der Spalte SELBSTERKLÄREND.
Andernfalls fügen Sie in der Menüleiste über den Button LANGTEXT eine ausführlichere Nachrichtenbeschreibung dazu.
MESSAGE TypNummer (Klasse) [INTO text]
Sie können in Ihren Nachrichtentexten auch Platzhalter definieren, um diese erst zur Laufzeit mit bestimmten Werten zu füllen.
Dazu müssen Sie ein kaufmännisches Und-Zeichen (&) als Platzhalter eintragen.
Beim Ersetzen werden die übergebenen Texte dann in der angegebenen Reihenfolge eingetragen.
MESSAGE nummer (klasse) WITH text1 text2 [...]
DATA: lv_matnr TYPE matnr,
lv_bukrs TYPE bukrs,
lv_werks TYPE werks.
lv_matnr = '123456'.
lv_bukrs = 1000.
lv_werks = 1000.
MESSAGE s001 (zmein_nachrichtenk1) WITH lv_matnr
lv_bukrs
lv_werks.
SUBMIT reportname [VIA SELECTION-SCREEN]
[USING SELECTION-SET variant]
[AND RETURN].
Mit der Anweisung SUBMIT können Sie einen Report mit ABAP aufrufen.
Über den Zustaz VIA SELECTION-SCREEN können Sie definieren, dass der Selektionsbildschirm der aufgerufenen Reports nicht übersprungen, sondern angezeigt wird.
Geben Sie den Zusatz AND RETURN an, kehrt der Benutzer nach Ausführung des Reports zu dem ursprünglich angezeigten Report zurück.
Übe den Zustaz USING SELECTION-SET können Sie eine Variante auswählen.
Selektionsparameter übergeben
Selektionsparameter frei angeben
Übergabe einer Selektionsstelle
SUBMIT reportname ... [WITH expr_syntax WITH expr_syntax2]
SUBMIT zcrm_dml_status WITH p_chplva = '01'
WITH so_pchob IN so_objid
WITH pa_vari = pa_vari.
Beim Aufruf eines Reports mit der Anweisung SUBMIT können Sie die Namen der Selektionsparameter über den Zusatz WITH angeben und entsprechend Werte zuweisen.
[WITH SELECTION-TABLE rspar]
REPORT zmein_aufruf.
DATA: ls_param TYPE rsparams,
lt_param TYPE TABLE OF rsparams.
ls_param-selname = 'P_MATNR'.
ls_param-kind = 'P'.
ls_param-low = '1234567'.
APPEND ls_param TO lt_param.
ls_param-selname = 'SO_MATNR'.
ls_param-kind = 'S'.
ls_param-option = 'BT'.
ls_param = sign = 'I'.
ls_param-low = '1000000'.
ls_param-high = '9000000'.
APPEND ls_param TO lt_param.
SUBMIT z_mein_report
VIA SELECTION-SCREEN
WITH SELECTION-TABLE lt_param.
Über den Zusatz WITH SELECTION-TABLE können Sie die Eingabeelemente des aufzurufenden Selektionsbildschirms über eine interne Tabelle vom Zeilentyp RSPARAMS versorgen.
Das Feld KIND muss dabei mit einem P für Parameter oder einem S für Selektionskriterien gefüllt sein, während das Feld SELNAME den Namen des Parameters oder der Selektionsoption enthält und während in den Feldern LOW und HIGH die Weret stehen.
Das Feld LOW wird für Parameter genutzt und die Felder LOW und HIGH für Selektionsoptionen.
Diese Parameter werden benutzt, um Werte auf dem Selektionsbildschirm von einem aufrufenden Program aus zu füllen.
Transaktion SU01
über das Hauptmenü unter System->Benutzervorgaben->Eigene Daten
Jeder SPA-/GPA-Parameter wird über eine 20-stellige Zeichenkette identifiziert.
12.8.1 SAP-/GPA-Parameter anlegen udn setzen
12.8.2 SPA-/GPA-Parameter auslesen
SET PARAMETER ID pid FIELD wert.
REPORT zfr_setget_para.
PARAMETER: p_meine TYPE char10 MEMORY ID zmein_parameter.
INITIALIZATION. ''Setzen des Wertes vor der Anzeige
SET PARAMETER ID 'ZMEIN_PARAMETER' FIELD 'Mein Wert'.
Parameter-ID setzen
Wenn die ID des Parameters noch nicht existiert, können Sie hier doppelt auf die neue ID klicken, und die ABAP Workbench wird versuchen, ID zu navigieren.
GET PARAMETER ID pid FIELD variable.