✒️ABAP Las tablas internas
ABAP Las tablas internas
Tablas internas
1. ¿Qué son las Tablas internas?
Son objetos de datos que permiten guardar en memoria grandes cantidades de registros de datos con la misma estructura.
La cantidad de registros máxima esta relacionada con los límites especificados en la instalación del sistema.
El uso típico que se le da 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. ¿Cómo se declara una Tabla interna?
La sintaxis para su declaración es la siguiente:
DATA: BEGIN OF <tabla> OCCURS <n>,
<Def. Campo>,
END OF <tabla>.
De esta manera definiremos una tabla interna con n líneas en memoria más 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 simultáneamente.
Por lo general, en el parámetro OCCURS se especifica la cantidad 0 lo que permite trabajar con tablas de gran cantidad de registros.
En el siguiente ejemplo declaramos la tabla interna TI_PROVEEDORES.
DATA: BEGIN OF ti_proveedores OCCURS 0,
nombre(30) TYPE c,
apellido(30) TYPE c,
dni(8) TYPE c,
END OF ti_proveedores.
Otra forma de hacer la declaración sería:
DATA: BEGIN OF wa_proveedores,
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.
Existe otra manera de declara una tabla interna sin tener que declara un área de trabajo, esto es mediante la palabra reservada WITH HEADER LINE
DATA: ti_vuelos LIKE STANDARD TABLE OF s_flight WITH HEADER LINE
3. Llenado de una tabla interna
Para llenar con datos una tabla interna utilizamos:
APPEND TO: Se añade un registro a la tabla interna en la última posicion con los valores que tengamos en el área de trabajo.
CLEAR wa_proveedores.
wa_proveedores-nombre = 'Ernesto'.
wa_proveedores-apellido = 'Villanueva'.
wa_proveedores-dni = '24987564'.
APPEND wa_proveedores TO ti_proveedores.
CLEAR wa_proveedores.
wa_proveedores-nombre = 'Ariel'.
wa_proveedores-apellido = 'Gallardo'.
wa_proveedores-dni = '25986584'.
APPEND wa_proveedores TO ti_proveedores.
Para llenar una tabla interna con el contenido de una base de datos, utilizaremos la sentencia SELECT.
4. Ordenamiento de una tabla interna
Para ordenar una tabla interna utilizamos la sentencia SORT
SORT ti_proveedores BY dni DESCENDING
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.
LOOP AT ti_proveedores INTO wa_proveedores
WHERE NOT nombre IS INITIAL.
ENDLOOP.
Si no existe ningún registro que cumpla la condición especificada en la cláusula WHERE, el SY-SUBRC será distinto de cero.
Otra forma de declarar una estructura o área de trabajo de una tabla interna es utilizando la sentencia LINE LIKE OFF
DATA: wa_proveedores LIKE LINE OFF ti_proveedores
De esta manera estamos creando una estructura idéntica a un registro cualquiera de la tabla interna ti_proveedores.
6. 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. Si se desea leer los datos que se encuentran en una posición particular de la tabla se utilizará la cláusula INDEX tal como vemos en el siguiente ejemplo.
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.
7. Modificando una tabla interna
Para modificar el contenido de un registro de una tabla interna utilizamos la sentencia MODIFY. En el siguiente ejemplo modificamos el campo DNI correspondiente al primer registro de la tabla interna.
wa_proveedores-dni = '24987500'
MODIFY ti_proveedores FROM wa_proveedores INDEX 1.
Si intentamos modificar un registro de una tabla interna y el mismo no existe entonces el SY-SUBRC será distinto de cero.
Para insertar 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.
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 un registro de una tabla interna utilizamos la sentencia DELETE. En el siguiente ejemplo borramos el registro de la tabla interna de proveedores con DNI igual a 20857492.
DELETE ti_proveedores WHERE dni = '20857492'.
Para borrar todo el contenido de una tabla interna utilizamos la sentencia REFRESH. En el siguiente ejemplo inicializamos la tabla interna TI_PROVEEDORES.
REFRESH ti_proveedores.
Para saber cuantos registros tiene un tabla interna utilizamos la sentencia DESCRIBE TABLE. En el siguiente ejemplo declaramos V_LINEAS que es la variable que va a contener la cantidad de filas de la tabla interna TI_PROVEEDORES luego de ejecutar la sentencia DESCRIBE_TABLE.
DATA: v_lineas TYPE i.
DESCRIBE TABLE ti_proveedores LINES v_lineas.
Para inicializar el área de trabajo o cabecera de la tabla interna utilizaremos la sentencia CLEAR seguida del área de trabajo o cabecera, para liberar el espacio ocupado por una tabla interna en memoria utilizaremos la sentencia FREE seguida del nombre de la tabla interna. La sentencia REFRESH solo borra el contenido de la tabla interna no la tabla.
 
 
 
Sobre el autor
Publicación académica de Pedro Alejandro Arroyo Gutierrez, en su ámbito de estudios para la Carrera Consultor ABAP.
Pedro Alejandro Arroyo Gutierrez
Profesión: Gerente de Sistemas - Mexico - Legajo: MC48F
✒️Autor de: 65 Publicaciones Académicas
🎓Egresado del módulo:
Certificación Académica de Pedro Arroyo