SAP ABAP - Remplissage des tables internes

Dans les tableaux internes, le remplissage inclut des fonctionnalités telles que la sélection, l'insertion et l'ajout. Ce chapitre se concentre sur les instructions INSERT et APPEND.

Instruction INSERT

L'instruction INSERT est utilisée pour insérer une seule ligne ou un groupe de lignes dans une table interne.

Voici la syntaxe pour ajouter une seule ligne à une table interne -

INSERT <work_area_itab> INTO <internal_tab> INDEX <index_num>.

Dans cette syntaxe, l'instruction INSERT insère une nouvelle ligne dans la table interne internal_tab. Une nouvelle ligne peut être insérée à l'aide de l'expression work_area_itab INTO avant le paramètre internal_tab. Lorsque l'expression work_area_itab INTO est utilisée, la nouvelle ligne est extraite de la zone de travail work_area_itab et insérée dans la table internal_tab. Cependant, lorsque l'expression work_area_itab INTO n'est pas utilisée pour insérer une ligne, la ligne est extraite de la ligne d'en-tête de la table internal_tab.

Lorsqu'une nouvelle ligne est insérée dans une table interne à l'aide de la clause INDEX, le numéro d'index des lignes après la ligne insérée est incrémenté de 1. Si une table interne contient <index_num> - 1 lignes, la nouvelle ligne est ajoutée à la fin de la table. Lorsque le système SAP ajoute avec succès une ligne à une table interne, la variable SY-SUBRC est définie sur 0.

Exemple

Voici un exemple de programme qui utilise l'instruction d'insertion.

REPORT  ZCUSLIST1. 
DATA: BEGIN OF itable1 OCCURS 4,
      F1 LIKE SY-INDEX,
      END OF itable1.
	
   DO 4 TIMES.
      itable1-F1 = sy-index.
      APPEND itable1.
   ENDDO.
	
itable1-F1 = -96.  
INSERT itable1 INDEX 2.  

LOOP AT itable1.
   Write / itable1-F1.  
ENDLOOP.  

LOOP AT itable1 Where F1 ≥ 3.
   itable1-F1 = -78.
   INSERT itable1.
ENDLOOP.

Skip.
LOOP AT itable1.
   Write / itable1-F1.
ENDLOOP.

Le code ci-dessus produit l'outp suivant -

1 
96- 
		2 
		3 
 4  
		1 
96- 
		2 
78- 
 3 
78- 
 4

Dans l'exemple ci-dessus, la boucle DO y ajoute 4 lignes contenant les nombres 1 à 4. Le composant de ligne d'en-tête itable1-F1 a reçu une valeur de -96. L'instruction Insert insère la ligne d'en-tête en tant que nouvelle ligne dans le corps avant la ligne 3. La ligne 3 existante devient la ligne 4 après l'insertion. L'instruction LOOP AT récupère les lignes de la table interne qui ont une valeur F1 supérieure ou égale à 3. Avant chaque ligne, l'instruction Insert insère une nouvelle ligne à partir de la ligne d'en-tête de celui-ci. Avant l'insertion, le composant F1 a été modifié pour contenir -78.

Après l'exécution de chaque instruction d'insertion, le système réindexe toutes les lignes sous celle insérée. Cela introduit une surcharge lorsque vous insérez des lignes près du haut d'une grande table interne. Si vous devez insérer un bloc de lignes dans un grand tableau interne, préparez un autre tableau avec les lignes à insérer et utilisez plutôt des lignes d'insertion.

Lors de l'insertion d'une nouvelle ligne à l'intérieur de itable1 à l'intérieur d'une boucle à itable1, cela n'affecte pas instantanément la table interne. Il devient en fait efficace au prochain passage de boucle. Lors de l'insertion d'une ligne après la ligne actuelle, la table est réindexée à ENDLOOP. Le sy-tabix est incrémenté et la boucle suivante traite la ligne pointée par sy-tabix. Par exemple, si vous êtes dans la deuxième passe de boucle et que vous insérez un enregistrement avant la ligne 3. Lorsque endloop est exécuté, la nouvelle ligne devient la ligne 3 et l'ancienne ligne 3 devient la ligne 4 et ainsi de suite. Sy-tabix est incrémenté de 1 et la passe de boucle suivante traite l'enregistrement nouvellement inséré.

Déclaration APPEND

L'instruction APPEND est utilisée pour ajouter une seule ligne ou ligne à une table interne existante. Cette instruction copie une seule ligne d'une zone de travail et l'insère après la dernière ligne existante dans une table interne. La zone de travail peut être une ligne d'en-tête ou toute autre chaîne de champ ayant la même structure qu'une ligne d'une table interne. Voici la syntaxe de l'instruction APPEND qui est utilisée pour ajouter une seule ligne dans une table interne -

APPEND <record_for_itab> TO <internal_tab>.

Dans cette syntaxe, l'expression <record_for_itab> peut être représentée par la zone de travail <work_area_itab>, qui est convertible en type de ligne ou par la clause INITIAL LINE. Si l'utilisateur utilise une zone de travail <work_area_itab>, le système SAP ajoute une nouvelle ligne à la table interne <internal_tab> et la remplit avec le contenu de la zone de travail. La clause INITIAL LINE ajoute une ligne vide qui contient la valeur initiale de chaque champ de la structure de table. Après chaque instruction APPEND, la variable SY-TABIX contient le numéro d'index de la ligne ajoutée.

L'ajout de lignes aux tables standard et triées avec une clé non unique fonctionne indépendamment du fait que les lignes avec la même clé existent déjà dans la table. En d'autres termes, des entrées en double peuvent se produire. Toutefois, une erreur d'exécution se produit si l'utilisateur tente d'ajouter une entrée en double à une table triée avec une clé unique ou si l'utilisateur enfreint l'ordre de tri d'une table triée en y ajoutant les lignes.

Exemple

REPORT  ZCUSLIST1. 
DATA: BEGIN OF linv Occurs 0,
      Name(20) TYPE C,
      ID_Number TYPE I,
END OF linv. 

DATA table1 LIKE TABLE OF linv. 
linv-Name = 'Melissa'. 
linv-ID_Number = 105467. 
APPEND linv TO table1. 
LOOP AT table1 INTO linv. 

Write: / linv-name, linv-ID_Number. 
ENDLOOP.

Le code ci-dessus produit la sortie suivante -

Melissa		105467