![](/cvo_files/imgs_sap_abap/logos/logo_cvo_academy_it.png)
✒️ABAP Las tablas internas
ABAP Las tablas internas
![ABAP Las tablas internas ABAP Las tablas internas](https://www.cvosoft.com/cvo_files/imgs_sap_abap/og-images/445.jpg)
Tablas internas
Permite guardar en memoria grandes cantidades de registros de datos con una misma estructura, se puede especificar la cantidad maxima pero esto esta relacionado a los limites especificados en la instalacion de SAP.
Una tabla interna existe unicamente en memoria cuando se ejecuta el programa. Algunos de sus usos tipicos son:
- Almacenar temporalmente datos pertenecientes a las tablas de bases de datos para procesamientos futuros.
- Estructurar y formatear datos que se mostraran como salida del programa en forma de listado o archivo que se genera en el servidor o localmente.
- Formatear datos para ser utilizados por otros servicios con determinado formato.
Declaracion de una tabla interna
Vamos a necesitar contar con una estructura (work area o cabecera de la ti) la cual tendra el mismo formato que la tabla interna y nos permitira leer el contenido de un registro, recorrer cada registro, agregar registros y modificar el contenido de los registros de la tabla interna (una estructura solo puede almacenar 1 registro de datos).
Existen varias formas de declarar una tabla interna en ABAP:
- La forma mas eficiente es utilizando TYPES para declarar primero un tipo de datos que sera TY_PROVEEDORES, luego se declara la TI_PROVEEDORES de ese mismo tipo utilizando TYPE STANDARD TABLE OF. Por ultimo se declara la estructura WA_PROVEEDORES que permitira trabajar con la tabla y se utiliza LIKE LINE OF:
TYPES: BEGIN OF ty_proveedores, (se declara el TYPES con los campos)
dni(8) TYPE c, nombre(30) TYPE c, apellido(30) TYPE c,
END OF ty_proveedores.
DATA: ti_proveedores TYPE STANDARD TABLE OF ty_proveedores, wa_proveedores LIKE LINE OF ti_proveedores. (se declara la tabla interna y la estructura)
- La segunda forma para declarar la tabla interna TI_PROVEEDORES es utilizando OCCURS 0 (con esta sentencia se especifican la cantidad de registros en memoria de una ti que se guardaran simultaneamente) y para WA_PROVEEDORES es con LIKE LINE OF igual que antes.
DATA: BEGIN OF ti_proveedores OCCURS 0, (se declara la tabla interna)
dni(8) TYPE c, nombre(30) TYPE c, apellido(30) TYPE c,
END OF ti_proveedores.
DATA: wa_proveedores LIKE LINE OF ti_proveedores. (se declara la esturctura)
- Una tercera forma de declarar un ti consiste en primero declarar la estructura WA_PROVEEDORES y luego la TI_PROVEEDORES del mismo tipo que la estructura.
DATA: BEGIN OF wa_proveedores OCCURS 0, (se declara la esturctura)
dni(8) TYPE c, nombre(30) TYPE c, apellido(30) TYPE c,
END OF wa_proveedores.
DATA: ti_proveedores LIKE LINE OF wa_proveedores. (se declara la tabla interna)
- Una cuarta forma es declarar TI_PROVEEDORES del mismo tipo que una tabla de base de datos existente en el diccionario de datos ABAP, ambas tendran la misma estructura y campos.
DATA: ti_proveedores LIKE TABLE OF lfal (se declara la tabla interna del tipo lfal que es una tabla existente)
wa_proveedores LIKE LINE OF ti_proveedores. (se declara la estructura)
- Existe una forma de declarar una estructura de una ti usando la tabla interna como cabecera:
- DATA: ti_proveedores LIKE TABLE OF lfal WITH HEADER LINE.
Ingresar datos en tablas
Hay varias formas, la primera consiste en realizar un SELECT a una tabla de data base de SAP y almacenar el contenido de ella en una tabla interna.
Otra consiste en ingresar registros a traves de la sentencia INSERT.
Otra consiste en añadir registro a registro a traves de APPEND TO.
- con APPEND TO se agregan al final de la ti, si la tabla esta vacia se agrega el primer registro, y luego el segundo, etc. Un ejemplo:
CLEAR wa_proveedores.
wa_proveedores-nombre = 'Julian'.
APPEND wa_proveedores TO ti_proveedores.
Primero se limpia la estructura con CLEAR, luego completamos los campos y por ultimo se ejecuta APPEND TO. Luego se abre el modo debugging y se podra ver el contenido de la tabla.
Ordenamiento de una tabla interna
Para ordenar una ti se utiliza SORT (para ordenar segun el campo elegido de forma ascendente o descendiente) ej:
SORT ti_proveedores BY dni DESCENDING/ASCENDING.
Recorrer una tabla interna
- Para recorrer una ti se utiliza LOOP-ENDLOOP, para la tabla interna se va a necesitar la estructura. ej:
LOOP AT ti_proveedores INTO wa_proveedores.
WRITE: / wa_proveedores-dni.
ENDLOOP.
- Se pueden restringir los campos con condiciones usando WHERE:
LOOP AT ti_proveedores INTO wa_proveedores WHERE NOT nombre IS INITIAL AND/OR dni NE '25985921' .
WRITE: / wa_proveedores-dni.
ENDLOOP.
Lectura de una tabla interna
- Para leer un registro en particular sin necesidad de recorrer la tabla (ya que puede tardar mucho) se usa READ TABLE INTO WITH KEY.
READ TABLE ti_proveedores INTO wa_proveedores WITH KEY nombre = 'Ariel' (si encuentra registro el sy-subrc sera distinto de 0)
- Para buscar de forma mas eficiente primero se ordena se usa SORT BINARY SEARCH que primero divide la tabla en dos y luego busca.
SORT ti_proveedores ASCENDING BY nombre.
READ TABLE ti_proveedores INTO wa_proveedores WITH KEY nombre = 'Ariel' BINARY SEARCH.
- Por ultimo si queremos leer un registro en particular usamos INDEX y por el numero del registro.
READ TABLE ti_proveedores INTO wa_proveedores INDEX 5.
Modificacion de una tabla interna
- Para modificar el contenido de un registro usamos MODIFY
wa_proveedores-dni = '553584984'
MODIFY ti_proveedores FROM wa_proveedores INDEX 1. (modificamos el primer registro de la tabla interna)
- Para insertar un registro en una posicion determinada con INSERT
wa_proveedor-nombre = 'Marcelo'.
wa_proveedor-dni = '556754654'
INSERT ti_proveedores INTO wa_proveedores INDEX 2.
- Para eliminar un registro utilizamos DELETE
DELETE ti_proveedores WHERE dni = '211354695'.
- Para borrar todo el contenido de una tabla usamos REFRESH
REFRESH ti_proveedores.
- Para saber cuantos registros tiene una tabla usamos DESCRIBE TABLE, vamos a necesitar una variable de tipo i que contendra la cantidad de registros
DESCRIBE TABLE ti_proveedores LINES v_lineas.
 
 
 
Sobre el autor
Publicación académica de Luciano Martinez, en su ámbito de estudios para la Carrera Consultor ABAP.
Luciano Martinez
Profesión: Consultor Abap - Argentina - Legajo: LR86R
✒️Autor de: 66 Publicaciones Académicas
🎓Egresado del módulo:
Disponibilidad Laboral: FullTime
Presentación:
Me capacito para desempeñar el rol de un consultor abap, además soy sql developer jr, como ambos lenguajes (sql y abap) se relacionan, hace que mi perfil sea más completo y se complemente.
Certificación Académica de Luciano Martinez