✒️ABAP Las tablas internas
ABAP Las tablas internas
Tablas internas
1. Que son tablas internas?
Son objetos utilizados para almacenar en memoria grandes cantidades datos del mismo tipo de estructura, para evitarnos la necesidad de acceder a base de datos constantemente. La cantidad máxima de registros que pueden ser guardados en tablas internas está supeditada a los límites definidos en la instalación del sistema.
Entre los usos típicos de una tabla interna tenemos:
- Almacenamiento temporal de datos de la base de datos, para posterior procesamiento.
- Estructurar y formatear datos que se mostraran como salida del programa.
- Formatear datos para ser utilizados por otros servicios.
2. Como se declara una tabla interna?
DATA: BEGIN OF <tabla> OCCURS <n>,
<declaraciones de campos>,
END OF <tabla>.
…. donde n es el número de líneas en memoria, más una línea de cabecera o área de trabajo. Esta área de trabajo es la que contiene el contenido del registro de la tabla que se está procesando en el momento. Las líneas especificadas en OCCURS (n) no limitan el tamaño de la tabla, sino la cantidad de registros que se guardarán simultáneamente. En general n se deja como 0, para poder trabajar con tabas de un gran volumen de registros.
Ejemplos de declaración de tablas internas:
DATA: BEGIN OF ti_proveedores OCCURS 0,
Nombre(30) type c,
Apellido(30) type c,
DNI(8) type c,
END OF ti_proveedores.
Otra manera seria asi:
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.
Si quisiéramos declarar una tabla interna con cabecera o área de trabajo, sin necesidad de declarar el área de trabajo aparte, se utiliza la cláusula WITH HEADER LINE.
Ej.
DATA: ti_proveedores LIKE STANDARD TABLE OF wa_proveedores WITH HEADER LINE.
Tip: Otra forma de declarar una estructura o área de trabajo es con el uso de LIKE LINE OF.
DATA: wa_proveedores LIKE LINE OF ti_proveedores.
Eso crea a wa_proveedores como una estructura idéntica de un registro de la tabla ti_proveedores.
3. Llenado de una tabla interna.
- APPEND TO: añade un registro a la tabla interna luego de la última posición, con los valores que tengamos en el área de trabajo.
Ej.
CLEAR wa_proveedores.
wa_proveedores-nombre = ‘Ernesto’.
wa_proveedores-apellido = ‘Garcia’.
wa_proveedores-dni = ‘123456789’
APPEND wa_proveedores TO ti_proveedores.
- Llenamos la tabla interna con contenido de la base de datos, mediante la sentencia SELECT.
4. Ordenamiento de una tabla interna.
SORT ti_proveedores BY dni (ASCENDING/DESCENDING).
5. Procesamiento de una tabla interna.
Para procesarla registro a registro utilizamos LOOP – ENDLOOP.
LOOP AT ti_proveedores INTO wa_proveedores
WHERE NOT nombre IS INITIAL.
ENDLOOP.
Si no existe un registro que cumpla la condición especificada en WHERE, el SY-SUBRC será <> 0.
6. Lectura de una tabla interna.
READ TABLE ti_proveedores INTO wa_proveedores
WITH KEY nombre = ‘ARIEL’.
Si se encuentra el registro, SY-SUBRC será = 0; si no, será <> 0.
Si se desea leer datos que se encuentran en una posición particular, se utiliza la cláusula INDEX.
READ TABLE ti_proovedores INTO wa_proveedores INDEX 1.
El agregar la cláusula BINARY SEARCH en la sentencia READ TABLE hace la búsqueda mas eficiente.
7. Modificado de una tabla.
wa_proveedores-dni = ‘326598741’.
MODIFY ti_proveedores FROM wa_proveedores INDEX 1.
Si se intenta modificar un registro de una tabla interna y el mismo no existe, SY-SUBRC será <> 0.
Para insertar un registro en una posición determinada de la tabla interna, se utiliza la sentencia INSERT.
wa_proveedores-nombre = ‘Ernesto’.
wa_proveedores-apellido = ‘Garcia’.
wa_proveedores-dni = ‘123456789’
INSERT wa_proveedores INTO ti_proveedores INDEX 2.
Para borrar el contenido de un registro de la tabla interna, se utiliza la sentencia DELETE.
DELETE ti_proveedores
WHERE dni = ‘123456789’.
Para borrar todo el contenido de una tabla interna, se utiliza la sentencia REFRESH.
REFRESH ti_proveedores.
REFRESH solo borra el contenido de la tabla interna, mas no la tabla en sí.
Para saber cuántos registros tiene una tabla interna, se utiliza la sentencia DESCRIBE_TABLE.
DATA: v_lineas TYPE i.
DESCRIBE TABLE ti_proveedores LINES v_lineas.
Instrucciones adicionales para el manejo de tablas internas:
- Para inicializar el área de trabajo: CLEAR wa_proveedores.
- Para liberar el espacio ocupado por una tabla interna en memoria: FREE ti_proveedores.
 
 
 
Favorito:
Está publicación ha sido agregada a sus favoritos por: Lorena Amoretti
Sobre el autor
Publicación académica de Oscar Perez, en su ámbito de estudios para la Carrera Consultor ABAP.
Oscar Perez
Profesión: Ingeniero de Sistemas. Consultor y Desarrollador en Peoplesoft - Canada - Legajo: FD38F
✒️Autor de: 105 Publicaciones Académicas
🎓Cursando Actualmente: Master en Programación ABAP Orientado a Objetos
🎓Egresado de los módulos:
Certificación Académica de Oscar Perez