SAP Table interne ABAP : créer, lire, remplir, copier et supprimer
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.
Qu'est-ce qu'un espace de travail ?
Les zones de travail sont des lignes uniques de données. Ils doivent avoir le même format que n’importe lequel des tableaux internes. Il permet de traiter les données d'une table interne une ligne à la fois.
Différence entre une table interne et une zone de travail ?
Une image dit mille mots
Types de tables internes
Il existe deux types de tables internes.
- Tableaux internes avec ligne HEADER
- 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.
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 le Instruction TYPE.
La syntaxe est -
Types : begin of line, column1 type I, column2 type I, end of line.
Mise en situation :
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. La table existante pourrait être un 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 ayant 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
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.
Mise en situation :
Data: Begin of itab occurs 10, col1 type C, col2 type I, end of itab. Append initial line to itab.
Résultats : ' ' '0'
Lignes initiales ajoute au tableau une ligne initialisée avec la valeur correcte pour son type. Ici, col1 est un caractère et col2 est un entier. Puis APPEND ligne initiale, ajoute une ligne initialisée par rapport au type de données des colonnes, c'est à dire 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 INITIAL LINE est inséré dans la table interne à l'index .
Copie de tables internes
Le contenu d'une table interne peut être copié dans une autre à l'aide de l'instruction APPEND LINES ou INSERT LINES. Une manière 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 sommes désormais familiarisés avec la création de tableaux internes et leur remplissage avec des données. Nous allons maintenant voir comment utiliser réellement les données ou récupérer les données des tables internes.
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 actuelle ou la ligne telle que spécifiée par index . La valeur de SY-TABIX est l'index de la ligne lue. Si une entrée avec l'index spécifié est trouvée, alors SY-SUBRC est défini sur 0. Si l'index spécifié est inférieur à 0, une erreur d'exécution se produit. Si l'index spécifié dépasse la taille de la table, alors SY-SUBRC est défini sur 4.
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.