✒️ABAP Las tablas internas
ABAP Las tablas internas
Unidad 3: Diccionario de Datos
1-Que son las Tablas Internas ?
Para guardar una coleccion de registros de datos de la misma estructura en memoria, sin necesidad de acceder continuamente a las tablas de base de datos y poder realizar varias operaciones con este conjunto de información, entonces utilizaremos tablas internas.
En defiintiva es un objeto de datos que permite guardar en memoria grandes cantidades de registros de datos con la misma estructura. La cantidad de registros maxima esta relacionada con los limites especifados en la isntalacioon del sistema.
Usos tipicos:
*Para almacenar temporalmente los datos de las bases de datos para un procesamiento futuro.
*Para estructurar y formatear datos que se mostraran como salida dle programa.
*Para formatear datos para ser utilizados por otros servicios.
2- Como 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 defineremos una tabla interna con N lineas en memoria mas una línea de cabecera o area de trabajo. La cantidad de lineas que se especidifican en OCCURS no limitan el tamaño de la tabla sino la cantidad de registros que se guardaran en memoria simultaneamente.
***NOTA: Por lo general en el parametro OCCURS se especifica la cantidad 0 lo que permite trabajar con tablas de gran cantidad de registros.
Ejemplo de delcaracion de una tabla interna TI_PROVEEDORES.
DATA: BEGIN OF ti_proveedores OCCURS 0,
nombre (30) TYPE c,
apellido (30) TYPEc,
dni (8) TYPE c,
END OF ti_proveedores.
Otra forma de declarar la misma tabla seria:
DATA: BEGIN OF wa_proveedores,
nombre (30) TYPE c,
apellido (30) TYPEc,
dni (8) TYPE c,
END OF wa_proveedores.
DATA: ti_proveedores LIKE STANDARD TABLE OF wa_proveedores.
***NOTA: Existe otra forma que podemos utilizar tablas internas, sin tener que especificar aparte una area de trabajo o cabecera.
DATA: ti_vuelos LIKE STANDAR TABLE OF sflight WITH HEADER LIKE
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 ultima posicion con los valores que tengamos en el area de trabajo.
CLEAR wa_proveedores.
wa_proveedores-nombre = 'Ernesto'
wa_proveedores-apeliido = 'Villanueva'
APPEND wa_proveedores TO ti_proveedores.
*Añado otro registro
CLEAR wa_proveedores.
wa_proveedores-nombre = 'Pepe'
wa_proveedores-apeliido = 'Sanchez'
APPEND wa_proveedores TO ti_proveedores.
4-Ordenamiento de tablas interna.
Para utilizar una tabla interna utilizamos la sentencia SORT
SORT ti_proveedores BY dni DESCENDING.
De esta forma ordenamos la tabla de forma descendente por DNI. Para ordenar de menor a mayor hay que utilizar la clausula ASCENDING.
5-Procesamiento de una tabla interna.
LOOP AT ti_proveedores INTO wa_proveedores
WHERE NOT nombre IS INITIAL.
ENDLOOP.
Sino existe ningun registro que cumpla la condicion especificada en la clausula WHERE, el SY-SUBRC será distinto de cero.
NOTA: Existe otra forma de declarar uan estructura o area de trabajo utilziando la adicion, LIKE LINE OF.
ejemplo: 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 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 sera cero. Caso contrario, sera distintio de cero.
Si se desea leer los datos que se encuentran en una posicion particular de la tabla se utilizara la clausula INDEX
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 busqueda sea ampliamente mas eficiente.
7-Modificando una tabla interna.
Para modificar el contenido de un registro de una tabla interna utilizamos la sentencia MODIFY. En el siguiente ej modificamos el campo DNI correspondiente al primer registro de la tabla interna.
wa_proveedores-dni = '30565868'
MODIFY ti_proveedores FROM wa_proveedores INDEX 1.
IMPORTANTE: Si intentamos modificar un registro de una tabla interna y el mismo no existe entonces el SY-SUBRC sera distinto de cero.
Para insertar un registro en una posicion determinada de una tabla interna utilizamos la sentencia INSERT. En el siguiente ejemplo insertamos un registro en la posicion 2.
wa_proveedores-nombre = 'Marcelo'
wa_proveedores-apeliido = ' Rivarola'
wa_proveedores-dni = '230203203'
INSERT wa_proveedores INTO ti_proveedores INDEX 2.
Para borrar el contenido de un registro en una tabla interna utilizamos la sentencia DELETE. En el ej 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.
REFRESH ti_proveedores
Para saber cuantos registros tiene una tabla interna utilizamos la sentencia DESCRIBE TABLE. En el siguiente ej declaramos V_LINES que es la variable q va a contener la canitdad de filas de la tabla interna TI_PROVEEDORES luego de ejecutar la sentencia DESCRIBRE TABLE.
DATA: v_lineas TYPE i.
DESCRIBE TABLE ti_proveedores LINES v_lines
Asi averiguo la cantidad de entrada de una tabla
NOTA: Para iniciarlizar el area de trabajo o cabecera, utilizamos la sentencia CLEAR seguido de la cabecera o area de trabajo.
Para liberar el espacio ocupado por una tabla interna en memoria, utilizamos la sentencia FREE segudio del nombre de la tabla interna.
Para borrar el contenido de la tabla interna utilizamos la sentencia REFRESH. borra el contenido y no la tabla.
 
 
 
Sobre el autor
Publicación académica de Matias Ciutat, en su ámbito de estudios para la Carrera Consultor ABAP.
Matias Ciutat
Profesión: Consultor Sap Pm - Software Engineering Team Lead - Argentina - Legajo: PW24J
✒️Autor de: 35 Publicaciones Académicas
🎓Egresado del módulo:
Certificación Académica de Matias Ciutat