Les tables internes sont des tableaux structurés de variables.
d) Déclaration d’une table interne
Il existe plusieurs façons de déclarer une table interne :
Data : nom_table occurs 0,
nom_zone1 type I,
nom_zone2 like nom_variable,
nom_zone3 like nom_structure1 ,
End of nom_table.
Remarque : la zone nomzone1 de la structure nom_zone3 pourra être atteinte par nom_table- nom_zone3-nomzone1.
Ou
Data nom_table like nom_structure1 occurs 0 [ with Header line ]
Ou
Data nom_table type table of nom_type_structure1 [ with Header line ]
mais on peut également declarer un type table
types typetable1 like structure1 occurs 0.
Data nom_table type typetable1.
e) Lecture d’une table interne
Il existe deux façons de lire une table interne.
- Boucler sur les lignes de la table avec l’instruction LOOP
LOOP AT nom_table into nom_structure [ where conditions ].
Traitement.
ENDLOOP.
- Cibler une ligne avec l’instruction READ
READ TABLE nom_table into nom_structure index numéro_de_ligne
READ TABLE nom_table into nom_structure
WITH KEY nomzone1 = valeur1 nomzone2 = valeur2.
Les instructions LOOP et READ utilisent toutes les deux les variables systèmes SY-SUBRC et SY-TABIX.
SY-SUBRC indique si une ligne a été trouvée.
SY-TABIX indique la ligne ciblée.
f) Tri d'une table interne
L'instruction SORT nom_table by zone1 zone2. permet de trier la table interne nom_table selon deux de ses zones zone1 et Zone2.
g) Alimentation d’une table interne
Pour charger une table on aura besoin d'une structure que l'on valorisera d'abord et qui sera ensuite chargée dans la table.
Ajout d'une ligne dans la table interne
APPEND nom_structure to nom_table.
Insertion d'une ligne
INSERT nom_structure INTO nom_table INDEX numero_ligne.
Modification d'une ligne
MODIFY nom_table INDEX numero_ligne FROM nom_structure.
REM : Dans un loop on n'a pas besoin du paramètre INDEX.
Suppression de lignes
DELETE TABLE nom_table with table key …….
DELETE nom_table where conditions.
Ajout de lignes en cumulant les zones numériques
COLLECT nom_structure to nom_table.
h) Ligne d'en-tête d’une table interne
Il est possible de déclarer en même temps que la table une structure qui portera le même nom que la table et servira à l'alimenter.
Parmi les trois déclarations de tables internes précédentes : la première a déclaré une ligne d'en-tête , les suivante uniquement si on a rajouté l'addition WITH HEADER LINE.
L'utilisation d'une ligne d'en-tête permet de simplifier les instructions d'alimentation et de lecture; La référence à la structure d'alimentation n'étant plus utile.
On aura par exemple : APPEND nom_table.
i) Nombre de lignes d’une table interne
L’instruction DESCRIBE TABLE nom_table LINES nom_variable. Permet de charger dans la variable nom_variable le nombre de lignes de la table interne nom_table.
j) Initialisation d’une table interne.
refresh nom_table permet de vider la table interne
Si la table n'a pas de ligne d'entête un CLEAR nom_table suffit.
Les instructions de contrôle
a) Opérateur de comparaison
On peut utiliser les opérateurs classiques ( <, >, = , >= , <=,<> ) ou ceux de SAP ( LT,GT, EQ, GE, LE, NE )
NOT condition indique sa négation.Il existe également des opérateurs propres à la comparaison de chaînes
( CO = contient uniquement des caractères, CN sa négation, CA contient au moins un caractère…. )
b) IF.
IF condition.
xxxxxxxxxxxxxxxxxx
ELSEIF condition.
xxxxxxxxxxxxxxxxxx
ELSE.
xxxxxxxxxxxxxxxxxx
ENDIF.
d) CASE.
CASE nomvariable.
WHEN valeur1 or valeur2.
xxxxxxxxxxxxxxxxxx
WHEN valeur3 .
xxxxxxxxxxxxxxxxxx
WHEN OTHERS.
xxxxxxxxxxxxxxxxxx
ENDCASE.
e) DO.
DO.
xxxxxxxxxxxxxxxxxx
ENDDO.
f) WHILE
WHILE condition.
ENDWHILE.
g) Instruction de rupture
EXIT : Dans une boucle DO ou LOOP sort de la boucle.
CONTINUE. Dans une boucle DO ou LOOP passe à l’itération suivante sans finir la boucle en cours
CHECK condition : est équivalent à un CONTINUE si la condition est vérifiée.