11.3 Komplexe Selektionen 

Bislang haben Sie nur einzelne Felder im Selektionsbild mit Startwerten versorgt. Nun soll es darum gehen, was Sie tun müssen, wenn Sie gültige Bereiche oder mehrere mögliche Einzelwerte für die Eingabe zulassen möchten.
Mit der Zuweisung von Feldinhalten zu einzelnen Variablen kommen Sie hier nicht weiter. Sie müssen auch hier mit einer Tabelle arbeiten, in die Sie die zulässigen Einzelwerte oder Intervalle eintragen. Damit arbeiten Sie hier zum ersten Mal nicht mit einer Datenbanktabelle, sondern mit einer internen Tabelle im Arbeitsspeicher. Ein wesentlicher Unterschied hierbei besteht darin, dass die Daten der internen Tabelle flüchtig sind, d. h. dass sie nur so lange wie der Report »leben«; deshalb werden sie auch als temporäre Daten bezeichnet.
11.3.1 SELECT-OPTIONS-Anweisung 

Für das Selektionsbild stellt das System über die Anweisung SELECT-OPTIONS eine spezielle Form einer internen Tabelle zur Verfügung. Dieser internen Tabelle, auch Selektionstabelle genannt, geben Sie einen maximal achtstelligen Namen. Die vier Felder der Selektionstabelle sind vom System fest vordefiniert: SIGN, OPTION, LOW und HIGH (siehe Tabelle 11.1). Jede Selektion, d. h. jedes im Selektionsbild eingetragene Intervall oder jeder Einzelwert, erzeugt in der internen Tabelle eine Zeile. Die interne Tabelle kann beliebig viele Zeilen enthalten.
Feld |
Beschreibung |
---|---|
SIGN |
Im Feld SIGN steht der logische Operand. Bei einem Einzelwert könnte es ein Gleichheitszeichen (=), ein Größer-als-Zeichen (>) oder Kleiner-als-Zeichen (<) etc. sein – je nachdem, was Sie als gültige Eingabe im Selektionsbild definieren. Bei einem Intervall wäre es folgende Kombination: <>. |
OPTION |
Im Feld OPTION steht, wie die Grenzwerte zu behandeln sind; bei Intervallen beispielsweise, ob die Intervallgrenzen eingeschlossen oder ausgeschlossen sind. |
LOW |
Im Feld LOW steht bei einem Intervall die Untergrenze, bei einem Einzelwert nur der Einzelwert. |
HIGH |
Im Feld HIGH steht bei einem Intervall die Obergrenze, bei einem Einzelwert ist es leer. |
Tabelle 11.1 Felder der Selektionstabelle
Mit jeder neuen SELECT-OPTIONS-Anweisung wird eine neue interne Tabelle deklariert. Bei der Deklaration will das System auch wissen, welchem Feld die interne Tabelle zugeordnet wird. Haben die LOW- und HIGH-Werte beispielsweise Bezug zu einem Feld einer Datenbanktabelle, gelten die Feldattribute dieses Feldes automatisch auch für die Eingabefelder im Selektionsbild.
Natürlich könnten Sie bei unserem Beispiel für das Geburtsdatum auch eine Variable mit der PARAMETERS-Anweisung erfinden, aber dann könnten Sie nur ein einziges Geburtsdatum in das Selektionsbild einpflegen und zur Selektion verwenden. Mit der SELECT-OPTIONS-Anweisung können Sie hingegen beliebig viele einzelne Geburtsdatumswerte und -intervalle eingeben, entsprechend viele Sätze selektieren und verarbeiten oder einfach eine passende Liste erzeugen lassen. Als interne Tabelle für die Werte der Geburtsdatumswerte ist es deshalb sinnvoll, GEBDAT zu deklarieren und auf die Workarea für das Tabellenfeld ZTEILNEHMER02-TGEBURTSDATUM zu verweisen.
Da die obsolete TABLES-Anweisung vermieden werden soll, deklarieren Sie eine explizite Workarea. Auf diese Workarea können Sie in der SELECT-OPTIONS-Anweisung ohne Weiteres Bezug nehmen:
DATA: wa_zteilnehmer02 TYPE zteilnehmer02.
SELECT-OPTIONS gebdat FOR wa_zteilnehmer02-tgeburtsdatum.
Über die beiden Eingabefelder im Selektionsbild wird die Selektionstabelle mit Einzelwerten oder Untergrenzen und Obergrenzen für Intervalle versorgt (siehe Abbildung 11.7).
Im Selektionsbild können Sie bei der internen Tabelle, die hinter SELECT-OPTIONS liegt, links einen Einzelwert im LOW-Feld eingeben. Möchten Sie ein Intervall eingeben, tragen Sie rechts den HIGH-Wert ein. Zu beachten ist beim Intervall, dass der HIGH-Wert größer sein muss als der LOW-Wert. Lassen Sie beide Felder leer, erfolgt keine Selektionseinschränkung, und alle Werte sind gültige Werte.
Abbildung 11.7 SELECT-OPTIONS mit interner Tabelle GEBDAT
11.3.2 Mehrfachselektionen 

Grundsätzlich lässt das System die Mehrfachselektion zu, was bedeutet, dass mehrere Einzelwerte und mehrere Intervalle ausgewählt werden können. Dabei ist sowohl die positiv als auch die negativ formulierte Auswahl möglich: Positiv formuliert bedeutet beispielsweise bei einem Intervall, dass die gültigen Werte innerhalb des Intervalls liegen, einschließlich der Grenzen; negativ formuliert würde bedeuten, dass alle Werte gültig sind, außer die im Intervall angegebenen Werte; auch die Grenzen wären ungültige Werte.
Möchten Sie mit der Mehrfachselektion arbeiten, klicken Sie im Selektionsbild den Button Mehrfachselektion an (). Ihnen wird ein zusätzliches Fenster mit vier Registerkarten angezeigt. Je nach Aufgabenstellung wählen Sie diese nacheinander aus, um die Selektionskriterien einzugeben.
Geben Sie beispielsweise auf der Registerkarte Einzelwerte selektieren zwei Werte ein und übernehmen diese mit dem entsprechenden Button, können Sie bei Selektionen in Tabellen oder über eine IF-Struktur die Sätze in einen gesonderten Anweisungsblock schicken, die im zugehörigen Tabellenfeld einen dieser Einträge aus der Selektionstabelle GEBDAT enthalten (siehe Abbildung 11.8). Eine IF-Struktur könnte in einem solchen Fall so aussehen:
IF wa_zteilnehmer02-tgeburtsdatum IN gebdat.
* Anweisungsblock
ENDIF.
Abbildung 11.8 Positiv formulierte gültige Intervalle
Analog verfahren Sie, wenn Sie mehrere Intervalle selektieren möchten. Im Fenster der Mehrfachselektion wählen Sie für die positive Formulierung die Registerkarte Intervalle selektieren mit der grünen Ampel und tragen dort ein oder mehrere Intervalle ein. Anschließend übernehmen Sie die gewählten Einträge wieder mit dem Übernehmen-Button (siehe Abbildung 11.9). Unterhalb der Registerkarten finden Sie Buttons mit den bekannten Funktionen, wie etwa Zeile einfügen (), um die Einträge zu verwalten.
Abbildung 11.9 Positiv formulierte gültige Einzelwerte
Nach der Übernahme der Einträge gelangen Sie wieder in das Selektionsbild. Zur Kennzeichnung, dass jetzt Mehrfachselektionen hinterlegt sind, hat der Button Mehrfachselektion () nun einen grünen Farbtupfer erhalten. Zusammenfassend lässt sich festhalten:
-
Die interne Tabelle GEBDAT enthält alle zulässigen Einzelwerte und Intervalle.
-
Die interne Tabelle, die hinter der SELECT-OPTIONS-Anweisung liegt, hat so viele Zeilen, wie Sie auf den verschiedenen Registerkarten insgesamt Einträge vorgenommen haben.
-
Die interne Tabelle bezieht sich auf das Workarea-Feld WA_ ZTEILNEHMER02-TGEBURTSDATUM und definiert damit, welche Werte für dieses Feld zulässig sein sollen.
-
Die Workarea WA_ZTEILNEHMER02 ist auf die Dictionary-Tabelle ZTEILNEHMER02 typisiert und erbt damit ihre Eigenschaften wie Suchhilfeanbindungen. Somit stehen diese auch für die Workarea zur Verfügung.
-
Bei der Verarbeitung wird jeder Satz daraufhin geprüft, ob der Feldinhalt von WA_ZTEILNEHMER02-TGEBURTSDATUM gemäß den Inhalten von GEBDAT als zulässig gelten soll.
-
Ist der Feldinhalt von WA_ZTEILNEHMER02-TGEBURTSDATUM zulässig, ist die Bedingung erfüllt, und der Satz läuft in einen entsprechenden Anweisungsblock.
[+] Kombination aus mehreren Einträgen
Die Kombination aus mehreren Einträgen auf mehreren Registerkarten ist möglich, aber mit Vorsicht zu handhaben. Wer es übertreibt, erhält unter Umständen einen Programmablauf und eine Verarbeitung, die erst einmal Rätsel aufgibt, bis man sich an die logischen Verknüpfungen erinnert, die man über die Registerkarteneinträge eingebaut hat. Sofern die Registerkarteneinträge reproduzierbar sind, löst sich dann der Knoten wieder.
11.3.3 Zusätze zur SELECT-OPTIONS-Anweisung 

Die Zusätze DEFAULT, OBLIGATORY und LOWER CASE, die bereits bei der PARAMETERS-Anweisung vorgestellt wurden, sind auch für die SELECT-OPTIONS-Anweisung möglich und werden deshalb hier nicht wiederholt. Ihre Eigenschaften und Wirkungen sind bei beiden Anweisungen vergleichbar. Als speziellen Zusatz der SELECT-OPTIONS-Anweisung schauen wir uns für den Einstieg nur noch den Zusatz NO-EXTENSION genauer an.
Möchten Sie aufgrund der Aufgabenstellung die Mehrfachselektion unterbinden, fügen Sie der SELECT-OPTIONS-Anweisung den Zusatz NO-EXTENSION hinzu:
SELECT-OPTIONS gebdat FOR wa_zteilnehmer02-tgeburtsdatum
NO-EXTENSION.
Auf diese Weise erlaubt das System im Selektionsbild nur den Eintrag einer Zeile, d. h. nur den eines Einzelwertes oder eines Intervalls. Wie Sie in Abbildung 11.10 sehen, fehlt der Button Mehrfachselektion (). Damit ist die Mehrfachselektion automatisch unterbunden, und die interne Selektionstabelle hat nur eine Zeile.
Abbildung 11.10 Selektionsbild ohne Mehrfachselektion