![](/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/495.jpg)
TABLAS INTERNAS
1. ¿Que son Tablas Internas?
Es un grupo de datos con la misma estructura que permite guardar en memoria grandes cantidades de registros de datos. La cantidad máxima de registros depende de los límites especificados en la instalación del sistema.
2. ¿Cómo se declara una Tabla Interna?
- n: registros en memoria en forma simultánea (no es el tamaño de tabla!), más una línea de cabecera ó "área de trabajo".
Por lo general, se "n" vale 0 (cero) lo que permite trabajar con tablas de gran cantidad de registros.
DATA: BEGIN OF <tabla> OCCURS <n>
<def. campo>
....
END OF <tabla>.
- DATA: BEGIN OF ti_proveedores OCCURS 0,
nombre(30) TYPE c,
apellido(30) TYPE c,
dni(8) TYPE c,
END OF ti_proveedores.
DATA: wa_proveedores LIKE LINE OF ti_proveedores.
- 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.
- DATA: ti_vuelos LIKE STANDARD TABLE OFsflight WITH HEADER LINE. " Area de trabajo es la misma tabla interna.
3. Llenado de una tabla Interna:
- CLEAR wa_proveedores.
wa_proveedores-nombre = 'Ernesto'.
wa_proveedores-apellido = 'Villanueva'.
wa_proveedores-dni = '24987564'.
APPEND wa_proveedores TO ti_proveedores. " APPEND usado con STANDARD TABLE.?
- También se puede llenar una Tabla Interna con la sentencia SELECT.
4. Ordenamiento de una Tabla interna:
- SORT ti_proveedores BY apellido ASCENDING, dni DESCENDING.
5. Procesamiento de una Tabla interna:
- LOOP AT ti_proveedores INTO wa_proveedores WHERE NOT nombre IS INITIAL.
<sentencias>.
ENDLOOP.
- Si existe registro que cumpla la condición, el SY-SUBRS vale diferente de cero.
6. Lectura de un registro de una Tabla interna:
- READ TABLE ti_proveedores INTO wa_proveedores WITH KEY nombre = 'Ariel'.
Si existe, SY-SUBRC vale cero, pero si no existe SY-SUBRC vale diferente de cero.
- READ TABLE ti_proveedores INTO wa_proveedores INDEX 1. " leerá registro nro 1.
- READ TABLE ti_proveedores INTO wa_proveedores WITH KEY nombre = 'Ariel' BINARY SEARCH. " Búsqueda más eficiente.
7. Modificando una Tabla interna:
- MODIFY ti_proveedores FROM wa_proveedores INDEX 1. " Si tuvo éxito SY-SUBRC=0, sino SY-SUBRC<>0.
- wa_proveedores-nombre = 'María'.
wa_proveedores-apellido = 'Rivera'.
wa_proveedores-dni = '59820800'.
INSERT wa_proveedores INTO ti_proveedores INDEX 2. " inserta en registro nro 2. INSERT usado con SORTED TABLES.?
- DELETE ti_proveedores WHERE dni = 59820800'.
- REFRESH ti_proveedores. " Elimina todos los registros de la tabla interna.
- DATA: v_lineas TYPE i.
DESCRIBE TABLE ti_proveedores LINES v_lineas. " devuelve cantidad de registros de tabla interna.
- FREE ti_proveedores. " Libera espacio en memoria ocupado por tabla interna, pero deja cabecera!. ¡obsoleto!
CONSULTAS
1. Siendo que todas las sentencias que hemos visto en esta lección (DELETE / MODIFY / INSERT / APPEND , etc) trabajan con Tablas Internas (en memoria), es correcto si afirmo que "no habrá problemas de concurrencia con otro usuario en las Tablas Internas"? Preguntado de otra forma: ¿cada usuario tiene su "propia" Tabla Interna?
-Si, las tablas internas trabajan en la sesión de memoria de cada programa en ejecución por lo que hasta que los datos de la tablas internas no impacten en las tablas transparentes o tablas bases de datos del diccionario entonces no habrá competencia con los demas usuarios.
2. ¿Antes de terminar mi programa debo liberar memoria de cada tabla interna (con FREE), o éstas se eliminan automáticamente al terminar el programa? ¿Cuándo es recomendable usar FREE?
-No es necesario liberar la memoria cuando utilizamos tablas internas, cuando se termina la sesion se borra la memoria y se pierden definitivamente los datos almacenados en las tablas internas.
3. En esta lección se menciona que existen hasta 3 tipos de declaración de Tabla Interna.
A la fecha (Setiembre 2015) ¿Los 3 tipos están vigentes, o hay alguno(s) obsoleto(s)?
¿En qué casos es más recomendable usar uno u otro tipo?
-Si bien los tres tipos estan vigentes algunos de ellos no estan aconsejados por lo que la mejor opción es primero declarar un "Tipo" que contendrá la estructura de la tabla interna y luego utilizar ese "tipo" para la declaración de la tabla interna. Por ejemplo:
TYPES: BEGIN OF ty_instalaciones,
anlage(10) TYPE c,
operand(10) TYPE c,
ab(8) TYPE c,
bis(8) TYPE c,
wert1(20) TYPE c,
betrag(18) TYPE c, "Importe
belnr(12) TYPE c, "Número de doc de cálculo
tarifart(8) TYPE c, "Clase Tarifa
kondigr(10) TYPE c, "Grupo Valor Concreto tarifa
auszdat(8) TYPE c, "Fecha de baja
einzdat(8) TYPE c, "Fecha de alta
detalle(150) TYPE c, "Detalle observaciones
END OF ty_instalaciones.
DATA: ti_instalaciones TYPE STANDARD TABLE OF ty_instalaciones,
wa_instalaciones LIKE LINE OF ti_instalaciones.
 
 
 
Sobre el autor
Publicación académica de Victor Wong, en su ámbito de estudios para la Carrera Consultor ABAP.
Victor Wong
Profesión: Técnico en Computación E Informática - Peru - Legajo: JK17P
✒️Autor de: 85 Publicaciones Académicas
🎓Egresado de los módulos:
- Carrera Consultor ABAP Nivel Avanzado
- Carrera Consultor ABAP Nivel Inicial
- Carrera Consultor ABAP Nivel Inicial