SAP Table interne ABAP : créer, lire, remplir, copier et supprimer

⚡ Résumé intelligent

SAP Les objets Table interne ABAP stockent des données issues d'une structure fixe pour une utilisation dynamique au sein d'un programme. Cette page explique les zones de travail, les lignes d'en-tête, les quatre méthodes de création et les instructions permettant de remplir, copier, lire et supprimer des lignes de table.

  • 📋 Définition principale : Une table interne stocke des lignes de structure identique en mémoire principale, le plus souvent pour formater des données lues à partir d'une table de base de données.
  • 🧾 Rôle dans la zone de travail : Une zone de travail correspond à une seule ligne ayant le même format que le tableau, et elle traite le tableau ligne par ligne.
  • 🏷️ Ligne d'en-tête : Un tableau comportant une ligne d'en-tête reçoit une zone de travail implicite, ce qui permet d'insérer ou de lire directement des lignes sans avoir à la nommer.
  • Quatre méthodes de création : instruction TYPES, référence à une table existante, référence à une structure existante ou à une nouvelle structure déclarée avec OCCURS.
  • Peupler: APPEND ajoute une ligne, COLLECT regroupe les champs numériques pour une clé en double et INSERT place une ligne à un index choisi.
  • 🔍 Lire et copier : LOOP AT lit chaque ligne, READ TABLE lit une ligne par index, et MOVE ou le signe égal copie une table entière.
  • 🇧🇷 Effacer: La commande DELETE à l'intérieur d'une boucle supprime la ligne courante, et la commande DELETE … INDEX supprime la ligne à une position connue.

SAP Tables internes ABAP

Qu'est-ce qu'une table interne ?

TABLEAU INTERNE sont utilisés pour obtenir des données à partir d’une structure fixe pour une utilisation dynamique dans ABAP. Chaque ligne de la table interne a la même structure de champs. L'utilisation principale des tables internes est le stockage et le formatage des données d'une table de base de données au sein d'un programme.

Une table intérieure fonctionne toujours de concert avec un espace de travail, c'est donc ce concept que nous allons aborder ensuite.

Qu'est-ce qu'une zone de travail ?

Les zones de travail correspondent à des lignes de données individuelles. Elles doivent avoir le même format que les tables internes. Elles servent à traiter les données d'une table interne ligne par ligne.

Quelle est la différence entre une table interne et une zone de travail ?

Une image dit mille mots

Différence entre une table interne et une zone de travail

Le schéma illustre une table contenant de nombreuses lignes, tandis que la zone de travail ne contient que la ligne en cours de traitement. Selon le type de table décrit ci-dessous, cette zone de travail peut être créée par le système ou par le développeur.

Types de tables internes

Il existe deux types de tables internes.

  1. Tableaux internes avec ligne HEADER
  2. Tableaux internes sans ligne HEADER.

Tableaux internes avec ligne d'en-tête

  • Ici, le système crée automatiquement la zone de travail.
  • La zone de travail a le même type de données que la table interne.
  • Cette zone de travail est appelée la ligne HEADER.
  • C'est ici que s'effectuent tous les changements ou toute action sur le contenu du tableau. En conséquence, les enregistrements peuvent être directement insérés dans la table ou accessibles directement à partir de la table interne.

Tableaux internes sans ligne d'en-tête :

  • Ici, il n'y a pas de zone de travail associée à la table.
  • La zone de travail doit être explicitement spécifiée lorsque nous devons accéder à ces tables.
  • Ces tableaux ne sont donc pas accessibles directement.

Astuce : Une table comportant une ligne d'en-tête porte le même nom que sa zone de travail, ce qui rend le code ambigu. Les nouveaux programmes doivent déclarer une table sans ligne d'en-tête et spécifier explicitement sa zone de travail.

Tables internes standard, triées et hachées

Outre la distinction de l'en-tête, chaque table interne possède également un type qui détermine la manière dont une ligne est recherchée. Ce type est choisi à l'aide des options TYPE STANDARD TABLE, TYPE SORTED TABLE ou TYPE HASHED TABLE, et il influe directement sur les performances d'exécution.

Type de table Méthode d'accès ACTIVITES Meilleur utilisé pour
Standard Index et clé, avec une recherche linéaire sur la clé Non unique Traitement séquentiel et petites tables lues avec un index
Trié Index et clé, avec une recherche binaire sur la clé Unique ou non unique, tri automatique Les tables plus grandes parcourent à plusieurs reprises les principaux champs clés
Haché Clé uniquement, avec un algorithme de hachage Unique Tables très volumineuses qui sont toujours lues avec la clé complète, comme un tampon d'enregistrements de base de données

Une table standard est la valeur par défaut et convient au traitement séquentiel. Une table hachée maintient un temps d'accès constant quel que soit le nombre de lignes stockées, ce qui explique les règles de performance de Open SQL Je le recommande pour la mise en mémoire tampon des enregistrements.

Création de tables internes

Il existe de nombreuses façons de créer une table interne. Regardons-les un par un-

1.En utilisant l'instruction Type

Créons maintenant une table interne itab en utilisant l'instruction TYPE.

La syntaxe est -

Types : begin of line,

column1 type I,

column2 type I,

end of line.

Exemple :

TYPES : begin of line,

empno		type I,

empname(20)   	type c	,

end of line.

L'instruction TYPES crée une ligne de structure telle que définie.

Pour créer réellement une table interne, utilisez la commande suivante :

Data itab type line occurs 10.

Une table interne itab est créée avec la structure de line. En plus de déclarer la structure d'une table interne, la clause OCCURS définit également le nombre d'entrées de table conservées dans le stockage principal (dans ce cas, 10). Des enregistrements supplémentaires sont écrits dans la zone de pagination et peuvent affecter les performances

2.En faisant référence à un autre tableau

Vous pouvez créer une table interne en faisant référence à une table existante. Cette table existante peut être une table standard. SAP table, une table Z ou une autre table interne.

Syntaxe-

Data <f> <type> [with header line].

Exemple-

DATA itab TYPE line OCCURS 10 with header line.

Ici, une table interne itab est créée du type line avec une ligne d'en-tête. Veuillez noter que « avec ligne d'en-tête » est facultatif.

3.En faisant référence à la structure existante

Syntaxe-

Data	<f> LIKE <struct> occurs n [with header line].

Exemple-

DATA itab LIKE sline OCCURS 10.

Ici, une table itab est créée avec une structure identique à celle de sline.

4.En créant une nouvelle structure

Créons maintenant une table interne avec notre propre structure. Ici le tableau est créé avec une ligne d'en-tête, par défaut.

Syntaxe -

Data : Begin of <f> occurs <n>,

<component declaration>,

................................,

End of <f>.

Exemple -

Data : Begin of itab occurs 10,

column1       type I,

column2(4)  type C,

column3      like  mara-ernam,

End of itab.

La table interne itab est créée

Un tableau vide est peu utile, la section suivante le remplit donc de lignes.

Remplir les tables internes

Maintenant que nous avons réussi à créer des tables internes, voyons comment les remplir avec certains enregistrements. Il existe différentes méthodes disponibles pour remplir les tableaux

1.Ajouter les données ligne par ligne

La première méthode disponible est l'utilisation de l'instruction APPEND.

En utilisant l'instruction APPEND, nous pouvons soit ajouter une ligne d'une autre zone de travail à la table interne, soit ajouter une ligne initiale à la table interne.

Syntaxe -

APPEND [<wa> TO / INITIAL LINE TO] <itable>.

Ici zone de travail ou la ligne initiale est ajoutée à la table interne .

La variable système SY-TABIX contient l'index de la ligne ajoutée.

Exemple :

Data: Begin of itab occurs 10,

col1 type C,

col2 type I,

end of itab.

Append initial line to itab.

Résultats : ' ' '0'

L'instruction `initial lines` ajoute une ligne au tableau, initialisée avec la valeur appropriée à son type. Ici, `col1` est un caractère et `col2` un entier. L'instruction `append initial line` ajoute ensuite une ligne initialisée en fonction du type de données des colonnes : un espace pour `col1` et 0 pour `col2`.

2.Utilisation de l'instruction COLLECT

COLLECT est une autre forme d'instruction utilisée pour remplir les tables internes. Généralement, COLLECT est utilisé lors de l'insertion de lignes dans une table interne avec une clé standard unique.

Syntaxe-

COLLECT [<wa> INTO] <itable>.

Dans le cas de tableaux avec une ligne d'en-tête, l'option INTO est omise. Supposons qu'il existe déjà une entrée ayant une clé identique à celle que vous essayez d'ajouter, alors aucune nouvelle ligne n'est ajoutée au tableau, mais les champs numériques des deux entrées sont ajoutés et une seule entrée correspondant à la clé est présente . La valeur de SY-TABIX est remplacée par la ligne de l'entrée d'origine. Sinon, COLLECT agit de manière similaire à APPEND et SY-TABIX contient l'index de la ligne traitée.

3. Utilisation de l'instruction INSERT

L'instruction INSERT ajoute une ligne/zone de travail à la table interne. Vous pouvez spécifier la position à laquelle la nouvelle ligne doit être ajoutée en utilisant la clause INDEX avec l'instruction INSERT.

Syntaxe

INSERT [<wa> INTO / INITIAL LINE INTO] <itable> [index <idx>].

Ici, la zone de travail ou INITIALE LINE est inséré dans une table interne à l'index .

Copie de tables internes

Le contenu d'une table interne peut être copié dans une autre à l'aide de la fonction APPEND. LINES ou INSÉRER LINEInstruction S. Une méthode plus simple consiste à utiliser l'une des syntaxes suivantes.

MOVE  <itab1> To <itab2>.

OR

<itab1> = <itab2>.

Ceux-ci copient le contenu de ITAB1 vers ITAB2. Dans le cas de tableaux internes avec ligne d'en-tête, nous devons utiliser [] afin de les distinguer de la zone de travail. Ainsi, pour copier le contenu des tables internes avec la ligne d'en-tête, la syntaxe devient :

itab1[] = itab2[].

Lire les tables internes

Nous savons maintenant créer des tables internes et les remplir de données. Nous allons maintenant voir comment utiliser ou extraire concrètement les données de ces tables.

1. Utilisation de Loop-Endloop

L'un des moyens d'accéder ou de lire la table interne consiste à utiliser LOOP-ENDLOOP.

Syntaxe

LOOP AT <itable> [INTO <wa>]

...................................

ENDLOOP.

Ici, quand vous dites LOOP AT ITABLE, alors la table interne ITABLE est lue ligne par ligne. Vous pouvez accéder aux valeurs des colonnes de cette ligne à n'importe quelle partie de la structure LOOP-ENDLOOP. La valeur de SY-SUBRC est définie sur 0, même si un seul enregistrement est lu.

2. Utilisation de LIRE

L'autre méthode de lecture de la table interne consiste à utiliser l'instruction READ.

Syntaxe-

READ TABLE <itable> [INTO <wa>] INDEX <idx>.

Cette instruction lit la ligne courante ou la ligne spécifiée par l'index. La valeur de SY-TABIX correspond à l'index de la ligne lue. Si une entrée correspondant à cet index est trouvée, SY-SUBRC est initialisé à 0. Si l'index est inférieur à 0, une erreur d'exécution se produit. Si l'index dépasse la taille de la table, SY-SUBRC est initialisé à 4.

⚠️ Attention : L'instruction READ TABLE … INDEX 0 génère une erreur d'exécution ; il convient donc de vérifier l'index calculé lors de l'exécution avant d'exécuter l'instruction.

Suppression de tables internes

Il existe de nombreuses façons de supprimer des lignes d'une table interne.

1.Supprimer des lignes dans une boucle.

C'est le moyen le plus simple de supprimer des lignes.

Syntaxe

DELETE <ITABLE>.

Cette instruction ne fonctionne que dans une boucle. Il supprime la ligne actuelle. Vous pouvez supprimer les lignes d'une boucle de manière conditionnelle en ajoutant le clause O.

2.Suppression de lignes à l'aide de l'index.

Ceci est utilisé pour supprimer une ligne de la table interne à n’importe quel index connu.

Syntaxe

DELETE <ITABLE> INDEX <IDX>.

La ligne avec l'index est supprimé. L'index de la ligne suivante est décrémenté de 1.

3. Suppression des lignes en double.

Les lignes en double sont supprimées une fois le tableau trié selon les champs clés.

SORT itab BY col1.

DELETE ADJACENT DUPLICATES FROM itab COMPARING col1.

Seules les lignes adjacentes sont comparées, c'est pourquoi l'instruction SORT doit être exécutée en premier. Pour vider complètement la table, utilisez CLEAR itab[] ou REFRESH itab.

FAQ

CLEAR itab vide uniquement l'en-tête, et CLEAR itab[] vide le corps. REFRESH vide toujours le corps mais conserve la mémoire réservée. FREE vide le corps et libère également la mémoire.

SY-TABIX contient le numéro de ligne de la table interne en cours de traitement. SY-INDEX contient le numéro d'itération d'une boucle DO ou WHILE. Une table hachée laisse SY-TABIX à zéro, puisqu'elle ne possède pas d'index.

L'instruction LOOP AT itab ASSIGNING a field symbol évite de copier chaque ligne dans une zone de travail, ce qui permet une exécution plus rapide sur les grandes tables et autorise la modification de la ligne sur place sans instruction MODIFY.

Oui. Les assistants IA des outils de développement ABAP réécrivent les déclarations OCCURS et de ligne d'en-tête en TYPE STANDARD TABLE OF avec une zone de travail explicite, et ils signalent les instructions qui échouent une fois la ligne d'en-tête disparue.

Les conseillers en performance IA analysent la manière dont une table est remplie et lue, puis recommandent une table triée ou hachée lorsqu'une recherche linéaire domine le temps d'exécution. La recommandation est confirmée par un trace dans la transaction SAT.

Résumez cet article avec :