Aller au contenu
  1. Exemples/

Exemple d'un code ABAP avec variables, constantes et types de données

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

Exemple d’un code ABAP avec variables, constantes et types de données
#

Vue d’ensemble
#

Ce programme est un guide complet et pédagogique sur les variables, constantes et types de données en ABAP. Il couvre tous les types fondamentaux du langage ABAP avec des exemples pratiques et des exercices.

Structure du Programme
#

Fichier Rôle Contenu
ZADA_PROG_UNIT_03.txt Programme principal Orchestre l’appel de toutes les routines
ZADA_PROG_UNIT_03_TOP.txt Déclarations globales Variable globale gv_birthdate
ZADA_PROG_UNIT_03_SCR.txt Écran de sélection Vide (non utilisé)
ZADA_PROG_UNIT_03_F01.txt Sous-programmes 24 FORM routines pédagogiques

Variables en ABAP
#

Déclaration Simple
#

FORM variable_declaration_simple.
  " Déclaration individuelle
  DATA lv_prenom TYPE string.
  DATA lv_nom TYPE char40.

  " Affectation
  lv_prenom = 'adrien'.
  lv_nom = 'dacunto'.
ENDFORM.

Points clés :

  • DATA : mot-clé pour déclarer une variable
  • TYPE : spécifie le type de données
  • Chaque variable doit être déclarée avant utilisation

Déclaration Successive (Recommandée)
#

FORM variable_declaration_succes.
  DATA: lv_age    TYPE i,
        lv_code_p TYPE i.

  lv_age = 10.
ENDFORM.

Avantages :

  • Déclaration groupée avec DATA:
  • Meilleure lisibilité
  • Pratique standard en ABAP

Convention de Nommage
#

FORM variable_convention_nommage.
  DATA: lv_prix TYPE i,  "  Correct : lv_ pour local variable
        prix    TYPE i.  "  Mauvais : pas de préfixe
ENDFORM.

Préfixes standards :

  • lv_ : Local Variable (variable locale)
  • gv_ : Global Variable (variable globale)
  • lt_ : Local Table (table interne locale)
  • gt_ : Global Table (table interne globale)
  • ls_ : Local Structure (structure locale)
  • gs_ : Global Structure (structure globale)

TYPE vs LIKE
#

FORM variable_type_vs_like.
  DATA: lv_variable4 TYPE string,
        lv_variable5 LIKE lv_variable4,  " Copie le type de lv_variable4
        lv_variable6 LIKE lv_variable5.  " Copie le type de lv_variable5
ENDFORM.

Différences :

Mot-clé Usage Exemple
TYPE Référence un type prédéfini DATA lv_nom TYPE string
LIKE Copie le type d’une variable existante DATA lv_nom2 LIKE lv_nom

Constantes en ABAP
#

Déclaration Simple
#

FORM constant_declaration_simple.
  " Obligation de définir la valeur à la déclaration
  CONSTANTS lc_an_0 TYPE i VALUE 0000.

  DATA lv_an_sup LIKE lc_an_0.
  lv_an_sup = lc_an_0 + 0001.
ENDFORM.

Points clés :

  • CONSTANTS : mot-clé pour déclarer une constante
  • VALUE : obligatoire à la déclaration
  • lc_ : préfixe pour Local Constant
  • Immuable : la valeur ne peut pas être modifiée après déclaration

Déclaration Successive
#

FORM constant_declaration_succes.
  CONSTANTS: lc_birthdate    TYPE string VALUE 'Seoul',
             lc_birthcountry TYPE string VALUE 'South Korea'.
ENDFORM.

Types de Données ABAP
#

Type Caractère (C)
#

FORM type_c.
  " Deux manières de déclarer un TYPE char
  DATA lv_char1     TYPE char10.     " Méthode 1
  DATA lv_char2(10) TYPE c.          " Méthode 2 (Recommandée)
ENDFORM.

Caractéristiques :

  • Chaîne de caractères de longueur fixe
  • Utilisé pour limiter la taille
  • Complété par des espaces à droite

Type String
#

DATA lv_prenom TYPE string.
lv_prenom = 'adrien'.

Caractéristiques :

  • Longueur dynamique
  • Pas de limite de taille
  • Type recommandé pour les textes

Types Numériques
#

FORM type_numeric.
  " Type Integer (i) : nombres entiers signés
  DATA lv_integer TYPE i.
  lv_integer = 1000.

  " Type Numeric (n) : chaîne numérique
  DATA lv_n TYPE n.
  lv_n = 1000.

  " Type NUMC : numérique avec longueur fixe
  DATA lv_numc TYPE numc5.
  lv_numc = 31000.  " Code postal Toulouse
ENDFORM.

Comparaison :

Type Description Exemple Usage
i Entier signé (-2³¹ à 2³¹-1) 1000 Calculs mathématiques
n Chaîne numérique '0100' Codes, identifiants
numc Numérique longueur fixe 31000 Codes postaux, matricules

Type Date (D)
#

FORM type_date.
  " Format AAAAMMJJ (YYYYMMDD)
  DATA lv_date TYPE d.

  lv_date = sy-datum.      " Date système
  lv_date = '19801104'.    " Date fixe

  DATA lv_datum TYPE datum.
  lv_datum = sy-datum.
ENDFORM.

Points clés :

  • Format obligatoire : AAAAMMJJ (8 caractères)
  • sy-datum : variable système contenant la date du jour
  • TYPE d ou TYPE datum : équivalents

Type Heure (T)
#

FORM type_heure.
  DATA lv_heure  TYPE uzeit.
  DATA lv_heure2 TYPE t.

  lv_heure = sy-uzeit.   " Heure système
  lv_heure2 = sy-uzeit.
ENDFORM.

Points clés :

  • Format : HHMMSS (6 caractères)
  • sy-uzeit : variable système contenant l’heure actuelle
  • TYPE t ou TYPE uzeit : équivalents

Type Float (F)
#

FORM type_float.
  DATA: lv_f     TYPE f,
        lv_float TYPE float.

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

Caractéristiques :

  • Virgule flottante
  • Précision : environ 15-17 chiffres significatifs
  • Attention : peut avoir des problèmes d’arrondi

Type Decimal Float (DECFLOAT)
#

FORM type_decfloat.
  " Précision jusqu'à 34 chiffres significatifs
  " Utilisé pour les calculs financiers
  DATA lv_decfloat TYPE decfloat34.

  lv_decfloat = '12345.67890123456789012345678901234'.
ENDFORM.

Avantages :

  • Haute précision (34 chiffres)
  • Idéal pour calculs financiers
  • Évite les erreurs d’arrondi

Type Packed Decimal (P)
#

FORM type_packed_decimal.
  " Type numérique compact, idéal pour montants financiers
  DATA lv_pack TYPE p DECIMALS 2.

  lv_pack = '1234.56'.
ENDFORM.

Caractéristiques :

  • Format compact (économie mémoire)
  • DECIMALS : nombre de décimales
  • Type recommandé pour les montants

Type Boolean
#

FORM type_boolean.
  DATA: lv_check  TYPE boolean,
        lv_check2 TYPE abap_bool.

  lv_check = abap_true.
  lv_check2 = abap_false.
ENDFORM.

Valeurs possibles :

  • abap_true : vrai (valeur ‘X’)
  • abap_false : faux (valeur ’ ‘)
  • abap_undefined : indéfini

Type XFELD
#

FORM type_xfeld.
  DATA: lv_xfeld1 TYPE xfeld,
        lv_xfeld2 TYPE xfeld.

  lv_xfeld1 = 'X'.   " Actif / Vrai
  lv_xfeld2 = ''.    " Inactif / Faux

  " IMPORTANT : Le 'X' doit être en MAJUSCULE !
ENDFORM.

Points clés :

  • Caractère unique (1 caractère)
  • 'X' = Vrai (case cochée)
  • '' (vide) = Faux (case non cochée)
  • Sensible à la casse : utiliser 'X' et non 'x'

Field-Symbols (Pointeurs)
#

Concept
#

Les Field-Symbols sont des pointeurs ABAP qui référencent une zone mémoire sans la copier.

Analogie :

C’est comme une flèche sur une carte :

  • La flèche ne contient pas l’objet
  • Elle indique simplement où il se trouve
  • Modifier via le Field-Symbol modifie l’original

Déclaration et Utilisation
#

FORM type_fieldsymbols.
  " 1. DÉCLARATION
  DATA lv_text TYPE string VALUE 'Bonjour'.
  FIELD-SYMBOLS <lfs_string> TYPE string.

  " 2. ASSIGNATION (obligatoire avant utilisation)
  ASSIGN lv_text TO <lfs_string>.

  " 3. UTILISATION
  WRITE:/ <lfs_string>.          " Affiche : Bonjour
  <lfs_string> = 'Salut'.        " Modifie lv_text via le pointeur
  WRITE:/ <lfs_string>.          " Affiche : Salut
  WRITE:/ lv_text.               " Affiche aussi : Salut

  " 4. EXEMPLE AVEC NOMBRE
  DATA lv_number TYPE i.
  FIELD-SYMBOLS <lfs_num> TYPE i.

  ASSIGN lv_number TO <lfs_num>.
  <lfs_num> = 10.                " Modifie directement lv_number
ENDFORM.

Syntaxe Field-Symbol
#

FIELD-SYMBOLS <nom> TYPE type.

Convention de nommage :

  • Toujours entre chevrons : <lfs_xxx>
  • Préfixe lfs_ : Local Field-Symbol
  • Préfixe gfs_ : Global Field-Symbol

Déclaration Successive
#

FORM fieldsymbols_succes.
  FIELD-SYMBOLS: <lfs_field1> TYPE any,
                 <lfs_field2> TYPE any,
                 <lfs_field3> TYPE any.

  " TYPE any : peut pointer vers n'importe quel type
  " Nécessite d'ASSIGN avant utilisation
ENDFORM.

Vérification d’Assignation
#

IF <lfs_prenom> IS ASSIGNED.
  <lfs_prenom> = 'Adrien'.
ENDIF.

Importance :

  • Un Field-Symbol non assigné provoque l’erreur CX_SY_REF_IS_INITIAL
  • Toujours vérifier avec IS ASSIGNED avant utilisation

Avantages des Field-Symbols
#

Performance : pas de copie de données
Modification directe : change l’original
Flexibilité : TYPE any accepte tous les types
Mémoire : économise la RAM sur grandes tables

Exercices Pratiques
#

Exercice Carte d’Identité
#

FORM exercice_carte_identite.
  " Déclarations de constantes
  CONSTANTS: lc_birthdate    TYPE d VALUE '20000829',
             lc_birthcountry TYPE string VALUE 'FRA',
             lc_birthplace   TYPE string VALUE 'Saint-Jean'.

  " Déclarations de variables
  DATA: lv_lastname        TYPE string,
        lv_firstname       TYPE string,
        lv_num_doc         TYPE string,
        lv_expiration_date TYPE d,
        lv_sex             TYPE c LENGTH 1,
        lv_height          TYPE float,
        lv_date_delivery   TYPE d,
        lv_address         TYPE string.

  " Affectation de valeurs
  lv_lastname = 'D''acunto'.           " Double apostrophe pour échapper
  lv_firstname = 'Adrien'.
  lv_num_doc = 'BJZJXV8X9'.
  lv_expiration_date = '20350818'.
  lv_sex = 'M'.
  lv_height = '1.67'.
  lv_date_delivery = '20250819'.
  lv_address = '1 RUE DES MARGUERITES 31140 AUCAMVILLE FRANCE'.

  " Affichage
  WRITE:/ 'LASTNAME : ', lv_lastname,
        / 'FIRSTNAME : ', lv_firstname,
        / 'BIRTHDATE : ', lc_birthdate,
        / 'BIRTHCOUNTRY : ', lc_birthcountry,
        / 'BIRTHPLACE : ', lc_birthplace,
        / 'DOCUMENT NUMBER : ', lv_num_doc,
        / 'EXPIRATION DATE : ', lv_expiration_date,
        / 'SEX : ', lv_sex,
        / 'HEIGHT : ', lv_height,
        / 'DELIVERY DATE : ', lv_date_delivery,
        / 'ADDRESS : ', lv_address.
ENDFORM.

Notions couvertes :

  • Constantes pour données immuables
  • Variables pour données modifiables
  • Types variés (string, date, float, caractère)
  • Échappement d’apostrophe : 'D''acunto'

Exercice Field-Symbols
#

FORM exercice_fieldsymbols.
  " Déclaration de variables de base
  DATA: lv_nom    TYPE string VALUE 'Dupont',
        lv_prenom TYPE string VALUE 'Claire',
        lv_age    TYPE i      VALUE 32.

  " 1. Déclarer 3 field-symbols
  FIELD-SYMBOLS: <lfs_nom>    TYPE string,
                 <lfs_prenom> TYPE string,
                 <lfs_age>    TYPE i.

  " 2. Assigner chaque field-symbol
  ASSIGN lv_nom TO <lfs_nom>.
  ASSIGN lv_prenom TO <lfs_prenom>.
  ASSIGN lv_age TO <lfs_age>.

  " 3. Modifier via field-symbols avec vérification
  IF <lfs_prenom> IS ASSIGNED.
    <lfs_prenom> = 'Adrien'.
  ENDIF.

  IF <lfs_nom> IS ASSIGNED.
    <lfs_nom> = 'D''acunto'.
  ENDIF.

  IF <lfs_age> IS ASSIGNED.
    <lfs_age> = 25.
  ENDIF.

  " 4. Affichage des variables (modifiées via Field-Symbols)
  WRITE:/ 'LASTNAME : ', lv_nom,
        / 'FIRSTNAME : ', lv_prenom,
        / 'AGE : ', lv_age.
ENDFORM.

Résultat attendu :

LASTNAME :  D'acunto
FIRSTNAME : Adrien
AGE :       25

Concepts démontrés :

  • Déclaration de Field-Symbols
  • Assignation avec ASSIGN...TO
  • Vérification avec IS ASSIGNED
  • Modification indirecte des variables originales

Conventions de Nommage
#

Préfixes pour Variables
#

Préfixe Signification Portée Exemple
lv_ Local Variable Locale (FORM, méthode) lv_nom
gv_ Global Variable Globale (programme) gv_birthdate
lc_ Local Constant Locale lc_an_0
gc_ Global Constant Globale gc_tva_rate

Préfixes pour Structures et Tables
#

Préfixe Signification Exemple
ls_ Local Structure ls_material
gs_ Global Structure gs_customer
lt_ Local Table lt_invoices
gt_ Global Table gt_products

Préfixes pour Field-Symbols
#

Préfixe Signification Exemple
<lfs_> Local Field-Symbol <lfs_item>
<gfs_> Global Field-Symbol <gfs_line>

Règles Générales
#

À FAIRE :

  • Noms en minuscules avec underscores : lv_first_name
  • Noms descriptifs et explicites
  • Respecter les préfixes selon la portée
  • Utiliser l’anglais pour cohérence (recommandé)

À ÉVITER :

  • Noms ambigus : lv_temp, lv_x
  • Pas de préfixe : prix au lieu de lv_prix
  • CamelCase : lvFirstName (non standard ABAP)
  • Noms trop longs : lv_variable_contenant_le_montant_total_avec_tva

Tableau Récapitulatif des Types
#

Types Caractères
#

Type Taille Description Exemple
C Fixe (1-65535) Caractères longueur fixe DATA lv_char(10) TYPE c
STRING Variable Chaîne dynamique DATA lv_text TYPE string
N Fixe Chaîne numérique DATA lv_n(5) TYPE n

Types Numériques
#

Type Plage Décimales Usage Exemple
I -2³¹ à 2³¹-1 Non Entiers signés DATA lv_count TYPE i
P Variable Oui Montants, calculs précis DATA lv_amount TYPE p DECIMALS 2
F ±10⁻³⁰⁷ à ±10³⁰⁸ Oui Calculs scientifiques DATA lv_pi TYPE f
DECFLOAT16 16 chiffres Oui Calculs financiers précis DATA lv_price TYPE decfloat16
DECFLOAT34 34 chiffres Oui Haute précision DATA lv_exact TYPE decfloat34

Types Date et Heure
#

Type Format Description Variable Système
D AAAAMMJJ Date sy-datum
T HHMMSS Heure sy-uzeit
DATUM AAAAMMJJ Date (alias de D) sy-datum
UZEIT HHMMSS Heure (alias de T) sy-uzeit

Types Logiques
#

Type Valeurs Description
BOOLEAN abap_true, abap_false, abap_undefined Booléen ABAP
ABAP_BOOL abap_true, abap_false Booléen simplifié
XFELD 'X' ou '' Case à cocher (1 caractère)

Comparaison des Types pour Montants
#

Type Avantages Inconvénients Recommandation
P (DECIMALS 2) Compact, précis, standard SAP Limité à 31 chiffres ⭐ Recommandé pour montants
DECFLOAT34 Très haute précision Plus lourd en mémoire Pour calculs complexes
F (Float) Rapide Erreurs d’arrondi Éviter pour montants

Astuces et Bonnes Pratiques
#

Raccourcis Clavier (mentionnés dans le code)
#

Raccourci Action
CTRL + D Duplique la ligne sélectionnée
CTRL + Clic Gauche Sélectionne le mot entier

Bonnes Pratiques
#

Variables
#

Déclarer au plus près de l’utilisation

"  Bon
START-OF-SELECTION.
  DATA lv_count TYPE i.
  lv_count = 10.
"  Mauvais (déclaration trop éloignée)
DATA lv_count TYPE i.

" ... 100 lignes de code ...

START-OF-SELECTION.
  lv_count = 10.

Constantes
#

Utiliser pour les valeurs fixes

"  Bon
CONSTANTS lc_tva_rate TYPE p DECIMALS 2 VALUE '20.00'.
DATA lv_prix_ttc TYPE p DECIMALS 2.
lv_prix_ttc = lv_prix_ht * ( 1 + lc_tva_rate / 100 ).
"  Mauvais (valeur magique)
lv_prix_ttc = lv_prix_ht * 1.2.  " D'où vient 1.2 ?

Types de Données
#

Choisir le type approprié

Cas d’usage Type recommandé
Montant financier TYPE p DECIMALS 2
Compteur, index TYPE i
Texte libre TYPE string
Code postal TYPE numc5
Indicateur oui/non TYPE xfeld ou TYPE abap_bool
Date TYPE d
Heure TYPE t

Field-Symbols
#

Vérifier l’assignation

"  Bon
IF <lfs_data> IS ASSIGNED.
  <lfs_data> = 'Nouvelle valeur'.
ENDIF.
"  Mauvais (risque d'erreur runtime)
<lfs_data> = 'Nouvelle valeur'.  " Crash si non assigné !

Erreurs Courantes à Éviter
#

Erreur Problème Solution
'x' pour XFELD 'x' minuscule n’est pas reconnu Utiliser 'X' majuscule
Field-Symbol non assigné Erreur CX_SY_REF_IS_INITIAL Toujours vérifier avec IS ASSIGNED
Apostrophe dans chaîne 'D'acunto' cause erreur syntaxe Doubler l’apostrophe : 'D''acunto'
Float pour montants Erreurs d’arrondi Utiliser TYPE p DECIMALS 2
Date mauvais format Date ‘01/01/2024’ invalide Format AAAAMMJJ : ‘20240101’

Variables Système Utiles
#

Variable Type Description Exemple
sy-datum D Date du jour lv_date = sy-datum
sy-uzeit T Heure actuelle lv_time = sy-uzeit
sy-uname CHAR12 Nom utilisateur lv_user = sy-uname
sy-langu LANG Langue connexion lv_lang = sy-langu
sy-mandt CLNT Mandant lv_client = sy-mandt
sy-subrc I Code retour Après SELECT, CALL, etc.

Programme Principal
#

REPORT ZADA_PROG_UNIT_03.

INCLUDE ZADA_PROG_UNIT_03_TOP.  " Variable globale gv_birthdate
INCLUDE ZADA_PROG_UNIT_03_SCR.  " Écran (vide)
INCLUDE ZADA_PROG_UNIT_03_F01.  " 24 FORM routines

START-OF-SELECTION.
  " VARIABLES
  PERFORM variable_declaration_simple.
  PERFORM variable_declaration_succes.
  PERFORM variable_convention_nommage.
  PERFORM variable_type_vs_like.

  " CONSTANTES
  PERFORM constant_declaration_simple.
  PERFORM constant_declaration_succes.

  " EXERCICES
  PERFORM exercice_carte_identite.
  PERFORM exercice_fieldsymbols.

  " TYPES
  PERFORM type_c.
  PERFORM type_numeric.
  PERFORM type_date.
  PERFORM type_heure.
  PERFORM type_float.
  PERFORM type_decfloat.
  PERFORM type_packed_decimal.
  PERFORM type_boolean.
  PERFORM type_xfeld.

  " FIELD-SYMBOLS
  PERFORM type_fieldsymbols.
  PERFORM fieldsymbols_succes.

Résumé des Concepts Clés
#

Variables
#

  • Déclaration avec DATA
  • Utiliser les préfixes (lv_, gv_)
  • Choisir le type approprié

Constantes
#

  • Déclaration avec CONSTANTS
  • VALUE obligatoire
  • Pour valeurs immuables

Types
#

  • Texte : string ou c
  • Nombres : i, p, f, decfloat
  • Date/Heure : d, t
  • Logique : boolean, xfeld

Field-Symbols
#

  • Pointeurs ABAP
  • ASSIGN...TO pour lier
  • Vérifier avec IS ASSIGNED
  • Modifie l’original

Conclusion
#

Ce programme constitue une référence complète sur les fondamentaux d’ABAP :

  • Tous les types de données courants
  • Conventions de nommage professionnelles
  • Field-Symbols et pointeurs
  • Exercices pratiques
  • Bonnes pratiques et erreurs à éviter

Il sert de guide de référence pour tout développeur ABAP débutant ou intermédiaire souhaitant maîtriser les bases de la déclaration et manipulation de données en ABAP.

Ressources
#

Télécharger les fichiers

Articles connexes

Variables & Déclarations en ABAP
··11 mins· loading · loading
SAP ERP Back-End
Démonstration de la structure modulaire d'un programme ABAP
·5 mins· loading · loading
SAP ERP Back-End
Documentation du premier programme ABAP avec erreur
·3 mins· loading · loading
SAP ERP Back-End
Les instructions DBTAB en ABAP
·29 mins· loading · loading
SAP ERP Back-End
Ecran de sélection et rapport en ABAP
··10 mins· loading · loading
SAP ERP Back-End
Transaction SE11 sur SAP
··32 mins· loading · loading
SAP ERP Back-End