Les Selection Screens fournissent une interface utilisateur standardisée pour la saisie de critères de sélection dans les reports ABAP. Avec PARAMETERS et SELECT-OPTIONS, des masques de saisie flexibles peuvent être créés.
Éléments de base
| Élément | Description |
|---|---|
PARAMETERS | Saisie de valeur unique |
SELECT-OPTIONS | Saisie de plage (de-à, sélection multiple) |
SELECTION-SCREEN | Contrôle de mise en page |
Exemples
1. Paramètres simples
REPORT zselection_demo.
" Paramètres individuelsPARAMETERS: p_bukrs TYPE bukrs, " Société p_gjahr TYPE gjahr DEFAULT sy-datum(4)," Année avec défaut p_name TYPE string. " Texte libre
" Paramètre avec aide à la recherche (automatique depuis le domaine)PARAMETERS: p_matnr TYPE matnr.
" Champ obligatoirePARAMETERS: p_kunnr TYPE kunnr OBLIGATORY.
START-OF-SELECTION. WRITE: / 'Société :', p_bukrs, / 'Année :', p_gjahr, / 'Nom :', p_name, / 'Client :', p_kunnr.2. SELECT-OPTIONS pour les plages
" Sélection de plageSELECT-OPTIONS: s_kunnr FOR kna1-kunnr, " Numéro client s_erdat FOR vbak-erdat, " Date s_matnr FOR mara-matnr. " Article
START-OF-SELECTION. " SELECT avec SELECT-OPTIONS SELECT * FROM kna1 WHERE kunnr IN @s_kunnr INTO TABLE @DATA(lt_customers).
" Ou avec plusieurs conditions SELECT * FROM vbak WHERE kunnr IN @s_kunnr AND erdat IN @s_erdat INTO TABLE @DATA(lt_orders).
WRITE: / 'Clients trouvés :', lines( lt_customers ).3. Checkbox et boutons radio
" CheckboxPARAMETERS: p_test AS CHECKBOX DEFAULT 'X'.PARAMETERS: p_detail AS CHECKBOX.
" Boutons radio (groupe)PARAMETERS: p_opt1 RADIOBUTTON GROUP grp1 DEFAULT 'X', p_opt2 RADIOBUTTON GROUP grp1, p_opt3 RADIOBUTTON GROUP grp1.
START-OF-SELECTION. IF p_test = abap_true. WRITE: / 'Mode test actif'. ENDIF.
CASE abap_true. WHEN p_opt1. WRITE: / 'Option 1 sélectionnée'. WHEN p_opt2. WRITE: / 'Option 2 sélectionnée'. WHEN p_opt3. WRITE: / 'Option 3 sélectionnée'. ENDCASE.4. Liste déroulante (Listbox)
" Listbox avec valeurs fixesPARAMETERS: p_status TYPE char1 AS LISTBOX VISIBLE LENGTH 20 DEFAULT 'A'.
" Les valeurs sont définies lors de INITIALIZATIONINITIALIZATION. DATA: lt_values TYPE vrm_values.
lt_values = VALUE #( ( key = 'A' text = 'Actif' ) ( key = 'I' text = 'Inactif' ) ( key = 'B' text = 'Bloqué' ) ).
CALL FUNCTION 'VRM_SET_VALUES" EXPORTING id = 'P_STATUS" values = lt_values.5. Blocs SELECTION-SCREEN
" Bloc avec cadreSELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-b01. PARAMETERS: p_bukrs TYPE bukrs OBLIGATORY, p_gjahr TYPE gjahr OBLIGATORY.SELECTION-SCREEN END OF BLOCK b1.
" Autre blocSELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-b02. SELECT-OPTIONS: s_kunnr FOR kna1-kunnr, s_name FOR kna1-name1.SELECTION-SCREEN END OF BLOCK b2.
" Bloc pour les optionsSELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE TEXT-b03. PARAMETERS: p_test AS CHECKBOX, p_alv AS CHECKBOX DEFAULT 'X'.SELECTION-SCREEN END OF BLOCK b3.6. Éléments sur une ligne
" Plusieurs éléments côte à côteSELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(10) TEXT-001. " 'Date de :" PARAMETERS: p_from TYPE sy-datum. SELECTION-SCREEN COMMENT 30(10) TEXT-002. " 'Date à :" PARAMETERS: p_to TYPE sy-datum DEFAULT sy-datum.SELECTION-SCREEN END OF LINE.
" Encore une ligneSELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(15) TEXT-003. PARAMETERS: p_check AS CHECKBOX. SELECTION-SCREEN COMMENT 20(20) TEXT-004.SELECTION-SCREEN END OF LINE.7. Textes dynamiques
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE gv_title. PARAMETERS: p_value TYPE i.SELECTION-SCREEN END OF BLOCK b1.
DATA: gv_title TYPE string.
INITIALIZATION. gv_title = 'Paramètres d''entrée'.
" Définir dynamiquement le libellé du champ %_p_value_%_app_%-text = 'Quantité'.8. Onglets (Tabstrips)
" Définir le tabstripSELECTION-SCREEN BEGIN OF TABBED BLOCK tab FOR 15 LINES. SELECTION-SCREEN TAB (20) tab1 USER-COMMAND ucomm1 DEFAULT SCREEN 100. SELECTION-SCREEN TAB (20) tab2 USER-COMMAND ucomm2 DEFAULT SCREEN 200. SELECTION-SCREEN TAB (20) tab3 USER-COMMAND ucomm3 DEFAULT SCREEN 300.SELECTION-SCREEN END OF BLOCK tab.
" Subscreen 100SELECTION-SCREEN BEGIN OF SCREEN 100. PARAMETERS: p_par1 TYPE string.SELECTION-SCREEN END OF SCREEN 100.
" Subscreen 200SELECTION-SCREEN BEGIN OF SCREEN 200. PARAMETERS: p_par2 TYPE i.SELECTION-SCREEN END OF SCREEN 200.
" Subscreen 300SELECTION-SCREEN BEGIN OF SCREEN 300. SELECT-OPTIONS: s_range FOR mara-matnr.SELECTION-SCREEN END OF SCREEN 300.
INITIALIZATION. tab1 = 'Général'. tab2 = 'Détails'. tab3 = 'Sélection'.9. Événements Selection Screen
PARAMETERS: p_kunnr TYPE kunnr, p_name TYPE name1_gp.
" Avant l'affichage de l'écran de sélectionINITIALIZATION. p_kunnr = '0000001000'. " Valeur par défaut
" Lors du changement de valeur d'un champAT SELECTION-SCREEN ON p_kunnr. " Vérification du champ client SELECT SINGLE kunnr FROM kna1 WHERE kunnr = @p_kunnr INTO @DATA(lv_kunnr).
IF sy-subrc <> 0. MESSAGE e001(zmsg) WITH p_kunnr. " 'Le client & n'existe pas" ENDIF.
" Lors du changement de valeur avec reprise de valeurAT SELECTION-SCREEN ON VALUE-REQUEST FOR p_name. " Aide F4 personnalisée DATA: lt_return TYPE TABLE OF ddshretval.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST" EXPORTING retfield = 'NAME" value_org = 'S" TABLES value_tab = lt_names return_tab = lt_return.
IF lt_return IS NOT INITIAL. p_name = lt_return[ 1 ]-fieldval. ENDIF.
" Sur F1 (Aide)AT SELECTION-SCREEN ON HELP-REQUEST FOR p_kunnr. MESSAGE 'Entrez un numéro de client valide' TYPE 'I'.
" À la fin de la saisie (avant START-OF-SELECTION)AT SELECTION-SCREEN. " Validation croisée IF p_kunnr IS INITIAL AND p_name IS INITIAL. MESSAGE e002(zmsg). " 'Indiquer au moins un critère de recherche" ENDIF.
START-OF-SELECTION. " Logique principale10. Modifier SELECT-OPTIONS
SELECT-OPTIONS: s_kunnr FOR kna1-kunnr.
INITIALIZATION. " Valeurs par défaut pour SELECT-OPTIONS s_kunnr = VALUE #( ( sign = 'I' option = 'BT' low = '0000001000' high = '0000001999' ) ).
AT SELECTION-SCREEN OUTPUT. " Restreindre SELECT-OPTION à "égal uniquement" LOOP AT SCREEN. IF screen-name CS 'S_KUNNR'. screen-required = '1'. " Champ obligatoire ENDIF. MODIFY SCREEN. ENDLOOP.11. Afficher/Masquer des champs
PARAMETERS: p_mode TYPE char1 AS LISTBOX VISIBLE LENGTH 10.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME. PARAMETERS: p_field1 TYPE string MODIF ID gr1, p_field2 TYPE string MODIF ID gr2.SELECTION-SCREEN END OF BLOCK b1.
AT SELECTION-SCREEN OUTPUT. LOOP AT SCREEN. " Groupe 1 seulement pour Mode = 'A" IF screen-group1 = 'GR1'. IF p_mode = 'A'. screen-active = '1'. ELSE. screen-active = '0'. ENDIF. ENDIF.
" Groupe 2 seulement pour Mode = 'B" IF screen-group1 = 'GR2'. IF p_mode = 'B'. screen-active = '1'. ELSE. screen-active = '0'. ENDIF. ENDIF.
MODIFY SCREEN. ENDLOOP.
AT SELECTION-SCREEN ON p_mode. " Reconstruire l'écran après changement de mode12. Champs en lecture seule
PARAMETERS: p_ref TYPE string, p_calc TYPE p DECIMALS 2 MODIF ID ro1. " Lecture seule
AT SELECTION-SCREEN OUTPUT. LOOP AT SCREEN. IF screen-group1 = 'RO1'. screen-input = '0'. " Pas de saisie possible screen-intensified = '1'. " Mis en évidence ENDIF. MODIFY SCREEN. ENDLOOP.
AT SELECTION-SCREEN ON p_ref. " Calcul lors du changement p_calc = strlen( p_ref ).13. Bouton-poussoir dans l’écran de sélection
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME. PARAMETERS: p_input TYPE string.SELECTION-SCREEN END OF BLOCK b1.
" Boutons-poussoirsSELECTION-SCREEN PUSHBUTTON /1(20) btn1 USER-COMMAND cmd1.SELECTION-SCREEN PUSHBUTTON 25(20) btn2 USER-COMMAND cmd2.
INITIALIZATION. btn1 = 'Valider'. btn2 = 'Réinitialiser'.
AT SELECTION-SCREEN. CASE sy-ucomm. WHEN 'CMD1'. " Validation IF p_input IS INITIAL. MESSAGE 'Saisie requise' TYPE 'S' DISPLAY LIKE 'E'. ELSE. MESSAGE 'Saisie OK' TYPE 'S'. ENDIF.
WHEN 'CMD2'. " Réinitialiser CLEAR p_input. ENDCASE.14. Sauvegarder et charger des variantes
" Charger une variante de manière programmatiquePARAMETERS: p_var TYPE raldb_vari.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_var. " Sélection de variantes CALL FUNCTION 'RS_VARIANT_CATALOG" EXPORTING report = sy-repid new_title = 'Sélectionner une variante" IMPORTING variant = p_var.
AT SELECTION-SCREEN. IF sy-ucomm = 'LOAD_VAR' AND p_var IS NOT INITIAL. " Charger la variante CALL FUNCTION 'RS_SUPPORT_SELECTIONS" EXPORTING report = sy-repid variant = p_var. ENDIF.15. Exemple complet
REPORT zcomplete_selection.
" TextesSELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-b01. PARAMETERS: p_bukrs TYPE bukrs OBLIGATORY. SELECT-OPTIONS: s_gjahr FOR bkpf-gjahr DEFAULT sy-datum(4).SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-b02. SELECT-OPTIONS: s_kunnr FOR bsid-kunnr, s_lifnr FOR bsik-lifnr.SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE TEXT-b03. PARAMETERS: p_alv AS CHECKBOX DEFAULT 'X', p_detail AS CHECKBOX, p_test AS CHECKBOX.SELECTION-SCREEN END OF BLOCK b3.
" Boutons-poussoirsSELECTION-SCREEN FUNCTION KEY 1.SELECTION-SCREEN FUNCTION KEY 2.
" Données globalesDATA: gt_data TYPE TABLE OF bsid.
INITIALIZATION. " Textes des touches de fonction sscrfields-functxt_01 = 'Documentation'. sscrfields-functxt_02 = 'Tout effacer'.
AT SELECTION-SCREEN. CASE sscrfields-ucomm. WHEN 'FC01'. " Afficher la documentation CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT" EXPORTING titel = 'Aide" textline1 = 'Ce programme crée un rapport." textline2 = 'Sélectionnez vos critères.'.
WHEN 'FC02'. " Effacer tous les champs CLEAR: s_kunnr[], s_lifnr[]. ENDCASE.
AT SELECTION-SCREEN ON p_bukrs. " Valider la société SELECT SINGLE bukrs FROM t001 WHERE bukrs = @p_bukrs INTO @DATA(lv_bukrs).
IF sy-subrc <> 0. MESSAGE e010(zmsg) WITH p_bukrs. ENDIF.
START-OF-SELECTION. " Charger les données IF p_test = abap_true. WRITE: / 'Mode test - aucune donnée chargée'. RETURN. ENDIF.
SELECT * FROM bsid WHERE bukrs = @p_bukrs AND gjahr IN @s_gjahr AND kunnr IN @s_kunnr INTO TABLE @gt_data.
WRITE: / 'Enregistrements chargés :', lines( gt_data ).
END-OF-SELECTION. " ALV ou liste classique IF p_alv = abap_true. " Afficher ALV TRY. cl_salv_table=>factory( IMPORTING r_salv_table = DATA(lo_alv) CHANGING t_table = gt_data ). lo_alv->display( ). CATCH cx_salv_msg. ENDTRY. ELSE. " Sortie classique LOOP AT gt_data INTO DATA(ls_data). WRITE: / ls_data-bukrs, ls_data-kunnr, ls_data-dmbtr. ENDLOOP. ENDIF.Événements de report
| Événement | Moment |
|---|---|
INITIALIZATION | Avant l’affichage de l’écran de sélection |
AT SELECTION-SCREEN OUTPUT | Avant chaque PBO |
AT SELECTION-SCREEN ON field | Après changement de champ |
AT SELECTION-SCREEN ON VALUE-REQUEST | Sur F4 |
AT SELECTION-SCREEN ON HELP-REQUEST | Sur F1 |
AT SELECTION-SCREEN | À la fin de la saisie |
START-OF-SELECTION | Après l’écran de sélection |
END-OF-SELECTION | Après le traitement des données |
Notes importantes / Bonnes pratiques
- Utiliser OBLIGATORY pour les champs obligatoires.
- Utiliser DEFAULT pour un pré-remplissage pertinent.
- Blocs avec FRAME pour un regroupement clair.
- Validation dans
AT SELECTION-SCREEN ON field. - MODIF ID pour afficher/masquer dynamiquement.
- SELECT-OPTIONS pour une sélection de plage flexible.
- Personnaliser l’aide F4 avec
VALUE-REQUEST. - Éléments de texte (TEXT-xxx) pour la traductibilité.
- Variantes pour des paramètres réutilisables.
- Combiner avec ALV pour une sortie professionnelle.