SELECTION-SCREEN n’est pas une instruction unique, mais une famille d’instructions que vous utilisez dans la partie déclaration d’un programme ABAP (typiquement un REPORT, mais aussi dans des groupes de fonctions ou des pools de modules). Son objectif principal est de concevoir visuellement, structurer et étendre l’écran de sélection standard (Dynpro 1000) qui est automatiquement créé par la déclaration de PARAMETERS et SELECT-OPTIONS.
Avec les instructions SELECTION-SCREEN, vous pouvez :
- Grouper les paramètres et options de sélection dans des blocs (avec ou sans cadre et titre).
- Disposer les éléments spécifiquement sur une ligne.
- Ajouter des commentaires et des textes statiques.
- Insérer des lignes horizontales (
ULINE) et des espacements verticaux (SKIP). - Ajouter des boutons-poussoirs (Pushbuttons) qui déclenchent des actions utilisateur.
- Définir des onglets (Tabstrips) (plus complexe).
- Contrôler dynamiquement la visibilité ou la disponibilité de saisie des éléments à l’exécution (dans l’événement
AT SELECTION-SCREEN OUTPUT).
Contexte important : Ces instructions définissent l’apparence et la structure de l’écran de sélection. Elles appartiennent à la partie déclaration de votre programme, avant les blocs de traitement réels comme INITIALIZATION ou START-OF-SELECTION. La logique pour l’adaptation dynamique appartient au bloc d’événement AT SELECTION-SCREEN OUTPUT.
Syntaxe et variantes importantes
Voici les instructions SELECTION-SCREEN les plus courantes :
1. Définir des blocs
SELECTION-SCREEN BEGIN OF BLOCK <nombloc> [WITH FRAME [TITLE <titre>]] [NO INTERVALS]. " Insérer ici les PARAMETERS et SELECT-OPTIONS appartenant au bloc PARAMETERS p_param TYPE ... SELECT-OPTIONS s_selopt FOR ...SELECTION-SCREEN END OF BLOCK <nombloc>.WITH FRAME: Crée un cadre visible autour des éléments.TITLE <titre>: Donne un titre au cadre (peut être un littéral ou un symbole de textetext-xxx).NO INTERVALS: Masque le champ “Jusqu’à” (limite d’intervalle) pour tous lesSELECT-OPTIONSdans ce bloc.
2. Formater les lignes
SELECTION-SCREEN BEGIN OF LINE. " Commence une nouvelle ligne SELECTION-SCREEN POSITION <colonne>. " Positionne l'élément suivant PARAMETERS p_feld1 ... SELECTION-SCREEN POSITION <colonne2>. PARAMETERS p_feld2 ...SELECTION-SCREEN END OF LINE. " Fin de la définition de ligne
SELECTION-SCREEN ULINE [[/]<pos>(<len>)]. " Ligne horizontale (Underline) " / = Nouvelle ligne, pos = colonne de départ, len = longueur
SELECTION-SCREEN SKIP [<n>]. " Insère <n> (par défaut 1) lignes vides3. Commentaires / Textes
SELECTION-SCREEN COMMENT [/]<pos>(<len>) <texte> [FOR FIELD <nomchamp>] [VISIBLE LENGTH <vlen>] [MODIF ID <key>].- Affiche le texte statique
<texte>(littéral outext-xxx). FOR FIELD: Lie le commentaire à un paramètre ou Select-Option (ex. pour l’aide F1).MODIF ID: Groupe pour l’adaptation dynamique (voir ci-dessous).
4. Boutons-poussoirs
SELECTION-SCREEN PUSHBUTTON [/]<pos>(<len>) <texte_bouton> USER-COMMAND <code_fonction> [VISIBLE LENGTH <vlen>] [MODIF ID <key>].- Crée un bouton. Au clic,
AT SELECTION-SCREENest déclenché etsy-ucommcontient le<code_fonction>.
5. Barre de fonctions (Toolbar)
SELECTION-SCREEN FUNCTION KEY <n>. " n = 1, 2, 3, 4 ou 5- Active les boutons-poussoirs FKEY<n> dans la barre d’outils de l’application (le texte doit être défini dans le statut GUI).
Adaptation dynamique (dans l’événement AT SELECTION-SCREEN OUTPUT)
Avant que l’écran de sélection ne soit affiché, vous pouvez modifier l’apparence et le comportement des éléments dans l’événement AT SELECTION-SCREEN OUTPUT. Pour cela, assignez un MODIF ID <key> aux éléments lors de la déclaration, puis traitez la table interne SCREEN :
AT SELECTION-SCREEN OUTPUT. LOOP AT SCREEN. IF screen-group1 = 'KEY'. " 'KEY' est le MODIF ID IF <condition>. screen-active = '1'. " Disponible pour saisie screen-invisible = '0'. " Visible screen-required = '1'. " Champ obligatoire ELSE. screen-active = '0'. " Non disponible pour saisie screen-invisible = '1'. " Invisible screen-required = '0'. " Pas de champ obligatoire ENDIF. MODIFY SCREEN. ENDIF. ENDLOOP.Exemples
1. Regroupement avec blocs et lignes
REPORT z_sel_screen_demo.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001. PARAMETERS: p_matnr TYPE matnr, p_werks TYPE werks_d.SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN SKIP 1. " Une ligne videSELECTION-SCREEN ULINE. " Une ligne de séparationSELECTION-SCREEN SKIP 1. " Une ligne vide
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002. SELECT-OPTIONS: s_date FOR sy-datum.SELECTION-SCREEN END OF BLOCK b2.2. Éléments sur une ligne
SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(15) text-003 FOR FIELD p_carrid. SELECTION-SCREEN POSITION 17. PARAMETERS: p_carrid TYPE s_carr_id. SELECTION-SCREEN COMMENT 30(15) text-004 FOR FIELD p_connid. SELECTION-SCREEN POSITION 47. PARAMETERS: p_connid TYPE s_conn_id.SELECTION-SCREEN END OF LINE.3. Bouton-poussoir avec action
SELECTION-SCREEN PUSHBUTTON /10(25) btn_show USER-COMMAND show.
INITIALIZATION. btn_show = 'Afficher les détails'. " Définir le texte du bouton
AT SELECTION-SCREEN. " Événement après saisie, avant START-OF-SELECTION CASE sy-ucomm. WHEN 'SHOW'. MESSAGE 'Action "Afficher les détails" a été déclenchée.' TYPE 'S'. " Ici vous pourriez par exemple afficher/masquer d'autres champs " ou démarrer un pré-traitement. ENDCASE.
START-OF-SELECTION. WRITE / 'Traitement principal démarré.'.En résumé :
Les instructions SELECTION-SCREEN sont l’outil pour concevoir l’écran de sélection standard des programmes ABAP au-delà de la simple définition de PARAMETERS et SELECT-OPTIONS. Elles permettent une meilleure structuration visuelle et peuvent également réaliser un comportement dynamique via la gestion des événements (AT SELECTION-SCREEN OUTPUT, AT SELECTION-SCREEN). Pour des interfaces plus complexes, on recourt cependant au Screen Painter (SE51) ou aux technologies UI modernes.