✒️ABAP Las tablas internas
ABAP Las tablas internas
1- Tablas Internas
Que son?: objetos donde guardamos una colección de registros de datos de la misma estructura en memoria, que nos permite no tener que acceder continuamente a la base de datos y así poder realizar deversas operaciones con este conjunto de información.
Tips: es un objeto de datos que permite guardar grandes cantidades de registros de datos con la misma estructura. La cantidad de registros m+axima está relacionada con los límites especificados en la instalación del sistema.
El uso típico que se le dá a una tabla interna es:
- Para almacenar temporalmente los datos de las bases de datos para un procesamiento futuro.
- Para estructurar y formatear datos que se mostrarán como salida del programa.
-. Para formatear datos para ser utilizados por otros servicios.
2- ¿Como se declara una Tabla interna?
La sintaxis para su declaración es:
DATA:BEGIN OF <tabla> OCCURS <n>,
<Def.Campo>,
END OF <tabla>.
Así definimos una tabla interna conn líneas mas una línea de cabecera o área de trabajo. La cantidad de líneas que se especifican en OCCURS no limitan el tamaño de la tabla sino la cantidad de registros que se guardarán en memoria simultaneamente.
Nota: por lo general en el parámetro OCCURS se especifica la cantidad 0 lo que permite trabajar con tablas de gran cantidad de registros.
Tabla interna TI_PROVEEDORES.
DATA: BEGIN OF ti_proveedores OCCURS O,
nombre(30) TYPE c,
apellido(30) TYPE c,
dni(8) TYPE c,
END OF ti_proveedores
(otro forma sería con) END OF wa_proveedores
DATA: ti_proveedores LIKE STANDARD TABLE OF wa_proveedores
Audio Tips 1: otro forma para declarar tablas internas sin tener que especificar aparte un área de trabajo o cabecera que se realiza mediante la palabra reservada WA
3- Llenado de una tabla interna: utilizamos las sentencias:
- 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. Ej.
*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-nombre = 'Gallardo'.
wa_proveedores-dni = '25986584'.
APPEND wa_proveedores TO ti_proveedores.
- Llenamos la tabla interna con el contenido de una base de datos con la sentencia SELECT.
4- Ordenamiento de una tabla interna
Para ordenar una tabla interna utilizamos la sentencia SORT. (Ej.)
*Ordeno los proveedores de mayor a menor por dni
SORT ti_proveedores BY dni DESCENDING.
En este ejemplo ordenamos la tabla TI_PROVEEDORES de forma descendente por DNI lo cual invertirá el orden en el que fueron cargados originalmente los registros. Para ordenar de menor a mayor hay que utilizar la cláusula ASCENDING.
5- Procesamiento de una tabla interna:
Para recorrer una tabla interna y procesar registro a registro utilizaremos la sentencia LOOP-ENDLOOP (Ej.)
*Recorro los registros donde el nombre no es blanco
LOOP AT ti_proveedores INTO wa_proveedores
WHERE NOT nombre IS INITIAL.
ENDLOOP.
Sino existe ningún registro que cumpla la condición especificada en la cláusula WHERE, el SY-SUBRC será dintinto de cero.
Audio Tips 2: Otra forma de declarar una estructura o área de trabajo de una tabla interna y se realiza utilizando la adición LIKE LINE OF por ejemplo, podemos declarar DATA: wa_proveedores LIKE LINE OF ti_proveedores, de esta forma creamos una estructura cuyo formato es idéntico a un formato cuyo registro es idéntico TI_PROVEEDORES
6- Lectura de una tabla interna
Para ller un registro concreto de una tabla interna sin necesidad de recorrerla utilizamos la sentencia READ TABLE (Ej.)
*Leo los datos de un 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. Se se desea leer los datos que se encuentran en una posición particular de la tabla que se utiliza la cláusula INDEX tal como vemos en el siguiente ejemplo.
*Leo el primer registro de la tabla
READ TABLE ti_proveedores INTO wa_proveedores INDEX 1.
Importante: El agregado de la clausula BINARY SEARCH en la sentencia READ TABLE hace que la búsqueda sea ampliamente mas eficiente.
7- Modificando una tabla interna
Para modificar el contenido de un registro de una tabla interna utilizamos la sentencia MODIFY. (Ej.)
*Modifico el primer registro de la tabla
wa_proveedoores-dni = '24987500'.
MODIFY ti_proveedores FROM wa_proveedores INDEX 1.
Nota: Si intentamos modificar un registro de una tabla interna y el mismo no existe entonces SY-SUBRC será distinto de cero.
Para incertar un registro en una posición determinada de una tabla interna utilizamos la sentencia INSERT. En el siguiente ejemplo insertamos un registro en la posición 2. (Ej.)
*Inserto un registro en la segunda posición de la tabla
wa_proveedores-nombre = 'Marcelo'.
wa_proveedores-apellido = 'Rivarola'.
wa_proveedores-dni = '20857492'.
INSERT wa:proveedores INTO ti_proveedores INTO ti_proveedores INDEX 2.
Para borrar el contenido de un registro de una tabla interna utilizamos la sentencia DELETE. (Ej.)
*Borro un registro de la tabla
DELETE ti_proveedores
WHERE dni= '20857492'.
Para borrar todo el contenido de una tabla utilizamos la sentencia REFRESH (Ej.)
*Inicializao la tabla interna
REFRESH ti_proveedores.
Para saber cuantos registros tiene una tabla interna utilizamos la sentencia DESCRIBE TABLE. Declaramos la variable V_LINEAS que contiene la cantidad de filas de la tabla interna TI_PROVEEDORES luego de ejecutar la sentencia DESCRIBE TABLE (Ej).
*Averiguo la cantidad de entradas de una tabla
DATA: v_lineas TYPE i.
DESCRIBE TABLE ti_proveedores LINES v_lineas.
Audio Tips 3: otras instruccipnes de manejo de tablas internas que podemos utilizar para inicializar el área de trabajo o cabecera de la tabla interna utilkizaremos la sentencia CLEAR seguida del área de trabajo o cabecera, para liberar el espacio ocupado en memoria utilizaremos la sentencia FREE seguida por el nombre de la tabla interna. La sentencia REFRESH borrara el contenido de la tabla interna y no la tabla en si.
 
 
 
Sobre el autor
Publicación académica de Claudio Marcelo Dario Haikel, en su ámbito de estudios para la Carrera Consultor ABAP.
Claudio Marcelo Dario Haikel
Profesión: Funcional Sap - Argentina - Legajo: HM94J
✒️Autor de: 58 Publicaciones Académicas
🎓Egresado del módulo:
Certificación Académica de Claudio Haikel