SAP ABAP - Copie de tables internes

Lorsque nous lisons un enregistrement d'une table interne avec une ligne d'en-tête, cet enregistrement est déplacé de la table elle-même dans la ligne d'en-tête. C'est alors la ligne d'en-tête avec laquelle notre programme fonctionne. La même chose s'applique lors de la création d'un nouvel enregistrement. Il s'agit de la ligne d'en-tête avec laquelle vous travaillez et à partir de laquelle le nouvel enregistrement est envoyé au corps de la table lui-même.

Pour copier les enregistrements, nous pouvons utiliser une instruction SELECT pour sélectionner tous les enregistrements de la table, puis utiliser l'instruction MOVE qui déplacera les enregistrements de la table d'origine vers la nouvelle table interne dans les champs où les noms correspondent.

Voici la syntaxe de l'instruction MOVE -

MOVE <table_field> TO <internal_tab_field>.

Exemple

REPORT  ZCUSLIST1. 
TABLES: ZCUSTOMERS1. 
DATA: BEGIN OF itab01 Occurs 0,
      name LIKE ZCUSTOMERS1-name,
      dob LIKE ZCUSTOMERS1-dob, 
END OF itab01. 

Select * FROM ZCUSTOMERS1. 
MOVE ZCUSTOMERS1-name TO itab01-name. 
MOVE ZCUSTOMERS1-dob TO itab01-dob. 
ENDSELECT.
 
Write: / itab01-name, itab01-dob.

Le code ci-dessus produit la sortie suivante -

MARGARET  		02.11.1994

La boucle de sélection remplit chaque champ un par un, en utilisant l'instruction MOVE pour déplacer les données d'un champ de table à l'autre. Dans l'exemple ci-dessus, les instructions MOVE ont été utilisées pour déplacer le contenu de la table ZCUSTOMERS1 vers les champs correspondants de la table interne. Vous pouvez accomplir cette action avec une seule ligne de code. Vous pouvez utiliser l'instruction MOVECORRESPONDING.

Voici la syntaxe de l'instruction MOVE-CORRESPONDING -

MOVE-CORRESPONDING <table_name> TO <internal_tab>.

Il indique au système de déplacer les données des champs de ZCUSTOMERS1 vers leurs champs correspondants dans itab01.

Exemple

REPORT  ZCUSTOMERLIST. 
TABLES: ZCUSTOMERS1. 
DATA: Begin of itab01 occurs 0,
      customer LIKE ZCUSTOMERS1-customer,
      name LIKE ZCUSTOMERS1-name,
      title LIKE ZCUSTOMERS1-title,
      dob LIKE ZCUSTOMERS1-dob, 
END OF itab01. 

SELECT * from ZCUSTOMERS1. 
MOVE-Corresponding ZCUSTOMERS1 TO itab01. 
APPEND itab01. 
ENDSELECT. 
LOOP AT itab01. 
Write: / itab01-name, itab01-dob. 
ENDLOOP.

Le code ci-dessus produit la sortie suivante -

MARK           21.05.1981 
JAMES          14.08.1977 
AURIELE        19.06.1990 
STEPHEN        22.07.1985 
MARGARET       02.11.1994

Ceci est rendu possible par le fait que les deux ont des noms de champ correspondants. Lorsque vous utilisez cette instruction, vous devez vous assurer que les deux champs ont des types de données et des longueurs correspondants. Cela a été fait ici avec l'instruction LIKE précédemment.