Aller au contenu
  1. Documentation/

Variables & Déclarations en ABAP

··11 mins· loading · loading · · ·
SAP ERP Back-End
Adrien D'acunto
Auteur
Adrien D’acunto
Sommaire

Variables & Déclarations en ABAP
#

Variables
#

Objectifs
#

  • Comprendre ce qu’est une VARIABLE en ABAP
  • Savoir déclarer et nommer correctement une VARIABLE
  • Identifier les TYPES DE DONNEES disponibles
  • Distinguer les syntaxes TYPE et LIKE

Definition
#

Une VARIABLE est un espace mémoire associé à un nom permettant de stocker une valeur temporaire.
Cette valeur peut changer durant l’exécution du programme.

Une VARIABLE fonctionne comme une boîte étiquetée, un contenant nommé : tu peux y placer une donnée, la modifier ou la remplacer.

Declaration avec data
#

Declaration simple
#

WRITE:/ ’ - DECLARATION SIMPLE…'.

DATA lv_variable TYPE string.
  • DATA déclare une VARIABLE.
  • lv_variable est son nom.
  • TYPE string indique qu’elle stocke une chaîne de caractères.

Declarations successives
#

WRITE:/ ’ - DECLARATION SUCCESSIVE…'.

DATA: lv_variable1 TYPE string,
      lv_variable2 TYPE i,
      lv_variable3 TYPE c1.
  • DATA: déclare une succession de VARIABLES.
  • lv_variable1 → texte (chaîne de caractères)
  • lv_variable2 → entier (nombre)
  • lv_variable3 → caractère fixe de 10 caractères

Grouper les déclarations rend le code plus lisible et facilite la maintenance.

Conventions de nommage
#

Règle Exemple Objectif
Noms clairs et descriptifs lv_age, lv_total Faciliter la compréhension
Préfixe lv_ pour VARIABLES locales lv_name Indique qu’elle est locale
Préfixe gv_ pour VARIABLES globales gv_company Accessible dans tout le programme
Pas de mots-clés réservés lv_count / ❌ DATA Éviter les erreurs de compilation
Déclarer en début de programme Simplifie la relecture et les maintenances

Nommer une VARIABLE, c’est comme nommer un dossier sur ton ordinateur : un nom précis permet de retrouver facilement ce qu’il contient.

Type vs like
#

Deux syntaxes existent pour déclarer une VARIABLE.

Type
#

DATA lv_variable TYPE string.

Définit explicitement le type de données.

Like
#

DATA lv_other_variable LIKE lv_variable.

Reprend le même type et la même longueur qu’une autre VARIABLE.

TYPE → référence à un type de données.
LIKE → référence à une autre VARIABLE.

WRITE:/ ’ - DECLARATION… LIKE…'.

DATA: lv_variable4 TYPE string,
      lv_variable5 LIKE lv_variable4,
      lv_variable6 LIKE lv_variable5.

Types de donnees de base
#

Type c (character)
#

WRITE:/ ’ - TYPE CHAR…'.

DATA: lv_firstname   TYPE char255,
      lv_lastname(9) TYPE c.

lv_firstname = 'John'.
lv_lastname  = 'Wick'.

Stocke des chaînes de texte fixes (noms, adresses, libellés, etc.).

Type i / n / numc (numerique)
#

Type Description Exemple d’usage
I Nombre entier (arithmétique) Calculs, boucles
N Nombre stocké comme texte (sans signe) Manipulation de chiffres en texte
NUMC Caractères numériques Codes postaux, numéros de compte

WRITE:/ ’ - TYPE INTEGER…'.

DATA: lv_integer        TYPE i,
      lv_year           TYPE n,
      lv_numeric_string TYPE numc2.

lv_integer = 10.
lv_year = 2025.
lv_numeric_string = 31000.

I = valeur numérique réelle, utilisée pour le calcul.
N / NUMC = texte contenant uniquement des chiffres.

Type d (date) et sy-datum
#

WRITE:/ ’ - TYPE DATE…'.

DATA: lv_date  TYPE d,
      lv_date2 TYPE datum.

lv_date  = sy-datum.
lv_date2 = 19861102.

Format : AAAAMMJJ
Exemple : 20251029 → 29 octobre 2025.

Type t (time) et sy-uzeit
#

WRITE:/ ’ - TYPE TIME…'.

DATA: lv_time  TYPE t,
      lv_time2 TYPE uzeit.

lv_time  = sy-uzeit.
lv_time2 = 183045.

Format : HHMMSS
Exemple : 183045 → 18h30min45s.

Type f (virgule flottante fixe) / float (precision variable)
#

WRITE:/ ’ - TYPE FLOAT…'.

DATA: lv_f TYPE f,
      lv_float TYPE float.

lv_f = '123455.12'.
lv_float = '123455.12'.

Le TYPE F gère des valeurs décimales avec précision définie. Quant au type FLOAT, c’est une valeur réelle de précision variable, utile pour calculs scientifiques.

Type decfloat
#

WRITE:/ ’ - TYPE DECFLOAT…'.

DATA: lv_decfloat TYPE decfloat34.

lv_decfloat = '12345.67890123456789012345678901234'.

Précision jusqu’à 34 chiffres significatifs - utilisé pour les calculs financiers.

Type p (packed decimal)
#

WRITE:/ ’ - TYPE PACKED DECIMAL…'.

DATA: lv_pack TYPE p DECIMALS 2.

lv_pack = '1234.56'.

Type numérique compact, idéal pour montants financiers.

Type string
#

WRITE:/ ’ - TYPE STRING…'.

DATA: lv_string TYPE string.

lv_string = 'Hello World'.

Longueur variable, utile pour textes dynamiques.

Type boolean / abap_bool
#

WRITE:/ ’ - TYPE BOOLEAN…'.

DATA: lv_bool    TYPE boolean,
      lv_boolean TYPE abap_bool.

lv_bool    = abap_true.
lv_boolean = abap_false.

Valeurs possibles : abap_true (vrai) / abap_false (faux)

Toujours initialiser explicitement :

DATA lv_flag TYPE boolean VALUE abap_true.

Type xfeld
#

WRITE:/ ’ - TYPE XFELD…'.

DATA: lv_xfeld TYPE xfeld VALUE 'X'.

lv_xfeld = 'X'. "Cocher
lv_xfeld = ' '. "Décocher

Représente les cases à cocher SAP :
‘X’ = cochée, ’ ’ = décochée.

Préférer XFELD pour représenter visuellement des états binaires dans les écrans SAP.

Bonnes pratiques
#

Bonne pratique Importance
Déclarer toutes les VARIABLES au début Lisibilité et cohérence
Utiliser des noms explicites Facilite la compréhension du rôle de chaque donnée
Grouper les déclarations par thème Structure et clarté
Toujours initialiser les VARIABLES Évite les comportements imprévus
Ne pas mélanger les types (ex: texte/num) Prévient les erreurs de conversion

Les noms clairs et la rigueur dans la déclaration permettent d’éviter 80% des erreurs de logique en ABAP.

Resume
#

  • Une VARIABLE stocke une valeur modifiable pendant le programme.
  • On la déclare avec DATA et on suit des conventions strictes (lv*, gv*).
  • TYPE et LIKE servent à définir ou copier une structure de type.
  • Les types les plus utilisés : C, I, N, NUMC, D, T, F, STRING, BOOLEAN, XFELD.
  • Toujours initialiser, documenter et nommer clairement les VARIABLES.

Constantes
#

Objectifs
#

  • Comprendre ce qu’est une CONSTANTE en ABAP
  • Savoir déclarer une CONSTANTE avec CONSTANTS
  • Appliquer les conventions de nommage
  • Identifier les types de données possibles
  • Différencier CONSTANTES et VARIABLES

Definition
#

Une CONSTANTE est une valeur fixe associée à un nom.
Contrairement à une variable, sa valeur ne change jamais pendant l’exécution du programme.

Une CONSTANTE, c’est comme un repère fixé sur une carte : il ne bouge pas.
Une variable, elle, peut se déplacer.

Imagine une montre dont la pile est KO : la valeur reste figée.
Une variable serait un thermomètre normal, qui change avec la température.

Declaration avec constants
#

Syntaxe simple
#

WRITE:/ ’ - DECLARATION SIMPLE…’.

CONSTANTS: lc_valeur_const TYPE i VALUE 10.
  • CONSTANTS : mot-clé pour déclarer une CONSTANTE
  • lc_valeur_const : nom de la CONSTANTE
  • TYPE i : type de données entier
  • VALUE 10 : valeur fixe attribuée à la CONSTANTE

C’est comme fixer plusieurs repères sur une même carte.

Le mot-clé CONSTANTS accepte la liste séparée par : pour déclarer plusieurs CONSTANTES consécutives.

Declarations successives
#

WRITE:/ ’ - DECLARATION SUCCESSIVE…'.

CONSTANTS: lc_max_users TYPE i VALUE 100,
           lc_timeout   TYPE i VALUE 30,
           lc_flag      TYPE abap_bool VALUE abap_false.
  • Utiliser la syntaxe CONSTANTS: suivie d’une liste séparée par des virgules pour déclarer plusieurs CONSTANTES en une seule instruction.
  • Chaque CONSTANTE doit préciser TYPE et VALUE ou utiliser LIKE + VALUE.

Regrouper les CONSTANTES par thème (paramètres, codes, formats) aide à la maintenance.

Conventions de nommage
#

Règle Exemple Objectif
Noms descriptifs lc_max_value Comprendre rapidement le rôle de la CONSTANTE
Préfixe lc_ pour locales lc_discount Indique qu’elle est locale au programme
Préfixe gc_ pour globales gc_company Accessible depuis tout le programme
Pas de mots-clés réservés lc_count / ❌ CONSTANTS Éviter les erreurs de compilation
Déclarer en début de programme Facilite la lecture et la maintenance

Une CONSTANTE, c’est un panneau fixe : son étiquette doit être claire car elle ne changera jamais.

Type vs like
#

Type
#

CONSTANTS: lc_valeur_const TYPE i VALUE 10.
  • Définit le type explicitement.

Like
#

DATA: lv_variable TYPE i VALUE 5.
CONSTANTS: lc_valeur_const LIKE lv_variable VALUE 20.
  • Copie le type d’une autre variable, mais reste immuable.

TYPE → tu choisis la forme de ta boîte.
LIKE → tu copies la boîte d’un autre, mais tu ne peux plus l’ouvrir.

Types de donnees pour constantes
#

Integer / numeric / numc
#

WRITE:/ ’ - TYPE INTEGER, N, NUMC…'.

CONSTANTS: lc_integer        TYPE I VALUE 10,
           lc_max_value      TYPE N VALUE 9999,
           lc_account_number TYPE NUMC10 VALUE 1234567890.
  • I → nombres entiers pour calculs
  • N / NUMC → texte numérique (ex: code postal)

Float / f
#

WRITE:/ ’ - TYPE F, FLOAT…'.

CONSTANTS: lc_fixed_value TYPE F VALUE '1234.56',
           lc_float_value TYPE FLOAT VALUE '1234.567890123456789'.
  • F → décimales fixes
  • FLOAT → précision variable (scientifique)

Decfloat
#

WRITE:/ ’ - TYPE DECFLOAT…'.

CONSTANTS: lc_decfloat TYPE DECFLOAT34 VALUE '12345.67890123456789012345678901234'.
  • Haute précision, utile pour calculs financiers.

String
#

WRITE:/ ’ - TYPE STRING…'.

CONSTANTS: lc_string TYPE STRING VALUE 'Hello, World!'.
  • Texte de longueur variable, non modifiable.

Character
#

WRITE:/ ’ - TYPE CHAR…'.

CONSTANTS: lc_char TYPE C LENGTH 1 VALUE 'F'.
  • Caractère fixe (ex: initiale, statut).

Boolean / abap_bool
#

WRITE:/ ’ - TYPE BOOLEAN…'.

CONSTANTS: lc_bool TYPE BOOLEAN VALUE ABAP_TRUE,
           lc_boolean TYPE ABAP_BOOL VALUE ABAP_FALSE.
  • Valeurs logiques : vrai ou faux.

Date (d) et sy-datum
#

WRITE:/ ’ - TYPE DATE…'.

CONSTANTS: lc_date1 TYPE D VALUE SY-DATUM,
           lc_date2 TYPE D VALUE 19861102.
  • Format AAAAMMJJ.

Time (t) et sy-uzeit
#

WRITE:/ ’ - TYPE TIME…'.

CONSTANTS: lc_time1 TYPE T VALUE SY-UZEIT,
           lc_time2 TYPE T VALUE 183045.
  • Format HHMMSS.

Packed decimal (p)
#

WRITE:/ ’ - TYPE PACKED…'.

CONSTANTS: lc_pi TYPE P DECIMALS 2 VALUE '3.14'.
  • Valeur fixe pour montants ou calculs financiers.

Xfeld
#

WRITE:/ ’ - TYPE XFELD…'.

CONSTANTS: lc_xfeld TYPE XFELD VALUE 'X'.
  • ‘X’ = cochée / ’ ’ = décochée.

Bonnes pratiques
#

Bonne pratique Explication
Toujours initialiser la CONSTANTE avec VALUE Elle ne peut pas être modifiée ensuite
Utiliser des noms explicites et lisibles Permet de comprendre rapidement le rôle du repère
Grouper les CONSTANTES par thème Facilite la maintenance
Préférer les CONSTANTES aux valeurs codées en dur Améliore la lisibilité et évite les erreurs
Déclarer les CONSTANTES avant les variables Règle de bonne structure du code ABAP

Remplace toujours les chiffres ou textes répétés par une CONSTANTE : ton code sera plus clair et plus facile à maintenir.

Resume
#

  • Une CONSTANTE garde une valeur fixe pendant tout le programme.
  • Se déclare avec CONSTANTS ... VALUE.
  • TYPE et LIKE définissent ou copient un type existant.
  • Types principaux : I, N, NUMC, F, DECFLOAT, STRING, C, BOOLEAN, D, T, P, XFELD.
  • Toujours préférer une CONSTANTE à une valeur “en dur”.
  • Les CONSTANTES améliorent la clarté, la sécurité et la maintenabilité du code ABAP.

Field-symbols
#

Objectifs
#

  • Comprendre ce qu’est un FIELD-SYMBOL en ABAP
  • Savoir déclarer un FIELD-SYMBOL avec FIELD-SYMBOLS
  • Appliquer les conventions de nommage pour les FIELD-SYMBOLS
  • Différencier FIELD-SYMBOL, VARIABLE et CONSTANTE
  • Comprendre le principe d’assignation et pourquoi il est obligatoire

Definition
#

Un FIELD-SYMBOL est une variable spéciale qui agit comme un pointeur ou une référence vers une zone mémoire.
Modifier un FIELD-SYMBOL revient à modifier directement la donnée pointée, pas le FIELD-SYMBOL lui-même.

Autrement dit, il ne contient pas de valeur propre, mais référence une autre variable, un champ de table ou un résultat d’expression.

Un FIELD-SYMBOL, c’est comme une flèche sur une carte : la flèche ne contient pas l’objet, elle indique juste où il se trouve.

Déplacer ou changer la flèche ne change pas l’objet ; mais utiliser la flèche pour modifier la zone, change directement l’objet.

Utilite
#

  • Parcourir des tables internes sans recopier les lignes.
  • Travailler sur des structures dynamiques ou inconnues à l’avance.
  • Gagner en performance et en flexibilité dans le code.

Principe
#

  • Un FIELD-SYMBOL agit comme un alias temporaire.
  • On le déclare avec FIELD-SYMBOLS, puis on le associe à une variable avec ASSIGN.
  • Après l’association, toute modification via le FIELD-SYMBOL modifie directement la donnée d’origine.

Declaration avec field-symbols
#

Syntaxe simple
#

FIELD-SYMBOLS <lfs_> TYPE any.
ASSIGN <variable> TO <lfs_>.

IF <lfs_> IS ASSIGNED.
  <lfs_> = 'Nouvelle valeur'.
ENDIF.

Exemple :

DATA lv_text TYPE string VALUE 'Bonjour'.
FIELD-SYMBOLS <lfs_string> TYPE string.

ASSIGN lv_text TO <lfs_string>.
<lfs_string> = 'Salut'.

WRITE:/ <lfs_string>.

Declaration multiple
#

FIELD-SYMBOLS: <lfs_field1> TYPE any,
               <lfs_field2> TYPE any,
               <lfs_field3> TYPE any.
  • <lfs_integer> : nom du FIELD-SYMBOL entre chevrons < >
  • TYPE : type de données pointé (i, string, any, etc.)
  • Astuce : TYPE ANY peut être utilisé si le FIELD-SYMBOL pointera sur différents types de données ou sur un objet ABAP.

TYPE ANY est très utile pour des FIELD-SYMBOLS qui pointeront sur différents types d’objets ou structures dynamiques.

Le principe d’assignation
#

Un FIELD-SYMBOL ne contient pas de valeur avant d’être assigné.
Toute tentative d’écriture directe sans assignation provoque une erreur CX_SY_REF_IS_INITIAL.

Exemple non valide
#

FIELD-SYMBOLS <lfs_num> TYPE i.
<lfs_num> = 10.  "ERREUR ! Non assigné

Exemple correct
#

DATA lv_number TYPE i.
FIELD-SYMBOLS <lfs_num> TYPE i.

ASSIGN lv_number TO <lfs_num>.
<lfs_num> = 10.  "OK, modifie directement lv_number
  • ASSIGN : lie le FIELD-SYMBOL à une variable existante.
  • Ensuite, toute modification via le FIELD-SYMBOL affecte la variable cible.
  • Analogie : on pointe la flèche sur le panneau correct avant de pouvoir le modifier.

Exemple parfait
#

DATA: lv_prenom2 TYPE string VALUE 'FRED'.
FIELD-SYMBOLS: <lfs_prenom> TYPE string.

ASSIGN lv_prenom2 TO <lfs_prenom>.

IF <lfs_prenom> IS ASSIGNED.
  <lfs_prenom> = 'PIERRE'.
  WRITE:/ <lfs_prenom>,
      / lv_prenom2.
ENDIF.

Pour être sûr qu’un Field-Symbol est assigné, vous pouvez controller l’assignation comme dans l’exemple ci-dessus via la condition

IF <lfs_> IS ASSIGNED.
  "Traitement ici en cas de condition true
ENDIF.

Field-symbol et objet
#

Pour info pour le module sur les CLASS

Pour un objet :

DATA lo_obj TYPE REF TO zcl_my_class.
FIELD-SYMBOLS <lfs_obj> TYPE zcl_my_class.

CREATE OBJECT lo_obj.
ASSIGN lo_obj->* TO <lfs_obj>.  "Maintenant <lfs_obj> pointe sur l'objet

Conventions de nommage
#

Règle Exemple Objectif
Préfixe <lfs_> pour locaux <lfs_customer> Indique FIELD-SYMBOL à une portée locale
Préfixe <gfs_> pour globaux <gfs_order> Accessible globalement
Basé sur structure ou table <lfs_customer_name> Clarifie la destination du pointeur
Basé sur type de données <lfs_string> Indique le type pointé
Basé sur domaine <lfs_amount> Facilite lecture pour données financières
Noms génériques <lfs_generic> Utilisé quand la destination est non spécifique

Utilisation
#

  • Toujours assigner avant utilisation :
ASSIGN lv_variable TO <lfs_integer>.
  • Toute modification via <lfs_integer> affectera directement lv_variable.
  • Ne jamais écrire sur un FIELD-SYMBOL non assigné.

Resume
#

  • FIELD-SYMBOL = pointeur vers une zone mémoire, pas valeur directe
  • Déclarer avec FIELD-SYMBOLS <nom> TYPE ...
  • Toujours assigner avec ASSIGN avant toute utilisation
  • Préfixes <lfs_> (local) ou <gfs_> (global) pour lisibilité
  • TYPE ANY utile pour objets ou types variables
  • Analogie générale : flèche sur une carte, elle pointe vers la cible, la modification se fait sur la cible, pas sur la flèche.

Articles connexes

Introduction ABAP
·16 mins· loading · loading
SAP ERP Back-End
Les instructions en ABAP
··24 mins· loading · loading
SAP ERP Back-End
Structure d'un programme ABAP
··14 mins· loading · loading
SAP ERP Back-End
Dracula Theme
·1 min· loading · loading
SAP ERP
Fonctions Commerciales et SAP - Guide Complet
··9 mins· loading · loading
ERP SAP
Introduction à SAP
··8 mins· loading · loading
ERP SAP