✒️ABAP Las tablas internas
ABAP Las tablas internas
Tablas Internas.
Es un objeto de datos que permite guardar en memoria grandes cantidades de registros de datos con la misma estructura.
Se puede almacenar de 0 a n registros de datos.
La TI existe en memoria mientras el report se encuentre en ejecución.
Se compone de:
- Linea de cabecera (Esctructura o Working Area).
- Las filas o registros que componen el cuerpo de la TI.
Usos:
- 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.
¿Cómo se declara una tabla interna?.
Al no recomendarse el uso de la palabra reservada WITH HEADER LINE, lo más frecuente es utilizar un tipo.
Ejemplo.
Declaración de tipo.
TYPES: BEGIN OF ty_ekko,
ebeln TYPE ebeln,
burks TYPE burks,
END OF ty_ekko.
Declaración de estructura.
DATA wa_ekko TYPE ty_ekko.
Declaración de tabla interna.
DATA ti_ekko TYPE STANDARD TABLE OF ty_ekko.
La palabra reservada OCCURS se usa para limitar los registros que se van a almacenar en ella.
Llenado de una tabla interna.
APPEND TO.- Añade un registro a la tabla interna en la última posición con los valores informados en el área de trabajo.
Sintaxis.
APPEND TO estructura TO tabla_interna.
SELECT. Se recuperan los registros desde una tabla de base de datos (tabla transparente).
Sintaxis.
SELECT campo1 campo2 FROM tabla_bbdd INTO TABLE tabla_interna.
Ordenamiento de una tabla interna.
SORT.- Se utiliza para ordenar la tabla interna.
Sintaxis:
SORT tabla_interna.
Se puede ordenar la tablas asdentemente o descendentemente, usando las palabras reservadas:
ASCENDING. No es necesario especificar esta palabra reservada ya que el ordenamiento ascendente es por defecto.
DESCENDING.
BY, Para especificar un criterio distinto al de la clave primaria.
Procesamiento de una tabla interna.
Para recorrer una tabla interna y procesar los registros se utiliza la sentencia LOOP-ENDLOOP.
Sintaxis:
LOOP AT tabla_interna INTO estructura.
.....
ENDLOOP.
Para que el recorrido de la tabla sea más eficiente se puede filtrar por alguno de los campos de la tabla, para ello se utiliza la clausula WHERE (condición de búsqueda de registros en la tabla interna).
LOOP AT tabla_interna INTO estructura WHERE campo = esctructura-campo.
.....
ENDLOOP.
Antes de realizar el loop sería conveniente comprobar si la tabla interna esta informada, para ello usamos la siguiente sentencia.
IF tabla_interna IS NOT INITIAL.
Lectura de una tabla interna.
Para leer un registro concreto de una tabla interna sin necesidad de recorrerla se usa la sentencia READ TABLE.
Sintaxis:
READ TABLE tabla_interna INTO estructura.
Para leer un registro en particular se usa la palabra reservada WITH KEY.
Para leer por posición del registro se usa INDEX.
Para que no salte un DUMP siempre hay que verificar si se han recuperado datos de la lectura, para ello se usa sy-subrc EQ 0.
Para que la búsqueda sea más eficiente se usa la palabra reservada BINARY SEARCH.
Un búsqueda binaria consiste en dividir el espacio de búsqueda en dos y quedarnos con la mitad en donde se encuentra el valor buscado, luego volvemos a dividir el espacio de búsqueda en dos y nos quedamos con la mitad en donde se encuentra el valor buscado y así hasta encontrar el valor buscado.
Modificando una tabla interna.
Para modificar una tabla interna o una tabla de base de datos se usa la sentencia MODIFY
Sintaxis:
MODIFY tabla_interna FROM estructura.
Para insertar un registro se usa la sentencia INSERT.
Sintaxis:
INSERT estructura INTO tabla_interna.
Pudiéndose especificar la ubicación del registro mediante la palabra reservada INDEX.
Para eliminar un registro se usa la sentencia DELETE.
Sintaxis:
DELETE tabla_interna WHERE campo = estructura-campo.
pudiéndose eliminar por el indice de la tabla usando INDEX.
Si se quiere borrar la tabla se usa la siguiente sentencia:
DELETE tabla_interna.
Para eliminar registros duplicados de una tabla interna se usa la sentencia DELETE ADJACENT DUPLICATES.
Sintaxis:
DELETE ADJACENT DUPLICATES tabla interna COMPARING campo.
Es recomendable realizar un CLEAR tabla_interna[] antes de informarla.
Para obtener la cantidad de registros que contiene una tabla interna se usa la sentencia DESCRIBE TABLE.
Sintaxis:
DESCRIBE TABLE tabla_interna LINES variable.
 
 
 
Agradecimiento:
Ha agradecido este aporte: Daniel Arias Sarmiento
Sobre el autor
Publicación académica de Carlos Rodriguez Escudero, en su ámbito de estudios para la Carrera Consultor ABAP.
Carlos Rodriguez Escudero
Profesión: Desarrollador Abap - España - Legajo: RR34T
✒️Autor de: 42 Publicaciones Académicas
🎓Egresado del módulo:
Disponibilidad Laboral: FullTime
Certificación Académica de Carlos Rodriguez