✒️ABAP Las tablas internas
ABAP Las tablas internas
Unidad 3. Lección 1. Tablas Internas
1. ¿Qué son tablas internas?
Es un objeto de datos que permite guardar en memoria grandes cantidadesd de registros dedatos con la misma estructura, sin necesidad de acceder continuamente a la base de datos. La cantidad máxima de registros depende de los limities especificados en la instalación del sistema.
Se emplea generalmente para:
- Almacenar temporalmente los datos de la base de datos para un procesamiento futuro.
- Para estructurar y formatear los datos que se mostrarán como salida del programa.
- Para formatear datos que será utilizados por otros servicios.
2. Declaración de una base de datos:
DATA: BEGIN OF <tabla> OCCURS <n>,
<Definición Campos>,
.....
END OF <tabla>
La tabla interna tendrá en memoria n líneas mas una linea de cabecera o área de trabajo (Working Area: tiene el contenido de registro de la tabla interna que se esta procesando en ese momento). La cantidad de líneas que se especifican en OCCURS no limita el tamaño de la tabla sino la cantidad de registros que se guardan en memoria simultaneamente. Por lo general este parametro se espefica con cantidad 0 lo que permite trabajar con tablas de gran cantidad de registros.
Cuando se declara una tabla interna en ABAP, se recomienda declarar un tipo de datos utilizando TYPES, luego declarar el area de trabajo que utilice ese TYPE y por ultimo la tabla interna utilizará esa area de trabajo para su declaración. No se recomienda emplear la palabra reservada WITH HEADER LINE para declarar una tabla interna que contenga la cabecera.
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 declarar la tabla 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.
- Otra forma de declarar un área de trabajo:
DATA: wa_proveedores LIKE LINE OF ti_proveedores. De esta forma se crea una estructura cuyo formato es identico a un registro cualquiera de la tabla interna ti_proveedores.
3. Llenado de una tabla interna
Para llenar una tabla interna se emplean las siguientes instrucciones:
- APPEND <wa_..> TO <ti_..>. Se añade un registro a la tabla interna en la última posición con los valores que tengamos en el area de trabajo.
CLEAR wa_proveedores.
wa_proveedores-nombre = 'Ernesto'.
wa_proveedores-apellido = 'Villanueva'.
wa_proveedores-dni = '258963'
APPEND wa_proveedores TO ti_proveedores.
- Llenamos la tabla interna con el contenido de una base de datos a través de la sentencia SELECT.
4. Ordenamiento de una tabla interna.
Se emplea la sentencia SORT, esta sentencia ordena por defecto de forma ascendente, por lo que no es necesario colocar explicitamente la clausula ASCENDING.
SORT ti_proveedores BY dni DESCENDING.
SORT ti_proveedores BY dni ASCENDING.
5. Procesamiento de una tabla interna
Para recorrer una tabla interna y procesar registroa registro se utiliza un bucle LOOP - ENDLOOP.
LOOP AT ti_proveedores INTO wa_proveedores
WHERE NOT nombre IS INITIAL.
ENDLOOP.
Si no existe un registro que cumpla con la clausula WHERE, el SY-SUBRC será diferente de cero.
6. Lectura de una tabla interna.
Para leer un registro de una tabla interna se emplea la sentencia READ TABLE
READ TABLE ti_proveedores INTO wa_proveedores
WITH KEY nombre= 'Ariel'.
Si encuentra el registro buscado el SY-SUBRC será cero, de lo contrario, será distinto de cero. Si se requiere una posición particular se emplea la clausula INDEX:
READ TABLE ti_proveedores INTO wa_proveedores INDEX 1.
Nota: Incluir la sentencia BINARY SEARCH en la sentencia READ TABLE hace que la búsqueda sea ampliamente más eficiente.
7. Modificando una tabla interna.
- Se emplea la sentencia MODIFY:
wa_proveedores-dni = '123654'
MODIFY ti_proveedores FROM wa_proveedores INDEX 1.
Nota: Si se intenta modificar un registro que no existe en una tabla interna, el SY-SUBRC será distinto de cero.
- Para insertar el registro de una posición de la tabla interna se emplea la sentencia INSERT:
wa_proveedores-nombre = 'Marcelo'.
wa_proveedores-apellido = 'Rivarola'.
wa_proveedores-dni = '1478852'
INSERT wa_proveedores INTO ti_proveedores INDEX 2.
- Para borrar el contenido de un registro de una tabla interna se emplea la sentencia DELETE:
DELETE ti_proveedores WHERE dni = '147852'
- Para borrar todo el contenido de la tabla interna sin borrar la tabla, se emplea la sentencia REFRESH:
REFRESH ti_proveedores.
- Para saber cuantos registros tiene una tabla interna se emplea la sentencia DESCRIBE TABLE:
DATA: v_lineas TYPE i. "Declara una variable para guardar el número de línea".
DESCRIBE TABLE ti_proveedores LINES v_lineas.
- Para iniciar el area de trabajo.
CLEAR wa_proveedores
- Liberar el espacio en memoria de una tabla interna
FREE ti_provedores.
 
 
 
Agradecimiento:
Ha agradecido este aporte: Walter Montoya García
Sobre el autor
Publicación académica de Kelly Rocio Nino Ramirez, en su ámbito de estudios para la Carrera Consultor ABAP.
Kelly Rocio Nino Ramirez
Profesión: Ingeniero de Sistemas - Colombia - Legajo: PW14Z
✒️Autor de: 30 Publicaciones Académicas
🎓Egresado del módulo:
Certificación Académica de Kelly Nino