Section courante

A propos

Section administrative du site

Les déclarations de données

La déclaration des données est une étape fondamentale dans tout programme ABAP. Elle permet de définir les variables, les constantes, les structures et les tables internes étant utilisées pour entreposer et manipuler les informations pendant l'exécution du programme.

En ABAP, toutes les déclarations doivent apparaître avant les instructions exécutables. Cette contrainte assure une séparation claire entre la définition des ressources et leur utilisation, ce qui facilite la compréhension et la maintenance du code.

Le système de déclaration ABAP offre plusieurs mécanismes complémentaires :

Le choix entre ces mécanismes dépend du contexte et des besoins de reutilisabilité. Une bonne pratique consiste a définir des types personnalisés pour les structures fréquemment utilisées, et a utiliser LIKE pour référencer les éléments du dictionnaire de données SAP.

Instruction DATA - Déclaration de variables

L'instruction DATA est le mécanisme principal pour déclarer des variables en ABAP. Elle alloue de la mémoire pour stocker une valeur et associe un nom symbolique a cette zone de mémoire.

Syntaxe complète :

DATA nom TYPE type [LENGTH longueur] [DECIMALS decimales]
    [VALUE valeur_initiale] [READ-ONLY].

Éléments de la syntaxe :

Paramètre Description
nom Identifiant unique de la variable (max 30 caractères)
TYPE type Spécification du type de données
LENGTH longueur Taille pour les types C, N, X (optionnel)
DECIMALS décimales Nombre de décimales pour le type P (optionnel)
VALUE valeur Valeur initiale (optionnel)
READ-ONLY Empêche la modification directe (optionnel, classes)

Règles de nommage recommandées (conventions SAP) :

Exemples de déclarations simples :

  1.     " Entier avec valeur initiale
  2.     DATA gv_compteur TYPE I VALUE 0.
  3.  
  4.     " Chaine de caracteres avec longueur explicite
  5.     DATA gv_nom TYPE C LENGTH 30.
  6.  
  7.     " Nombre decimal avec precision
  8.     DATA gv_prix TYPE P LENGTH 8 DECIMALS 2.
  9.  
  10.     " Chaine de longueur variable
  11.     DATA gv_texte TYPE STRING.
  12.  
  13.     " Date et heure
  14.     DATA gv_date TYPE D VALUE sy-datum.
  15.     DATA gv_heure TYPE T.
  16.  
  17.     " Reference au dictionnaire de donnees
  18.     DATA gv_client TYPE kunnr.    " Numero client SAP
  19.     DATA gv_montant TYPE wrbtr.   " Montant en devise

Initialisation automatique : toute variable déclarée sans clause VALUE reçoit automatiquement la valeur initiale de son type (0 pour les nombres, espaces pour les chaînes, '00000000' pour les dates,...).

Portée des variables : une variable déclarée avec DATA au niveau du programme (hors des procédures) est globale et accessible depuis tout le programme. Une variable déclarée dans une procédure (FORM, METHOD, FUNCTION) est locale a cette procédure.

Déclaration chaînée - Syntaxe avec deux-points

La déclaration chaînée permet de déclarer plusieurs variables en une seule instruction DATA, en utilisant le caractère deux-points (:) après le mot-clef et des virgules pour séparer les déclarations.

Syntaxe :

DATA: nom1 TYPE type1 [options1],
    nom2 TYPE type2 [options2],
    ...
    nomN TYPE typeN [optionsN].

Cette syntaxe est particulièrement utile pour :

Exemple détaillé :

  1.     " Declarations groupees par fonction
  2.     DATA: " Variables de travail
  3.           lv_index    TYPE I,
  4.           lv_longueur TYPE I,
  5.           lv_position TYPE I,
  6.  
  7.           " Variables de resultat
  8.           lv_total    TYPE P DECIMALS 2,
  9.           lv_moyenne  TYPE F,
  10.  
  11.           " Indicateurs
  12.           lv_trouve   TYPE ABAP_BOOL,
  13.           lv_erreur   TYPE ABAP_BOOL VALUE abap_false.

Bonnes pratiques pour les déclarations chaînées :

Déclaration avec BEGIN OF - END OF intégrée :

La syntaxe chaînée permet aussi de déclarer directement des structures :

  1.     DATA: BEGIN OF ls_donnees,
  2.             id    TYPE I,
  3.             nom   TYPE C LENGTH 30,
  4.             actif TYPE ABAP_BOOL,
  5.           END OF ls_donnees.

Cette forme est équivalente à définir un type puis déclarer une variable de ce type, mais sans créer de type reutilisable.

Instruction CONSTANTS - Déclaration de constantes

L'instruction CONSTANTS permet de déclarer des valeurs immuables qui ne peuvent pas être modifiées pendant l'exécution du programme. L'utilisation de constantes amélioré la lisibilité et la maintenabilité du code.

Syntaxe :

CONSTANTS nom TYPE type VALUE valeur.

Règles de nommage recommandées :

Avantages des constantes :

Exemples de déclarations de constantes :

  1.     " Constantes mathematiques
  2.     CONSTANTS gc_pi TYPE F VALUE '3.14159265358979'.
  3.     CONSTANTS gc_e  TYPE F VALUE '2.71828182845904'.
  4.  
  5.     " Limites et seuils
  6.     CONSTANTS gc_max_lignes TYPE I VALUE 1000.
  7.     CONSTANTS gc_taux_tva   TYPE P DECIMALS 2 VALUE '20.00'.
  8.  
  9.     " Codes et statuts
  10.     CONSTANTS gc_statut_actif   TYPE C LENGTH 1 VALUE 'A'.
  11.     CONSTANTS gc_statut_inactif TYPE C LENGTH 1 VALUE 'I'.
  12.     CONSTANTS gc_statut_bloque  TYPE C LENGTH 1 VALUE 'B'.
  13.  
  14.     " Messages
  15.     CONSTANTS gc_msg_erreur TYPE STRING VALUE 'Une erreur est survenue'.

Déclaration chaînée de constantes :

  1.     CONSTANTS: gc_lundi    TYPE I VALUE 1,
  2.                gc_mardi    TYPE I VALUE 2,
  3.                gc_mercredi TYPE I VALUE 3,
  4.                gc_jeudi    TYPE I VALUE 4,
  5.                gc_vendredi TYPE I VALUE 5,
  6.                gc_samedi   TYPE I VALUE 6,
  7.                gc_dimanche TYPE I VALUE 7.

Constantes de structure :

Les constantes peuvent aussi être des structures avec des valeurs prédéfinies pour chaque champ :

  1.     CONSTANTS: BEGIN OF gc_defaut,
  2.                  taille TYPE I VALUE 100,
  3.                  format TYPE C LENGTH 3 VALUE 'PDF',
  4.                  actif  TYPE ABAP_BOOL VALUE abap_true,
  5.                END OF gc_defaut.

Déclaration par référence - LIKE et TYPE REF TO

La clause LIKE permet de déclarer une variable en reprenant le type d'une autre variable existante ou d'un élément du dictionnaire de données SAP (tables, structures, éléments de données).

Syntaxe avec LIKE :

DATA nom LIKE reference.

Cas d'utilisation de LIKE :

Exemples :

  1.     " Reference a une variable locale
  2.     DATA gv_original TYPE I.
  3.     DATA gv_copie LIKE gv_original.
  4.  
  5.     " Reference a un champ de table du dictionnaire
  6.     DATA gv_numero_client LIKE kna1-kunnr.
  7.     DATA gv_nom_client LIKE kna1-name1.
  8.     DATA gv_montant LIKE bseg-wrbtr.
  9.  
  10.     " Reference a la ligne d'une table
  11.     DATA gt_clients LIKE TABLE OF kna1.
  12.     DATA gs_client LIKE LINE OF gt_clients.

TYPE vs LIKE - Différences et recommandations :

Recommandation moderne : depuis ABAP 7.40, il est préférable d'utiliser TYPE plutôt que LIKE pour la plupart des cas. LIKE reste utile pour référencer des champs de tables du dictionnaire ou pour copier le type d'une variable dynamiquement déterminée.

Types référence - TYPE REF TO :

Pour travailler avec des références (pointeurs), ABAP utilise la syntaxe TYPE REF TO :

  1.     " Reference a un objet
  2.     DATA lo_client TYPE REF TO zcl_client.
  3.  
  4.     " Reference a des donnees
  5.     DATA lr_donnees TYPE REF TO ty_donnees.
  6.     DATA lr_table TYPE REF TO DATA.      " Reference generique

Instruction TYPES - Définition de types personnalises

L'instruction TYPES permet de créer des définitions de types réutilisables dans tout le programme. Ces types peuvent être des types élémentaires, des structures ou des types de tables.

Syntaxe pour types élémentaires :

TYPES nom TYPE type_de_base [LENGTH longueur] [DECIMALS decimales].

Exemples :

  1.     " Types elementaires personnalises
  2.     TYPES ty_montant TYPE P LENGTH 15 DECIMALS 2.
  3.     TYPES ty_code TYPE C LENGTH 10.
  4.     TYPES ty_description TYPE STRING.

Syntaxe pour types structures :

  1.   TYPES: BEGIN OF nom_structure,
  2.            champ1 TYPE type1,
  3.            champ2 TYPE type2,
  4.            ...
  5.          END OF nom_structure.

Exemple complet de structure :

  1.     " Definition d'un type structure
  2.     TYPES: BEGIN OF ty_employe,
  3.              matricule TYPE N LENGTH 8,
  4.              nom       TYPE C LENGTH 40,
  5.              prenom    TYPE C LENGTH 30,
  6.              service   TYPE C LENGTH 4,
  7.              salaire   TYPE P LENGTH 8 DECIMALS 2,
  8.              date_embauche TYPE D,
  9.              actif     TYPE ABAP_BOOL,
  10.            END OF ty_employe.
  11.  
  12.     " Declaration de variables utilisant ce type
  13.     DATA gs_employe TYPE ty_employe.
  14.     DATA gt_employes TYPE TABLE OF ty_employe.
  15.     DATA gs_backup TYPE ty_employe.

Structures imbriquées :

Les structures peuvent contenir d'autres structures pour modéliser des données complexes :

  1.     TYPES: BEGIN OF ty_adresse,
  2.              rue        TYPE C LENGTH 60,
  3.              code_postal TYPE N LENGTH 5,
  4.              ville      TYPE C LENGTH 40,
  5.              pays       TYPE C LENGTH 3,
  6.            END OF ty_adresse.
  7.  
  8.     TYPES: BEGIN OF ty_client_complet,
  9.              numero     TYPE N LENGTH 10,
  10.              nom        TYPE C LENGTH 60,
  11.              adresse_facturation TYPE ty_adresse,
  12.              adresse_livraison   TYPE ty_adresse,
  13.              telephone  TYPE C LENGTH 15,
  14.              email      TYPE C LENGTH 60,
  15.            END OF ty_client_complet.

Inclusion de structures avec INCLUDE :

Pour éviter la duplication, on peut inclure une structure dans une autre avec la clause INCLUDE :

  1.     TYPES: BEGIN OF ty_personne,
  2.              nom    TYPE C LENGTH 40,
  3.              prenom TYPE C LENGTH 30,
  4.            END OF ty_personne.
  5.  
  6.     TYPES: BEGIN OF ty_employe_v2.
  7.              INCLUDE TYPE ty_personne.
  8.     TYPES:   matricule TYPE N LENGTH 8,
  9.              service   TYPE C LENGTH 4,
  10.            END OF ty_employe_v2.

Structures - Définition et utilisation détaillée

Les structures sont des types de données composes regroupant plusieurs champs de types différents sous un même identificateur.

Elles sont essentielles pour modéliser des entités métier complexes.

Déclaration directe avec DATA BEGIN OF :

  1.     DATA: BEGIN OF gs_commande,
  2.             numero      TYPE N LENGTH 10,
  3.             date        TYPE D,
  4.             client      TYPE N LENGTH 10,
  5.             montant_ht  TYPE P DECIMALS 2,
  6.             tva         TYPE P DECIMALS 2,
  7.             montant_ttc TYPE P DECIMALS 2,
  8.             statut      TYPE C LENGTH 2,
  9.           END OF gs_commande.

Accès aux champs d'une structure :

L'accès aux champs individuels se fait avec le tiret (-) :

  1.     gs_commande-numero = '0000000001'.
  2.     gs_commande-date = sy-datum.
  3.     gs_commande-client = '0000123456'.
  4.     gs_commande-montant_ht = '1000.00'.
  5.     gs_commande-tva = gs_commande-montant_ht * '0.20'.
  6.     gs_commande-montant_ttc = gs_commande-montant_ht + gs_commande-tva.

Affectation complète de structure :

On peut affecter une structure entière a une autre du même type :

  1.     DATA gs_copie LIKE gs_commande.
  2.     gs_copie = gs_commande.          " Copie complete

Ou utiliser MOVE-CORRESPONDING pour copier les champs de même nom :

  1.     DATA: BEGIN OF gs_resume,
  2.             numero TYPE N LENGTH 10,
  3.             montant_ttc TYPE P DECIMALS 2,
  4.           END OF gs_resume.
  5.  
  6.     MOVE-CORRESPONDING gs_commande TO gs_resume.

Initialisation des structures :

  1.     " Reinitialiser tous les champs a leur valeur initiale
  2.     CLEAR gs_commande.
  3.  
  4.     " Reinitialiser un champ specifique
  5.     CLEAR gs_commande-statut.
  6.  
  7.     " Verifier si une structure est initiale
  8.     IF gs_commande IS INITIAL.
  9.       WRITE: / 'La structure est vide'.
  10.     ENDIF.

Tables internes - Déclaration et types de tables

Les tables internes sont des structures de données dynamiques permettant d'entreposer plusieurs lignes du même type. Elles sont fondamentales pour le traitement de collections de données en ABAP.

Types de tables internes :

ABAP supporte trois types principaux de tables internes, chacun optimise pour des usages spécifiques :

Syntaxe de déclaration :

  1.     " Table standard (defaut)
  2.     DATA gt_donnees TYPE TABLE OF ty_ligne.
  3.     DATA gt_clients TYPE STANDARD TABLE OF ty_client.
  4.  
  5.     " Table triee avec cle
  6.     DATA gt_employes TYPE SORTED TABLE OF ty_employe
  7.                      WITH UNIQUE KEY matricule.
  8.  
  9.     " Table avec cle non unique
  10.     DATA gt_commandes TYPE SORTED TABLE OF ty_commande
  11.                       WITH NON-UNIQUE KEY client.
  12.  
  13.     " Table hashee avec cle unique
  14.     DATA gt_index TYPE HASHED TABLE OF ty_index
  15.                   WITH UNIQUE KEY code.

Déclaration complète avec toutes les options :

  1.     TYPES: BEGIN OF ty_article,
  2.              numero TYPE N LENGTH 10,
  3.              designation TYPE C LENGTH 40,
  4.              prix TYPE P DECIMALS 2,
  5.              stock TYPE I,
  6.            END OF ty_article.
  7.  
  8.     DATA gt_articles TYPE TABLE OF ty_article
  9.          WITH HEADER LINE             " (obsolete mais supporte)
  10.          WITH KEY numero.

Syntaxe moderne (ABAP 7.40+) :

DATA gt_articles TYPE SORTED TABLE OF ty_article
     WITH UNIQUE KEY numero
     WITH NON-UNIQUE SORTED KEY k_prix COMPONENTS prix.

Déclaration avec LIKE TABLE OF :

DATA gt_clients_vip LIKE TABLE OF gs_client.
DATA gt_copie LIKE gt_clients.

Field-symbols et références de données

Les field-symbols sont des pointeurs symboliques vers des zones de mémoire. Ils permettent d'accéder a des données de manière dynamique sans copier les valeurs.

Déclaration de field-symbols :

FIELD-SYMBOLS fs_ligne TYPE ty_ligne.
FIELD-SYMBOLS fs_champ TYPE ANY.
FIELD-SYMBOLS fs_table TYPE ANY TABLE.

Affectation avec ASSIGN :

DATA gv_valeur TYPE I VALUE 42.
FIELD-SYMBOLS fs_val TYPE I.

ASSIGN gv_valeur TO fs_val.
fs_val = 100.             " Modifie gv_valeur directement
WRITE: / gv_valeur.      " Affiche 100

Utilisation avec les tables internes :

LOOP AT gt_clients ASSIGNING FIELD-SYMBOL(<fs_client>).
   <fs_client>-statut = 'A'. " Modification directe
ENDLOOP.

Vérification d'affectation :

IF <fs_val> IS ASSIGNED.
   <" Le field-symbol pointe vers une donnee valide
ENDIF.

UNASSIGN <fs_val>. " Libere l'affectation

Références de données avec GET REFERENCE :

  1.     DATA lr_ref TYPE REF TO ty_client.
  2.     DATA ls_client TYPE ty_client.
  3.  
  4.     GET REFERENCE OF ls_client INTO lr_ref.
  5.  
  6.     " Acces via la reference
  7.     lr_ref->nom = 'Dupont'.

Écran de sélection - PARAMETERS et SELECT-OPTIONS

L'écran de sélection permet de définir des paramètres d'entrée que l'utilisateur peut renseigner avant l'exécution d'un report. C'est une fonctionnalité essentielle des programmes de type REPORT.

Instruction PARAMETERS :

PARAMETERS nom TYPE type [DEFAULT valeur] [options].

Options principales de PARAMETERS :

Exemples de PARAMETERS :

  1.     " Parametre simple avec valeur par defaut
  2.     PARAMETERS p_societe TYPE bukrs DEFAULT '1000'.
  3.  
  4.     " Parametre obligatoire
  5.     PARAMETERS p_date TYPE sy-datum OBLIGATORY.
  6.  
  7.     " Case a cocher
  8.     PARAMETERS p_actif AS CHECKBOX DEFAULT 'X'.
  9.  
  10.     " Boutons radio
  11.     PARAMETERS: p_opt1 RADIOBUTTON GROUP grp1 DEFAULT 'X',
  12.                 p_opt2 RADIOBUTTON GROUP grp1,
  13.                 p_opt3 RADIOBUTTON GROUP grp1.
  14.  
  15.     " Parametre avec liste de valeurs (recherche F4)
  16.     PARAMETERS p_client TYPE kunnr MATCHCODE OBJECT zsh_client.

Instruction SELECT-OPTIONS :

SELECT-OPTIONS nom FOR variable [options].

Les SELECT-OPTIONS permettent de définir des intervalles de valeurs (intervals) pour les sélections. Le système crée automatiquement une table interne avec les champs SIGN, OPTION, LOW et HIGH.

Structure d'une ligne SELECT-OPTIONS :

Exemples de SELECT-OPTIONS :

  1.     " Variable de reference pour SELECT-OPTIONS
  2.     TABLES: kna1.    " Ou: DATA gv_kunnr TYPE kna1-kunnr.
  3.  
  4.     " Selection de numeros de clients
  5.     SELECT-OPTIONS s_kunnr FOR kna1-kunnr.
  6.  
  7.     " Selection de dates
  8.     SELECT-OPTIONS s_date FOR sy-datum DEFAULT sy-datum.
  9.  
  10.     " Selection avec options
  11.     SELECT-OPTIONS s_bukrs FOR t001-bukrs NO-EXTENSION
  12.                                           NO INTERVALS.

Utilisation dans les requêtes SELECT :

  1.     SELECT * FROM kna1
  2.       WHERE kunnr IN s_kunnr
  3.         AND land1 = p_pays
  4.       INTO TABLE gt_clients.

Variables système - Structure SY

ABAP fournit une structure système SY (alias SYST) contenant des informations sur le contexte d'exécution. Ces champs sont en lecture seule et mis a jour automatiquement par le système.

Champs SY fréquemment utilises :

Champ Type Description
sy-subrc I Code retour de la dernière opération
sy-datum D Date système (AAAAMMJJ)
sy-uzeit T Heure système (HHMMSS)
sy-uname C(12) Nom de l'utilisateur connecte
sy-langu C(1) Langue de connexion
sy-mandt C(3) Mandant de connexion
sy-sysid C(8) Identifiant du système SAP
sy-host C(32) Nom du serveur d'application
sy-index I Index de boucle (DO, WHILE)
sy-tabix I Index de ligne dans une table interne
sy-dbcnt I Nombre de lignes traitées par SELECT
sy-msgid C(20) Classe du dernier message
sy-msgno N(3) Numéro du dernier message
sy-msgty C(1) Type du dernier message (E/W/I/S)
sy-msgv1-v4 C(50) Variables du dernier message
sy-repid C(40) Nom du programme en cours
sy-tcode C(20) Code transaction en cours
sy-dynnr N(4) Numéro d'écran courant
sy-batch C(1) 'X' si exécution en traitement par lots

Exemples d'utilisation :

  1.     " Verification du code retour
  2.     READ TABLE gt_clients WITH KEY numero = lv_num INTO gs_client.
  3.     IF sy-subrc = 0.
  4.       WRITE: / 'Client trouve:', gs_client-nom.
  5.     ELSE.
  6.       WRITE: / 'Client non trouve'.
  7.     ENDIF.
  8.  
  9.     " Utilisation de la date et heure systeme
  10.     gs_log-date_creation = sy-datum.
  11.     gs_log-heure_creation = sy-uzeit.
  12.     gs_log-utilisateur = sy-uname.
  13.  
  14.     " Index de boucle
  15.     DO 10 TIMES.
  16.       WRITE: / 'Iteration:', sy-index.
  17.     ENDDO.
  18.  
  19.     " Index de table
  20.     LOOP AT gt_articles INTO gs_article.
  21.       gs_article-ligne = sy-tabix.
  22.     ENDLOOP.

Bonnes pratiques pour les déclarations

Conventions de nommage recommandées :

Préfixe Signification Exemple
gv_ Variable globale gv_compteur
lv_ Variable locale lv_index
gs_ Structure globale gs_client
ls_ Structure locale ls_donnees
gt_ Table globale gt_resultats
lt_ Table locale lt_temp
gf_ Flag/booleen global gf_traite
lf_ Flag/booleen local lf_erreur
gc_ Constante globale gc_max
lc_ Constante locale lc_taille
lo_ Objet local lo_document
go_ Objet global go_application
lr_ Référence locale lr_donnees
gr_ Référence globale gr_contexte

Types personnalises :

Préfixe Signification Exemple
ty_ Type structure ty_client
tt_ Type table tt_clients
tr_ Type range tr_numeros

Organisation des déclarations :

Pour une meilleure lisibilité, organiser les déclarations dans l'ordre suivant :

Exemple d'organisation :

  1.     "======================================
  2.     " Types personnalises
  3.     "======================================
  4.     TYPES: BEGIN OF ty_resultat,
  5.              code TYPE N LENGTH 10,
  6.              valeur TYPE P DECIMALS 2,
  7.            END OF ty_resultat.
  8.     TYPES tt_resultats TYPE TABLE OF ty_resultat.
  9.  
  10.     "======================================
  11.     " Constantes
  12.     "======================================
  13.     CONSTANTS: gc_max_lignes TYPE I VALUE 1000,
  14.                gc_version TYPE C LENGTH 5 VALUE '1.0.0'.
  15.  
  16.     "======================================
  17.     " Variables globales
  18.     "======================================
  19.     DATA: gv_compteur TYPE I,
  20.           gv_total TYPE P DECIMALS 2,
  21.           gs_resultat TYPE ty_resultat.
  22.  
  23.     "======================================
  24.     " Tables internes
  25.     "======================================
  26.     DATA: gt_resultats TYPE tt_resultats,
  27.           gt_erreurs TYPE TABLE OF bapiret2.
  28.  
  29.     "======================================
  30.     " Ecran de selection
  31.     "======================================
  32.     PARAMETERS p_annee TYPE gjahr OBLIGATORY.
  33.     SELECT-OPTIONS s_bukrs FOR t001-bukrs.


Dernière mise à jour : Lundi, le 30 mars 2026