✒️ABAP / Las tablas internas Por Mayra Pino Rodriguez
ABAP Las tablas internas

Unidad 3. DICCIONARIO DE DATOS.
LECCION 1: TABLAS INTERNAS
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 está relacionada con los límites especificados en la instalación del sistema.
La tabla interna es:
- Para almacenar temporalmente los datos de las bases de datos para un procesamiento futuro.
- Para estructurar y formatear datos q se mostrarán como salida del programa.
- Para formatear datos para ser utilizados por otros servicios.
2. COMO SE DECLARA UNA TABLA INTERNA?
DATA: BEGIN OF <tabla> OCCURS <n>,
<def. Campo>,
......
END OF <tabla>.
De esta forma 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 q se especifican en OCCURS no limitan el tamaño sino la cantidad de registros q se guardarán en memoria simultáneamente.
POR LO GENERAL, EN EL PARAMETRO OCCURS SE ESPECIFICA LA CANTIDAD 0 LO QUE PERMITE TRABAJAR CON TABLAS DE GRAN CANTIDAD DE REGISTROS.
EJ de declaración de tabla interna:
1.- tabla interna TI_PROVEEDORES.
* Tabla interna de proovedores
DATA: BEGIN OF ti_proveedores OCCURS 0,
nombre(30) TYPE c,
apellido(30) TYPE c,
dni(8) TYPE c,
END OF ti_proveedores.
2.- Otra forma:
DATA: BEGIN OF wa_proveedores OCCURS 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.
3.- Existe otra forma q podemos utilizar para declarar tablas internas sin tener q especificar a parte un área de trabajo o cabecera y que se realiza mediante la palabra reservada WITH HEADER LINE.
Supongamos q queremos crear una tabla interna ti_vuelos del mismo tipo q la tabla estándar del sistema de vuelos q es sflight.
DATA: ti_vuelos LIKE STANDARD TABLE OF sflight WITH HEADER LINE.
De esta forma estamos declarando una tabla interna en donde la cabecera o área de trabajo de la tabla es la misma tabla interna.
3. 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
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-apellido = 'Gallardo'.
wa_proveedores-dni = '25986584'.
APPEND wa_proveedores TO ti_proveedores.
- Llenamos la tabla interna con el contenido de una BD. Esto lo haremos con la sentencia SELECT.
4. ORDENAMIENTO DE UNA TABLA INTERNA.
- Sentencia SORT. Para ordenar una tabla interna.
* Ordeno los proveedores de mayor a menor por dni.
SORT ti_proveedores BY dni DESCENDING.
Ordenamos la tabla ti_proveedores de forma descendente por DNI lo cual invertirá el orden en el q fueron cargadas originalmente los registros.
- cláusula DESCENDING: ordenar de mayor a menor
- cláusula ASCENDING: ordenar de menor a mayor.
Si no especificamos un orden de ordenamiento entonces el ordenamiento por defecto será ascendente.
También existe la posibilidad de ordenar una tabla interna en froma descendente por algunos campos y en forma ascendente por otros.
Veamos a continuación un ejemplo:
SORT ti_usuarios BY documento DESCENDING fecha_alta ASCENDING.
5. PROCESAMIENTO DE UNA TABLA INTERNA.
- LOOP-ENDLOOP: para recorrer una tabla interna y procesar registro a registro.
* Recorro los registros donde el nombre no es blanco
LOOP AT ti_proveedores INTO wa_proveedores
WHERE NOT nombre IS INITIAL.
ENDLOOP.
Si no existe ningún registro q cumpla la condición especificada en la cláusula WHERE, el SY-SUBRC será distinto de cero.
Utilizamos la cláusula WHERE para especificar las condiciones en diferentes sentencias del lenguaje.
En la sentencia SELECT utilizaremos la cláusula WHERE para acotar la selección de los datos de la tabla BD.
- Existe otra forma de declarar una estructura o área de trabajo de una tabla interna y se realiza utilizando la adición
LIKE LINE OF.
Tomemos la tabla interna ti_proveedores con la adición OCCURS 0.
Si deseamos crear una estructura con el mismo formato de esta tabla interna, podemos declarar:
DATA: wa_proveedores LIKE LINE OF ti_proveedores
de esta forma estamos creando una estructura cuyo formato es identico a un registro cualquiera de la tabla interna ti_proveedores.
6. LECTURA DE UNA TABLA INTERNA.
- Sentencia READ TABLE: se usa para leer un registro concreto de una tabla interna sin necesidad de recorrerla.
* Leo los datos de un registro particular
READ TABLE ti_proveedores INTO wa_proveedores
WITH KEY nombre = 'Ariel'.
Si se encuentra el registro, SY-SUBRC=0 else SY-SUBRC <> 0
- Cláusula INDEX: si se desea leer los datos que se encuentran en una posición particular de la tabla.
Ej: Lectura de una tabla interna por índice
* Leo el primer registro de la tabla
READ TABLE ti_proveedores INTO wa_proveedores INDEX 1.
EL AGREGADO DE LA CLAUSULA BINARY SEARCH EN LA SENTENCIA READ TABLE HACE Q LA BUSQUEDA SEA AMPLIAMENTE MAS EFICIENTE.
7. MODIFICANDO UNA TABLA INTERNA.
- SENTENCIA MODIFY: para modificar el contenido de un registro de una tabla interna.
Ej:
* Modifico el primer registro de la tabla
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 el SY-SUBRC será <> 0.
- SENTENCIA INSERT: para insertar un registro en una posición determinada de una tabla interna.
Ej: Insertamos un registro en la posición 2.
* 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 INDEX 2.
- SENTENCIA DELETE: para borrar el contenido de un registro de una tabla interna.
Ej: borramos el registro de la tabla interna de proveedores con DNI = '20857492'.
* Borro un registro de la tabla
DELETE ti_proveedores
WHERE dni = '20857492'.
- SENTENCIA REFRESH: para borrar todo el contenido de una tabla interna.
Ej: borrado del contenido completo de una tabla interna
* Inicializo la tabla interna
REFRESH ti_proveedores.
- SENTENCIA DESCRIBE TABLE: para saber cuantos registros tiene una tabla interna.
Ej: cantidad de registros de una tabla interna.
* Averiguo la cantidad de entradas de una tabla
DATA: v_lineas TYPE i.
DESCRIBE TABLE ti_proveedores LINES v_lineas.
dde v_lineas es la variable q va a contener la cantidad de filas de la tabla interna ti_proveedores luego de ejecutar la
sentencia DESCRIBE TABLE.
OTRAS INSTRUCCIONES DE MANEJO DE TABLAS INTERNAS Q PODEMOS UTILIZAR:
- Sentencia CLEAR <area trabajo o cabecera>: Para inicializar el área de trabajo o cabecera de la tabla interna
- Sentencia FREE <nombre tabla interna>: liberar el espacio ocupado por una tabla interna en memoria.
- La sentencia REFRESH borrará el contenido de la tabla interna y NO la tabla en sí.
 
 
 
Sobre el autor
Publicación académica de Mayra Maria Pino Rodriguez, en su ámbito de estudios para la Carrera Consultor ABAP Nivel Inicial.
Mayra Maria Pino Rodriguez
Profesión: Licenciada Cibernética Matemática - Republica Dominicana - Legajo: RA62Z
✒️Autor de: 56 Publicaciones Académicas
🎓Egresado del módulo:
Certificación Académica de Mayra Pino






Disponibilidad Laboral: FullTime


















