✒️ABAP Las tablas internas
ABAP Las tablas internas
QUE SON LAS TABLAS INTERNAS:
Tabla Interna: es un objeto de datos que permite guardar en memoria grandes cantidades de registros de datos con la misma estructura. La cantidad de registros máxima depende de los limites especificados en la instalación del sistema.
USO DE UNA TABLA INTERNA:
- Para almacenar temporalmente los datos de una BD para un procesamiento futuro.
- Para estructurar y formatear datos que se mostraran como salida del porgrama.
- Para formatear datos que serán utilizados en otros servicios.
--------------------------------------------------------------------------
COMO SE DEFINE UNA TABLA INTERNA:
DATA: BEGIN OF ti_proveedores OCCURS 0,
nombre(30) TYPE c,
apellido(30) TYPE c,
dni(8) TYPE c,
END OF ti_proveedores.
OCCURS define la cantidad de lineas en memoria. No limita el tamaño de la tabla, sino la cantidad de registros que se guardaran en memoria simultaneamente.
Otra forma de declarar una tabla es:
DATA: BEGIN OF wa_proveedores OCUURS 0,
nombre(30) TYPE c,
apellido(30) TYPE c,
dni(8) TYPE c,
END OF wa_proveedores.
DATA: ti_proveedores LIKE STANDARD TABLE OF wa_proveedores.
--------------------------------------------------------------------------
LLENADO DE UNA TABLA INTERNA:
La sentencia APPEND TO añade un registro a la Tabla Interna en la ultima posición con los valores que tengamos en el área de trabajo.
Por Ejemplo:
*Añado un registro a la tabla interna de proveedores
CLEAR wa_proveedores.
wa_proveedores-nombre = 'Ernesto'.
wa_proveedores-apellido = 'Villanueva'.
wa_proveedores-dni = '24987564'.
APPEND wa_proveedores TO ti_proveedores.
*Añado otro registro a la tabla interna de proveedores
CLEAR wa_proveedores.
wa_proveedores-nombre = 'Ariel'.
wa_proveedores-apellido = 'Gallardo'.
wa_proveedores-dni = '25986584'.
APPEND wa_proveedores TO ti_proveedores.
--------------------------------------------------------------------------
ORDENAMIENTO DE UNA TABLA INTERNA:
Se usa la sentencia SORD. Por Ejemplo:
*Ordeno los proveedores de mayor a menor por dni
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. Por ejemplo:
*Recorro los registros donde el nombre no es blanco
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.
*Leo los datos de UN SOLO registro particular
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.
La clausula INDEX, nos va a permitir leer los datos que se encuentran en una posición particular. Por ejemplo:
*Leo el primer registro de la tabla
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:
Se utiliza la sentencia MODIFY: Por ejemplo:
*Modifico el primer registro de la tabla
wa_proveedores-dni = '24987500'.
MODIFY ti_proveedores FROM wa_proveedores INDEX 1.
NOTA: Si intentamos modificar un registro que no existe el SY-SUBRC será distinto a cero.
Para insertar un registro en una posición determinada se utiliza la sentencia INSERT:
*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.
Para borrar el contenido de una registro utilizamos la sentencia DELETE:
*Borro un registro de la tabla
DELETE ti_proveedores
WHERE dni = '20857492'.
Para BORRAR TODO el contenido de una tabla interna utilizamos la sentencia REFRESH.
*Inicializo la tabla interna
REFRESH ti_proveedores.
Para saber cuantos registros tiene una tabla interna utilizamos la sentencia DESCRIBE TABLE:
*Averiguo la cantidad de entradas de una tabla
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.
 
 
 
Sobre el autor
Publicación académica de Alexander Castellanos, en su ámbito de estudios para la Carrera Consultor ABAP.
Alexander Castellanos
Profesión: Ingeniero de Sistemas - Colombia - Legajo: JS42A
✒️Autor de: 67 Publicaciones Académicas
🎓Egresado del módulo:
Certificación Académica de Alexander Castellanos