L’instruction SELECT-OPTIONS est un mot-clé ABAP spécial que vous utilisez exclusivement dans la partie déclaration des programmes exécutables (REPORT), des groupes de fonctions ou des pools de modules. Elle sert à définir des critères de sélection complexes sur l’écran de sélection standard (Dynpro 1000) d’un programme.
Contrairement aux simples PARAMETERS qui ne créent qu’un seul champ de saisie, SELECT-OPTIONS permet à l’utilisateur de saisir à l’exécution :
- Des valeurs individuelles
- Des intervalles (plages de-à)
- Plusieurs valeurs individuelles et intervalles (via le bouton de sélection multiple)
- Des exclusions de valeurs ou d’intervalles
- Des comparaisons de motifs (ex. ‘ABC*’)
Les options de sélection définies sont typiquement utilisées dans la clause WHERE des instructions SELECT pour filtrer les requêtes de base de données de manière dynamique et flexible.
Syntaxe
SELECT-OPTIONS <selcrit> FOR <champ> [DEFAULT <valeur> [TO <valeur2>] [OPTION <op>] [SIGN <sg>]] " Valeurs par défaut [OBLIGATORY] " Saisie obligatoire [NO-EXTENSION] " Pas de sélection multiple (une seule ligne) [NO INTERVALS] " Pas de saisie d'intervalle (seulement valeurs uniques/motifs) [LOWER CASE] " Autoriser/conserver les minuscules [MEMORY ID <pid>] " ID mémoire SAP pour pré-remplissage [VISIBLE LENGTH <vlen>] " Longueur visible des champs à l'écran [MODIF ID <mid>]. " Groupe de modification pour adaptation dynamique de l'écran " [MATCHCODE OBJECT ...] " Obsolète pour aide F4, mieux via référence Dictionary dans FOR " [NO DATABASE SELECTION] " Généralement pour usage interne SAP<selcrit>: Le nom du critère de sélection (ex.s_kunnr,so_matnr). Sous ce nom, une table Ranges est créée en interne.FOR <champ>: Très important ! Spécifie l’objet de données auquel le critère se réfère et dont il hérite le type de données. C’est souvent un champ de table de base de données (ex.mara-matnr) ou une variable locale (my_variable). Le type détermine les propriétés des champsLOWetHIGHde la table Ranges et influence les vérifications de saisie ainsi que l’aide F4.
Fonctionnement (Que se passe-t-il en arrière-plan ?)
L’instruction SELECT-OPTIONS <selcrit> FOR ... déclare implicitement une table interne nommée <selcrit>. Cette table a une structure fixe (structure Ranges) avec quatre colonnes :
SIGN(Character 1) : Contient ‘I’ pour Inclusif (Include) ou ‘E’ pour Exclusif (Exclude).OPTION(Character 2) : Contient l’opérateur de comparaison. Les valeurs courantes sont :EQ: Equals (Égal)NE: Not Equal (Différent)BT: Between (Entre)NB: Not Between (Pas entre)CP: Contains Pattern (Contient un motif, ex.A*)NP: Not contains Pattern (Ne contient pas le motif)GT: Greater Than (Supérieur à)GE: Greater Equal (Supérieur ou égal)LT: Less Than (Inférieur à)LE: Less Equal (Inférieur ou égal)
LOW: La limite inférieure ou la valeur unique. Le type de données est hérité du champ dans la clauseFOR.HIGH: La limite supérieure (pertinente uniquement pourOPTION=BTouNB). Même type de données queLOW.
Sur l’écran de sélection, l’utilisateur saisit des valeurs que le système inscrit ensuite dans cette table interne <selcrit> lors de l’exécution du report.
Compléments (Options) importants expliqués
DEFAULT <valeur> [TO <valeur2>] ...: Pré-remplit le critère à l’écran avec une ou plusieurs valeurs par défaut.OBLIGATORY: Rend la saisie d’au moins une valeur dans ce critère obligatoire. Le programme ne peut pas être lancé sans saisie.NO-EXTENSION: Masque le bouton “Sélection multiple” (à droite des champs de saisie). L’utilisateur ne peut saisir que la ligne directement visible (une valeur ou un intervalle).NO INTERVALS: Masque le champ “Jusqu’à” (champ HIGH). L’utilisateur ne peut saisir que des valeurs uniques (EQ,NE,GT, etc.) ou des motifs (CP,NP), pas de plages (BT,NB).LOWER CASE: Permet la saisie de lettres minuscules et empêche la conversion automatique en majuscules.
Utilisation dans ABAP SQL (Requêtes de base de données)
La table Ranges <selcrit> remplie par l’utilisateur est utilisée dans la clause WHERE d’une instruction SELECT avec l’opérateur IN pour filtrer la sélection de base de données :
SELECT carrid, connid, fldate FROM spfli WHERE carrid IN @s_carrid " s_carrid est le SELECT-OPTIONS AND connid IN @s_connid " s_connid est un autre SELECT-OPTIONS INTO TABLE @DATA(lt_flights).La base de données ne sélectionne alors que les lignes dont les valeurs de champ satisfont les conditions définies dans la table Ranges.
Distinction avec PARAMETERS
PARAMETERS: Définit un unique champ de saisie pour exactement une valeur sur l’écran de sélection.SELECT-OPTIONS: Définit des possibilités de saisie plus complexes (plages, valeurs multiples, exclusions, motifs) et crée pour cela une table interne.
Exemples
1. Select-Option standard pour numéro d’article
REPORT z_demo_selopt.
TABLES: mara. " Pour la clause FOR (ou déclarer une variable locale)
SELECT-OPTIONS s_matnr FOR mara-matnr.
START-OF-SELECTION. SELECT matnr, mtart, matkl FROM mara WHERE matnr IN @s_matnr " Filtrer par numéros d'articles INTO TABLE @DATA(lt_mara).
cl_demo_output=>display( lt_mara ).(Crée sur l’écran de sélection des champs pour Material de/à et le bouton de sélection multiple)
2. Plage de dates avec valeur par défaut (aujourd’hui) et saisie obligatoire
SELECT-OPTIONS s_date FOR sy-datum OBLIGATORY DEFAULT sy-datum.(Crée un champ de date de/à, pré-rempli avec la date du jour et qui doit être renseigné)
3. Uniquement des compagnies aériennes individuelles (pas de plages, pas de sélection multiple)
SELECT-OPTIONS s_carrid FOR spfli-carrid NO INTERVALS NO-EXTENSION.(Crée seulement un champ de saisie unique pour l’ID de la compagnie aérienne, sans champ “jusqu’à” et sans bouton de sélection multiple)
Notes importantes / Bonnes pratiques
SELECT-OPTIONSsont définis dans la partie déclaration des programmes qui doivent avoir un écran de sélection.- La clause
FORest cruciale pour le type, les vérifications et l’aide F4. Elle doit référencer un champ du dictionnaire ou une variable avec le type approprié. - La table Ranges générée est utilisée avec l’opérateur
INdans la clauseWHERE. - Utilisez
PARAMETERSpour des valeurs de saisie simples etSELECT-OPTIONSpour des critères de sélection plus complexes.