Tabla Interna
Es un objeto de datos que permite guardar en memoria grandes cantidades de registros de datos con la misma estructura.
DATA: BEGIN OF <tabla> OCCURS <n>,
<Def.Campo>,
...
END OF <tabla>.
Por lo general OCCURS se pone a 0 para poder trabajar con gran cantidad de registros.
Área de trabajo
Cabecera de una tabla interna que tiene el contenido del registro de la tabla interna que se está procesando.
Otra forma de declarar una tabla interna
DATA: BEGIN OF ti_proveedores,
nombre(30) TYPE c,
apellido(30) TYPE c,
dni(8) TYPE c,
END OF ti_proveedores.
DATA: ti_proveedores LIKE STANDARD TABLE OF wa_proveedores.
Llenado de una tabla interna
APPEND TO. Se añade un registro a la tabla interna en la última posición con los valores que tengamos en el área de trabajo.
Ejemplo:
CLEAR wa_proveedores.
wa_proveedores-nombre = 'Ernesto'.
wa_proveedores-apellido = 'Villanueva'.
wa_proveedores-dni = '24987564'.
APPEND wa_proveedores TO ti_proveedores.
Ordenamiento de una tabla interna
SORT ti_proveedores BY dni DESCENDING.
Para ordenar de menor a mayor se utiliza ASCENDING.
Procesamiento de una tabla interna
Para recorrer una tabla interna y procesar registro a registro utilizaremos la sentencia LOOP-ENDLOOP.
LOOP AT ti_proveedores INTO wa_proveedores
WHERE NOT nombre IS INITIAL.
ENDLOOP.
Lectura de una tabla interna
Para leer un registro concreto de una tabla interna sin necesidad de recorrerla utilizamos la sentencia READ TABLE.
READ TABLE ti_proveedores INTO wa_proveedores
WITH KEY nombre = 'Ariel'.
Si se encuentra el registro buscado, el SY-SUBRC será cero, caso contrario, será distinto de cero.
READ TABLE ti_proveedores INTO wa_proveedores INDEX 1.
El agregado de la cláusula BINARY SEARCH en la sentencia READ TABLE hace que la búsqueda sea ampliamente más eficiente.
Modificando una tabla interna
wa_proveedores-dni = '24987500'.
MODIFY ti_proveedores FROM wa_proveedores INDEX 1.
*Inserto un registro en la segunda posicion de la tabla
wa_proveedores-nombre = 'Marcelo'.
wa_proveedores-apellido = 'Rivarola'.
wa_proveedores-dni = '20857492'.
INSERT wa_proveedores INTO ti_proveedores INDEX 2.
*Borro un registro de la tabla
DELETE ti_proveedores
WHERE dni = '20857492'.
Para borrar todo el contenido(inicializar) de una tabla interna utilizamos la sentencia REFRESH.
REFRESH ti_proveedores.
Para saber cuantos registros tiene una tabla interna utilizamos la sentencia DESCRIBE TABLE.
DATA: v_lineas TYPE i.
DESCRIBE TABLE ti_proveedores LINES v_lineas.
Para inicializar el area de trabajo utilizamos la sentencia CLEAR.
Para liberar el espacio de una tabla es decir eliminar utilizamos la sentencia FREE.
Para vaciar el contenido de una tabla utilizamos la sentencia REFRESH.