Schlüsselbefehl Select-Options

Aus SAP-Wiki
Zur Navigation springenZur Suche springen

Siehe Schlüsselbefehl Select.

Mit dem Schlüsselbefehl SELECT-OPTIONS <feld> FOR <typisierungsfeld> wird ein Parameter mit zwei Feldern VON - BIS auf den Bildschirm erzeugt.

Durch die erweiterte Pflege können Einzelwerte und Bereiche (VON-BIS) eingeschlossen und ausgeschlossen werden.

Ein Select-Options-Parameter typisiert auf eine Variable, die vorher im Programm erzeugt sein muss und statt TYPE mit FOR.

Siehe Schlüsselbefehl Parameters.

Rangeaufbau

  • Durch den Select-Options-Parameter wird eine interne Tabelle aufgebaut mit den Feldern
    • SIGN ('I' oder 'E')
    • OPTION ('EQ' oder 'BT')
    • LOW (Von-Wert)
    • HIGH (Bis-Wert)

Zum Beispiel beim Kundenauftrag gibt es einen Range-Tabellentyp "MSR_T_INSP_VBELN_VL_RANGE".

Range1.JPG


Er hat die Struktur MSR_S_INSP_VBELN_VL_RANGE.

Die beiden Felder SIGN (Type DDSIGN, CHAR1) und OPTION (Type DDOPTION, CHAR2) sind bei jedem Range gleich.

Die Felder LOW und HIGH haben jeweils den gleichen Typ. Der (Komponenten-)Typ passt sich dem zu typisierenden Datenelement an. Hier beim Kundenauftrag dem Datenelement "VBELN_VL" CHAR10.

Range2.JPG

Nicht gefüllter Select-Options

  • Wird der Select-Options-Parameter nicht gefüllt und auf den Parameter abgefragt, so werden alle Werte dieses Tabellefelders selektiert. Hier reagiert der Select-Options-Parameter anders als der Parameters-Parameter.
  • Ein PARAMETERS-Parameter würde hingehen nach dem Initialwert vom Feld abfragen.

Coding

  • Die Abfrage auf diesen Parameter erfolgt mit "datum IN s_datum".
Data: lv_datum type datum.

Select-Options: s_datum for lv_datum.

Select ...
  into ..
  from ..
  where datum in s_datum.

Contain Pattern

Möchte man bei einem Select-Option nach einem 'z*' suchen, kann man das direkt im Selektionsbildschirm eintragen. Möchte man diesen Wert jedoch im Coding vorbelegen, muss die Options "CP" (Contain Pattern) gewählt werden.

Data: lrt_repname type range of PROGNAME,
      lrs_repname like line of lrt_repname.

lrs_repname-sign   = 'I'.
lrs_repname-option = 'CP'.
lrs_repname-low    = 'z*'.
append lrs_repname to lrt_repname.

SelectOption1.JPG


Würde man die Options "EQ" wählen wie gewohnt

Data: lrt_repname type range of PROGNAME,
      lrs_repname like line of lrt_repname.

lrs_repname-sign   = 'I'.
lrs_repname-option = 'EQ'.
lrs_repname-low    = 'z*'.
append lrs_repname to lrt_repname.

Dann würde das Zeichen "=" zu sehen sein und es kommt nicht zu einer erfolgreichen Selektion.

SelectOption2.JPG

Extensions bei Select-Options beschränken

Vorsicht bei Tausenden Datensätzen im Select-Options

  • Die einzelnen Einträge im Select-Options werden zur Laufzeit in einzelne OR-Bedingungen aufgelöst.
  • Der gesamte Datenbankabfragestring kann nur eine maximale Länge haben. Ist diese maximale Länge überschritten, wird es einen Laufzeitfehler geben.
  • Besteht bei einer Datenbankabfrage die Gefahr, dass ein Feld Tausende von Datensätzen im Select-Options-Feld beinhalten wird, sollte man besser eine Select-Endselect-Abfrage oder einen „Loop - Select - Endloop“ programmieren.

Web-Links