Section courante

A propos

Section administrative du site

Les types de données

Le système de types ABAP est un élément fondamental du langage déterminant comment les données sont entreposées, manipulées et converties. Une bonne compréhension des types de données est essentielle pour développer des applications ABAP efficaces et éviter les erreurs de conversion ou de perte de précision.

ABAP distingue deux grandes catégories de types de données :

Le typage en ABAP est statique : le type d'une variable est défini à la compilation et ne peut pas changer pendant l'exécution. Cependant, ABAP effectue automatiquement des conversions implicites entre types compatibles, ce qui peut parfois entraîner des résultats inattendus si le programmeur n'est pas vigilant.

Vue d'ensemble des types élémentaires

Voici un tableau récapitulatif des principaux types élémentaires ABAP :

Type Description Taille Valeur initiale
I Entier 32 bits signe 4 octets 0
INT8 Entier 64 bits signe 8 octets 0
F Nombre a virgule flottante 8 octets 0.0
DECFLOAT16 Décimal flottant 16 chiffres 8 octets 0.0
DECFLOAT34 Décimal flottant 34 chiffres 16 octets 0.0
C Chaîne de caractères fixe n octets espaces
N Chaîne numérique n octets '0...0'
D Date (AAAAMMJJ) 8 octets '00000000'
T Heure (HHMMSS) 6 octets '000000'
P Décimal compacte (BCD) 1-16 octets 0
STRING Chaîne longueur variable variable '' (vide)
XSTRING Chaîne binaire variable variable '' (vide)
X Chaîne hexadécimale fixe n octets '00...00'

Chaque type possède des caractéristiques spécifiques le rendant adapté à certains usages. Le choix du type approprié est crucial pour la performance et l'intégrité des données dans les applications SAP.

Type I - Entiers

Le type I représente un entier signe sur 32 bits. C'est le type numérique le plus couramment utilise pour les compteurs, les indices de boucles et les calculs avec des nombres entiers.

Caractéristiques :

Le type I est adapte pour :

Exemples de déclarations :

  1.     DATA gv_compteur TYPE I.
  2.     DATA gv_index TYPE I VALUE 1.
  3.     DATA gv_quantite TYPE I VALUE 100.

Attention : les dépassements de capacité (overflow) ne sont pas détectés automatiquement en ABAP standard. Un calcul dépassant les limites du type I peut produire des résultats incorrects sans lever d'exception.

Depuis ABAP 7.40, le type INT8 (entier 64 bits) est disponible pour les besoins de très grands nombres entiers, avec un intervalle allant de -9 223 372 036 854 775 808 a 9 223 372 036 854 775 807.

Type F - Nombres a virgule flottante

Le type F représente un nombre à virgule flottante en double précision selon la norme IEEE 754. Il est utilise pour les calculs scientifiques ou les situations nécessitant une grande intervalle de valeurs.

Caractéristiques :

Le type F est adapte pour :

Exemples de déclarations :

  1.     DATA gv_pi TYPE F VALUE '3.14159265358979'.
  2.     DATA gv_vitesse_lumiere TYPE F VALUE '2.998E8'.
  3.     DATA gv_masse TYPE F.

Attention importante : le type F utilise une représentation binaire ne pouvant pas représenter exactement certains nombres décimaux. Par exemple, 0.1 en base 10 ne peut pas être représenté exactement en virgule flottante binaire. Pour les calculs financiers ou les montants monétaires, il faut absolument utiliser le type P (décimal compacte) garantissant une précision décimale exacte.

  1.     " Exemple de perte de precision avec F
  2.     DATA: gv_f TYPE F,
  3.           gv_p TYPE P DECIMALS 2.
  4.     gv_f = '0.1'.
  5.     gv_p = '0.1'.
  6.     " gv_f peut contenir 0.09999999999... au lieu de 0.1 exactement
  7.     " gv_p contient exactement 0.10

Types DECFLOAT16 et DECFLOAT34 - Décimaux flottants

Introduits dans les versions récentes d'ABAP, les types DECFLOAT16 et DECFLOAT34 offrent une représentation décimale flottante selon la norme IEEE 754-2008. Contrairement au type F (binaire flottant), ces types représentent exactement les nombres décimaux.

Caractéristiques de DECFLOAT16 :

Caractéristiques de DECFLOAT34 :

Ces types sont particulièrement adaptés pour :

Exemple :

  1.     DATA gv_montant_precise TYPE DECFLOAT34.
  2.     gv_montant_precise = '123456789012345678901234.5678901234'.

Type C - Chaînes de caractères à longueur fixe

Le type C représente une chaîne de caractères à longueur fixe. C'est l'un des types les plus utilises en ABAP, notamment pour les champs de base de données et les zones d'écran.

Caractéristiques :

Le type C est adapte pour :

Syntaxes de déclaration :

  1.     " Syntaxe standard avec LENGTH
  2.     DATA gv_nom TYPE C LENGTH 30.
  3.     DATA gv_code TYPE C LENGTH 10.
  4.  
  5.     " Syntaxe courte avec parentheses
  6.     DATA gv_nom(30) TYPE C.
  7.     DATA gv_code(10).           " TYPE C est implicite
  8.  
  9.     " Avec valeur initiale
  10.     DATA gv_pays TYPE C LENGTH 3 VALUE 'FRA'.

Comportement important : les comparaisons de chaînes de type C ignorent les espaces de fin (trailing spaces). Ainsi, 'ABC' et 'ABC ' sont considérés comme égaux lors d'une comparaison.

Le type C ne gère pas les caractères Unicode multi-octets de manière native. Pour les applications Unicode, le nombre de caractères peut différer du nombre d'octets utilises.

Type N - Chaînes numériques

Le type N représente une chaîne de caractères contenant uniquement des chiffres (0-9). Il est utilise pour les codes numériques devant conserver les zéros en tête, comme les numéros de document, les codes postaux ou les numéros de compte.

Caractéristiques :

Le type N est adapte pour :

Exemples de déclarations :

  1.     DATA gv_numero_doc TYPE N LENGTH 10.
  2.     DATA gv_code_postal TYPE N LENGTH 5 VALUE '75001'.
  3.     DATA gv_matricule(8) TYPE N.

Comportement spécifique : lors d'une affectation numérique a un champ de type N, la valeur est automatiquement convertie en chaîne et complétée par des zéros a gauche.

  1.     DATA gv_doc TYPE N LENGTH 10.
  2.     gv_doc = 123.
  3.     " gv_doc contient '0000000123'

Le type N peut être utilise dans des opérations arithmétiques, mais il est converti implicitement en entier pour le calcul, puis le résultat est reconverti en chaîne numérique.

Type D - Dates

Le type D représente une date au format AAAAMMJJ (année sur 4 chiffres, mois sur 2 chiffres, jour sur 2 chiffres). C'est le type standard pour manipuler les dates dans les applications SAP.

Caractéristiques :

Le type D est adapte pour :

Exemples de déclarations :

  1.     DATA gv_date_jour TYPE D.
  2.     DATA gv_date_debut TYPE D VALUE '20240101'.
  3.     DATA gv_date_fin TYPE D.
  4.  
  5.     " Initialisation avec la date systeme
  6.     gv_date_jour = sy-datum.

Calculs sur les dates : ABAP permet d'effectuer des opérations arithmétiques sur les dates. L'addition ou la soustraction de nombres entiers ajoute ou retire des jours.

  1.     DATA: gv_date TYPE D,
  2.           gv_jours_delta TYPE I.
  3.     gv_date = sy-datum.
  4.     gv_date = gv_date + 30.      " Date dans 30 jours
  5.     gv_jours_delta = gv_date_fin - gv_date_debut.  " Nombre de jours

La variable système sy-datum contient toujours la date du jour au format D. D'autres variables système liées aux dates incluent :

Type T - Heures

Le type T représente une heure au format HHMMSS (heures sur 2 chiffres, minutes sur 2 chiffres, secondes sur 2 chiffres). Il complément le type D pour la gestion complète des horodatages.

Caractéristiques :

Le type T est adapte pour :

Exemples de déclarations :

  1.     DATA gv_heure TYPE T.
  2.     DATA gv_heure_debut TYPE T VALUE '080000'.
  3.     DATA gv_heure_fin TYPE T.
  4.  
  5.     " Initialisation avec l'heure systeme
  6.     gv_heure = sy-uzeit.

Calculs sur les heures : comme pour les dates, on peut effectuer des opérations arithmétiques sur les heures. L'addition ou soustraction de nombres entiers ajoute ou retire des secondes.

  1.     DATA: gv_heure TYPE T,
  2.           gv_secondes TYPE I.
  3.     gv_heure = sy-uzeit.
  4.     gv_heure = gv_heure + 3600.   " Heure + 1 heure (3600 secondes)
  5.     gv_secondes = gv_heure_fin - gv_heure_debut.  " Duree en secondes

La variable système sy-uzeit contient toujours l'heure courante au format T. La variable sy-timlo contient l'heure locale du système.

Type P - Nombres décimaux compactes (BCD)

Le type P représente un nombre décimal a précision fixe en format BCD (Binary Coded Decimal). C'est le type recommande pour tous les calculs financiers et monétaires car il garantit une précision décimale exacte, sans erreur d'arrondi.

Caractéristiques :

Le type P est adapte pour :

Syntaxe de déclaration :

DATA variable TYPE P [LENGTH longueur] DECIMALS nb_decimales.

Exemples :

  1.     DATA gv_montant TYPE P DECIMALS 2.
  2.     DATA gv_prix TYPE P LENGTH 8 DECIMALS 2.
  3.     DATA gv_quantite TYPE P DECIMALS 3 VALUE '123.456'.
  4.     DATA gv_pourcentage TYPE P LENGTH 4 DECIMALS 2.

Relation entre longueur et nombre de chiffres :

La précision décimale est garantie dans les limites de la longueur déclarée. Les calculs internes utilisent une précision intermédiaire plus élevée pour éviter les pertes de précision.

  1.     " Comparaison F vs P pour calcul financier
  2.     DATA: gv_f TYPE F,
  3.           gv_p TYPE P DECIMALS 2.
  4.     gv_f = '0.1' * 3.
  5.     gv_p = '0.1' * 3.
  6.     " gv_p = 0.30 exactement
  7.     " gv_f peut contenir 0.30000000000000004...

Types STRING et XSTRING - Chaînes a longueur variable

Les types STRING et XSTRING représentent des chaînes de caractères et des données binaires a longueur variable. Contrairement aux types C et X a longueur fixe, ces types ajustent dynamiquement leur taille en fonction du contenu.

Type STRING :

Le type STRING est adapte pour :

Type XSTRING :

Le type XSTRING est adapte pour :

Exemples de déclarations :

  1.     DATA gv_texte TYPE STRING.
  2.     DATA gv_message TYPE STRING VALUE 'Bonjour le monde'.
  3.     DATA gv_fichier TYPE XSTRING.

Manipulation de STRING :

  1.     DATA: gv_str1 TYPE STRING VALUE 'Hello',
  2.           gv_str2 TYPE STRING VALUE 'World',
  3.           gv_result TYPE STRING.
  4.  
  5.     " Concatenation avec &&
  6.     gv_result = gv_str1 && ' ' && gv_str2.  " 'Hello World'
  7.  
  8.     " Longueur avec strlen()
  9.     DATA lv_len TYPE I.
  10.     lv_len = strlen( gv_result ).            " 11
  11.  
  12.     " Recherche avec find()
  13.     DATA lv_pos TYPE I.
  14.     lv_pos = find( val = gv_result sub = 'World' ).  " 6

Contrairement au type C, le type STRING ne contient pas d'espaces de remplissage (padding). La longueur correspond exactement au contenu réel de la chaîne.

Type X - Chaînes hexadécimales a longueur fixe

Le type X représente une chaîne de données binaires (hexadécimales) à longueur fixe. Chaque octet est représenté par deux caractères hexadécimaux (0-9, A-F).

Caractéristiques :

Le type X est adapte pour :

Exemples :

  1.     DATA gv_octet TYPE X LENGTH 1.
  2.     DATA gv_buffer TYPE X LENGTH 256.
  3.     DATA gv_header TYPE X LENGTH 4 VALUE 'DEADBEEF'.

Les opérations bit-a-bit peuvent être effectuées sur les types X :

  1.     DATA: gv_a TYPE X LENGTH 1 VALUE 'F0',
  2.           gv_b TYPE X LENGTH 1 VALUE '0F',
  3.           gv_result TYPE X LENGTH 1.
  4.  
  5.     " Les operations bit-a-bit necessitent des fonctions specifiques
  6.     " ou des traitements octet par octet

Conversions entre types

ABAP effectue automatiquement des conversions implicites entre types compatibles lors des affectations. Cependant, certaines conversions peuvent entraîner des pertes de données ou de précision.

Règles de conversion principales :

De Vers Comportement
I C/N Conversion en chaîne numérique
C/N I Extraction de la valeur numérique
I P Conversion exacte (si capacité suffisante)
P I Troncature des décimales
F P Arrondi aux décimales de P
P F Conversion (possible perte de précision)
D C Copie directe de la représentation AAAAMMJJ
C D Interprétation comme date (doit être valide)
T C Copie directe de la représentation HHMMSS
C T Interprétation comme heure (doit être valide)

Exemples de conversions :

  1.     DATA: gv_i TYPE I,
  2.           gv_c TYPE C LENGTH 10,
  3.           gv_n TYPE N LENGTH 10,
  4.           gv_p TYPE P DECIMALS 2,
  5.           gv_f TYPE F.
  6.  
  7.     " Entier vers chaine
  8.     gv_i = 42.
  9.     gv_c = gv_i.           " gv_c = ' 42'
  10.     gv_n = gv_i.           " gv_n = '0000000042'
  11.  
  12.     " Chaine vers entier
  13.     gv_c = '123'.
  14.     gv_i = gv_c.           " gv_i = 123
  15.  
  16.     " Decimal vers entier (troncature)
  17.     gv_p = '3.75'.
  18.     gv_i = gv_p.           " gv_i = 3 (pas d'arrondi)
  19.  
  20.     " Flottant vers decimal (arrondi)
  21.     gv_f = '3.456789'.
  22.     gv_p = gv_f.           " gv_p = 3.46 (arrondi a 2 decimales)

Pour les conversions explicites et un meilleur contrôle, utiliser l'opérateur CONV introduit dans ABAP 7.40 :

  1.     DATA(lv_string) = CONV string( gv_i ).
  2.     DATA(lv_int) = CONV i( '123' ).

Types de référence et types complexes

Au-delà des types élémentaires, ABAP supporte des types plus complexes pour structurer les données :

Types structures :

Tables internes :

Types référence :

Les types référence pointent vers des objets ou des données entreposés ailleurs en mémoire. Ils incluent :

Bonnes pratiques pour le choix des types

Le choix du type de données approprié est crucial pour la performance, la précision et la maintenabilité du code ABAP :

Pour les nombres entiers :

Pour les nombres décimaux :

Pour les chaînes de caractères :

Pour les dates et heures :

Pour les données binaires :



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