SAP ABAP: copia de tablas internas

Cuando leemos un registro de una tabla interna con una línea de encabezado, ese registro se mueve de la propia tabla a la línea de encabezado. Entonces es la línea de encabezado con la que trabaja nuestro programa. Lo mismo se aplica al crear un nuevo registro. Es la línea de encabezado con la que trabaja y desde la que se envía el nuevo registro al cuerpo de la tabla.

Para copiar los registros, podemos usar una instrucción SELECT para seleccionar todos los registros de la tabla y luego usar la instrucción MOVE que moverá los registros de la tabla original a la nueva tabla interna a los campos donde corresponden los nombres.

A continuación se muestra la sintaxis de la instrucción MOVE:

MOVE <table_field> TO <internal_tab_field>.

Ejemplo

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.

El código anterior produce la siguiente salida:

MARGARET  		02.11.1994

El ciclo de selección llena cada campo de uno en uno, utilizando la instrucción MOVE para mover los datos del campo de una tabla al otro. En el ejemplo anterior, las instrucciones MOVE se utilizaron para mover el contenido de la tabla ZCUSTOMERS1 a los campos correspondientes en la tabla interna. Puede realizar esta acción con solo una línea de código. Puede utilizar la instrucción MOVECORRESPONDING.

A continuación se muestra la sintaxis de la instrucción MOVE-CORRESPONDING:

MOVE-CORRESPONDING <table_name> TO <internal_tab>.

Le dice al sistema que mueva los datos de los campos de ZCUSTOMERS1 a sus campos correspondientes en itab01.

Ejemplo

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.

El código anterior produce la siguiente salida:

MARK           21.05.1981 
JAMES          14.08.1977 
AURIELE        19.06.1990 
STEPHEN        22.07.1985 
MARGARET       02.11.1994

Esto es posible por el hecho de que ambos tienen nombres de campo coincidentes. Al hacer uso de esta declaración, debe asegurarse de que ambos campos tengan tipos de datos y longitudes coincidentes. Se ha hecho aquí con la declaración LIKE anteriormente.