Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Apprendre à programmer avec ABAP
  3. Les tables internes
Extrait - Apprendre à programmer avec ABAP Les fondamentaux du développement sur SAP (avec exercices et corrigés)
Extraits du livre
Apprendre à programmer avec ABAP Les fondamentaux du développement sur SAP (avec exercices et corrigés) Revenir à la page d'achat du livre

Les tables internes

Caractéristiques

1. Définition

Une table interne est un objet dans un programme permettant de stocker des données le temps de l’exécution dudit programme.

Elle se déclare de la façon suivante :


TYPES: BEGIN OF ty_tab, 
         obj1 TYPE dtel1, 
         obj2 TYPE dtel2, 
         obj3 TYPE dtel3, 
         . . . 
       END OF ty_tab. 
 
DATA: it_tab_types TYPE TABLE OF ty_tab, 
      wa_tab_types TYPE ty_tab.
 

Un type de structure est tout d’abord créé, c’est une sorte de squelette qui sera utilisé comme une référence par la table interne IT_TAB_TYPES avec l’instruction TYPE TABLE OF, et la structure WA_TAB_TYPES avec TYPE. L’instruction commence par la commande TYPES puis BEGIN OF indiquant qu’un type de structure va être créé. Les champs qui la composent sont ensuite listés et référencés. Cette référence à une spécificité technique, peut se faire de plusieurs manières (pas vraiment de grandes différences aussi bien techniques que pour l’optimisation du programme).

  • Référence directe à un type de champ et une longueur :


. . .  
  obj1(5) TYPE c,  
  obj2(4) TYPE n,  
. . .
 
  • Référence directe à un élément de données (cf. chapitre Dictionnaire de données (DDIC) - Éléments de données) :


. . .  
  obj1 TYPE char5,  
  Obj2 TYPE numc4,  
. . . 
 
  • Référence indirecte à un élément de données via le nom d’une table et son champ :


. . .  
  obj1 TYPE zdriver_car-driver_id,  
  Obj2 TYPE zdriver_car-car_year,  
. . .
 
  • Référence indirecte avec le LIKE :


. . . obj1 LIKE char5,  
      Obj2 LIKE numc4,  
. . .  
 


. . . obj1 LIKE zdriver_car-driver_id,  
      Obj2 LIKE zdriver_car-car_year,  
. . . 
 

Pour faire une petite parenthèse, une variable et une constante peuvent se déclarer exactement de la même façon. Cette notion n’a pas été évoquée dans le chapitre adéquat...

Travail sur les données

1. Ajout d’enregistrements

a. INSERT


INSERT   wa  
      | {INITIAL LINE}  
      | {LINES OF jtab [FROM idx1] [TO idx2]} ...  
  INTO  {TABLE itab}  
      | {itab INDEX idx } ... 
 

L’instruction INSERT va insérer les données contenues dans une structure (wa), une ligne vide (INITIAL LINE), ou dans les lignes d’une autre table interne (jtab), avec comme option la possibilité de spécifier les numéros de ligne à copier (FROM idx1 / TO idx2). Elle va insérer ces enregistrements dans une table interne (TABLE itab), avec la possibilité d’indiquer leur ligne de destination.

Pour tous les exemples ci-dessous, le programme 06_CODE_CITIZEN.txt liste tous les champs et les valeurs de la table interne T_CITIZEN.

Exemple

Insertion de lignes dans la table interne T_CITIZEN1


TYPES: BEGIN OF ty_citizen, 
         country TYPE char3, 
         name    TYPE char20, 
         age     TYPE numc2, 
       END OF ty_citizen. 
 
DATA: t_citizen1 TYPE TABLE OF ty_citizen, 
      t_citizen2 TYPE TABLE OF ty_citizen, 
      s_citizen  TYPE ty_citizen. 
 
 
s_citizen-country = 'FR'. 
s_citizen-name    = 'Thierry'. 
s_citizen-age     = '24'. 
INSERT s_citizen INTO TABLE t_citizen1. 
* 
s_citizen-country = 'ES'. 
s_citizen-name    = 'Luis'. 
s_citizen-age     = '32'. 
INSERT s_citizen INTO TABLE t_citizen2. 
 
s_citizen-country = 'BR'. 
s_citizen-name    = 'Renata'. 
s_citizen-age     = '27'. 
INSERT s_citizen INTO TABLE t_citizen2. ...

Organisation et Lecture

1. SORT


SORT itab [ASCENDING|DESCENDING] [AS text] [STABLE] 
             BY c1 [ASCENDING|DESCENDING] [AS text] 
              ... 
                cn [ASCENDING|DESCENDING] [AS text].
 

L’instruction SORT permet d’organiser une table interne de type STANDARD ou HASHED itab selon sa clé primaire ou une liste de composants (c1 à cn). Les options ASCENDING et DESCENDING définissent un tri par ordre croissant ou décroissant, AS TEXT donne la possibilité pour les champs de type chaîne de caractères d’être triés par une langue définie en local par l’instruction SET LOCALE LANGUAGE (par défaut, la langue utilisée est celle définie par l’utilisateur).

Exemple

Deux SORT sont effectués sur une table de type STANDARD.


TYPES: BEGIN OF ty_citizen, 
         country TYPE char3, 
         name    TYPE char20, 
         age     TYPE numc2, 
       END OF ty_citizen. 
 
DATA: t_citizen TYPE STANDARD TABLE OF ty_citizen, 
      s_citizen  TYPE ty_citizen. 
 
s_citizen-country = 'FR'. 
s_citizen-name    = 'Thierry'. 
s_citizen-age     = '24'. 
APPEND s_citizen TO t_citizen. 
 
s_citizen-country = 'ES'. 
s_citizen-name    = 'Luis'. 
s_citizen-age     = '32'. 
APPEND s_citizen TO t_citizen. 
 
s_citizen-country = 'BR'. 
s_citizen-name    = 'Renata'. 
s_citizen-age     = '27'. 
APPEND s_citizen TO t_citizen. 
 
s_citizen-country = 'FR'. ...

Outils

1. FIND IN TABLE


FIND [{FIRST OCCURRENCE}|{ALL OCCURRENCES} OF] pattern  
     IN TABLE itab [table_range]  
     [IN {CHARACTER|BYTE} MODE]  
... [{RESPECTING|IGNORING} CASE]  
    [MATCH COUNT  mcnt]  
    { {[MATCH LINE   mlin]  
       [MATCH OFFSET moff]  
       [MATCH LENGTH mlen]}  
    | [RESULTS result_tab|result_wa] }.
 

L’instruction FIND IN TABLE possède les mêmes paramètres et se comporte exactement de la même façon que l’instruction FIND dans une variable (cf. chapitre Instructions basiques ABAP - Opérations sur variable texte).

Exemple

Chercher toutes les occurrences ’FR’ dans la table T_CITIZEN et afficher les lignes concernées.


TYPES: BEGIN OF ty_citizen, 
         country TYPE char3, 
         name    TYPE char20, 
         age     TYPE numc2, 
       END OF ty_citizen. 
 
DATA: t_citizen TYPE STANDARD TABLE OF ty_citizen, 
      t_results TYPE TABLE OF match_result, 
      s_citizen TYPE ty_citizen, 
      s_results TYPE match_result. 
 
FIELD-SYMBOLS: <fs_citizen> TYPE ty_citizen. 
 
s_citizen-country = 'FR'. 
s_citizen-name    = 'Thierry'. 
s_citizen-age     = '24'. 
APPEND s_citizen TO t_citizen. 
 
s_citizen-country = 'ES'. 
s_citizen-name    = 'Francisco'. 
s_citizen-age     = '32'. 
APPEND s_citizen TO t_citizen. 
 
s_citizen-country = 'BR'. 
s_citizen-name    = 'Renata'. ...

Exercice

Le but de cet exercice est de créer deux tables internes, et de boucler sur l’une d’entre elles pour afficher ses informations complétées par celles de la deuxième.

 Créer un programme Z comme objet local via la transaction SE38.

 Créer une table interne T_CATEGORY contenant les champs :

  • CATEGORY de type alphanumérique de 3 positions.

  • DESCRIPTION de type alphanumérique de 20 positions.

 Renseigner la table interne avec les enregistrements suivants :

CATEGORY

DESCRIPTION

BIO

Biographie

FAN

Fantasy

HOR

Horreur

ROM

Roman

SCI

Science-Fiction

 Créer une deuxième table interne T_BOOKS faisant référence à la table du DDIC ZBOOKS :

 Renseigner la table interne avec les enregistrements suivants :

TITLE

CATEGORY

AUTHOR

YEAR

La planète des Singes

SCI

Pierre Boulle

1963

Le Seigneur des Anneaux

FAN

J.R.R. Tolkien

1955

Frida Khalo

BIO

Frida Khalo

2009

Ça

HOR

Stephen King

1986

L’alchimiste

ROM

Paulo Coelho

1988

Dune

SCI

Frank Herbert

1965

L’Appel de Cthulhu

HOR

Howard P. Lovecraft

1928

Open

BIO

André Agassi

2011

Au bonheur des Ogres

ROM

Daniel Pennac

1985

Le Trône de fer

FAN

George R.R. Martin

1996

La Nuit des Temps

SCI

René Barjavel

1968

 Le programme affichera un compteur indiquant le nombre de livres contenus dans la bibliothèque (penser à une phrase du type : ’La...