SAP ABAP - Copia di tabelle interne

Quando leggiamo un record da una tabella interna con una riga di intestazione, quel record viene spostato dalla tabella stessa nella riga di intestazione. È quindi la riga di intestazione con cui lavora il nostro programma. Lo stesso vale durante la creazione di un nuovo record. È la riga di intestazione con la quale si lavora e da cui viene inviato il nuovo record al corpo della tabella stesso.

Per copiare i record, possiamo utilizzare un'istruzione SELECT per selezionare tutti i record dalla tabella e quindi utilizzare l'istruzione MOVE che sposterà i record dalla tabella originale nella nuova tabella interna nei campi in cui corrispondono i nomi.

Di seguito è riportata la sintassi per l'istruzione MOVE:

MOVE <table_field> TO <internal_tab_field>.

Esempio

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.

Il codice precedente produce il seguente output:

MARGARET  		02.11.1994

Il ciclo di selezione riempie ogni campo uno alla volta, utilizzando l'istruzione MOVE per spostare i dati da un campo di tabella all'altro. Nell'esempio precedente, le istruzioni MOVE sono state utilizzate per spostare il contenuto della tabella ZCUSTOMERS1 nei campi corrispondenti nella tabella interna. È possibile eseguire questa azione con una sola riga di codice. È possibile utilizzare l'istruzione MOVECORRESPONDING.

Di seguito è riportata la sintassi per l'istruzione MOVE-CORRESPONDING:

MOVE-CORRESPONDING <table_name> TO <internal_tab>.

Indica al sistema di spostare i dati dai campi di ZCUSTOMERS1 ai campi corrispondenti in itab01.

Esempio

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.

Il codice precedente produce il seguente output:

MARK           21.05.1981 
JAMES          14.08.1977 
AURIELE        19.06.1990 
STEPHEN        22.07.1985 
MARGARET       02.11.1994

Ciò è reso possibile dal fatto che entrambi hanno nomi di campo corrispondenti. Quando si utilizza questa istruzione, è necessario assicurarsi che entrambi i campi abbiano tipi di dati e lunghezze corrispondenti. È stato fatto qui con l'istruzione LIKE in precedenza.