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.