✒️ABAP / Las tablas internas Por Gustavo Bolivar
ABAP Las tablas internas

LECCIÓN 1 – Tablas Internas:
1.1 Conceptos
Es un objeto de datos que permite guardar EN MEMORIA grandes cantidades de registros de datos con la misma estructura de la BD.
La cantidad de registros está relacionada con los límites específicos en la instalación del sistema.
Uso típico:
· Almacenar temporalmente los datos de las BD para procesarlos después.
· Para estructurar y formatear datos que serán mostrados como salida del programa.
· Formatear datos para ser utilizados por otros servicios.
1.2 Declaración de Tablas Internas:
DATA: BEGIN OF <tabla> OCCURS<n>,
<Def.Campo>,
….
END OF <tabla>.
Aquí se define una Tabla Interna con n líneas mas una de cabecera o área de trabajo. La cantidad de líneas que se especifican en OCCURS no limitan el tamaño de la tabla sino la cantidad de registros que se guardarán en memoria simultáneamente.
· OCCURS se utiliza para especificar la cantidad de registro en memoria de una tabla interna.
· <n> NO limita el número máximo de registros
· OCCURS 0 el sistema asigna 8Kb de memoria a la vez.
· Es recomendable no utilizar OCCURS 0 si se espera almacenar menos de 8 KB en una tabla interna.
Ejemplo 1: se crea la tabla ti_proveedores.
DATA: BEGIN OF ti_proveedores OCCURS 0,
nombre(30) TYPE c,
apellidos(30) TYPE c,
dni(8) TYPE c,
END OF ti_proveedores.
Ejemplo 2: se crea la tabla interna en base a la tabla ti_proveedores.
DATA: tabla_interna LIKE STANDARD TABLE OF ti_proveedores
Data: TABLA like standard table of TABLA_EJEMPLO with header_line
aquí la cabecera o área interna de trabajo es la misma tabla interna
Para crear una estructura de trabajo de una tabla interna se añade la sentencia LIKE LINE OF, de esta forma se crea una variable con la misma estructura que los registros de la tabla ejemplo.
DATA: wa_pasajeros LIKE LINE OF ti_pasajeros.
1.3 Llenado de una Tabla Interna:
se realiza mediante las sentencias:
· APPEND ..TO : Añade un registro al final de la tabla.
· SELECT: se llena con el contenido de una BD
APPEND TO: Es un objeto de ABAP que se crea para agregar datos y configuraciones adicionales a las tablas y estructuras estándar de SAP. Añade un registro a la tabla interna en la última posición.
Select sentencia de ABAP que se utiliza para acceder a las bases de datos de SAP. Podremos acceder a los registros almacenados en todas las tablas que componen a la base de datos. Existen muchas variantes de ejecución de la sentencia SELECT, cada una de ellas la utilizaremos en base a la necesidad puntual de información que nos sea requerida.
Algunas de las opciones más utilizadas son:
SELECT *
SELECT SINGLE
SELECT...INTO TABLE
SELECT...INTO CORRESPONDING FIELDS OF TABLE
SELECT MAX
SELECT COUNT
SELECT...FOR ALL ENTRIES
1.4 Ordenamiento de una Tabla Interna: se ordena mediante la sentencia SORT .
Ejemplos: SORT ti_proveedores BY dni DESCENDING.
SORT ti_proveedores BY dni ASCENDING.
1.5 Procesamiento de una Tabla Interna. Sentencia LOOP – ENDLOOP
Ejemplo:
LOOP AT ti_proveedores INTO wa_proveedores
WHERE NOT nombre IS INITIAL.
ENDLOOP.
1.6. Lectura de una Tabla Interna: Sentencia READ TABLE
READ TABLE tabla INTO variable WITH KEY campo=valor (se lee un solo registro)
READ TABLE tabla INTO variable INDEX 1 (se lee el registro número uno de la tabla)
1.7. Modificación de una Tabla Interna:
· MODIFY tabla FROM variable INDEX 1 (modifica registros)
· INSERT variable INTO tabla INDEX 2 (inserta registros)
· DELETE tabla WHERE campo = x (borra un registro)
· REFRESH tabla (Borra el contenido de la tabla, no la tabla – inicialización)
· DESCRIBE TABLE tabla LINES variable (indica el número de líneas de una tabla, variable contiene el valor o número de líneas).
Notas:
· FREE tabla libera el espacio de memoria ocupado por una Tabla Interna.
· CLEAR inicializa el área de trabajo o cabecera de la Tabla Interna
Código Ejemplos de la Lección:
*&---------------------------------------------------------------------*
*& Report Z_PRUEBA_ABAP_3_2
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT z_prueba_abap_3_2.
* Tabla interna de proveedores
*DATA: BEGIN OF ti_proveedores OCCURS 0,
* nombre(30) TYPE c,
* apellido(30) TYPE c,
* dni(8) TYPE c,
* END OF ti_proveedores.
* Crear Tabla interna de proveedores
DATA: BEGIN OF wa_proveedores,
nombre(30) TYPE c,
apellido(30) TYPE c,
dni(8) TYPE c,
END OF wa_proveedores.
*Estructura de Datos de la tabla interna
DATA: ti_proveedores LIKE STANDARD TABLE OF wa_proveedores.
*---------------------------------------------------------------------*
START-OF-SELECTION.
*---------------------------------------------------------------------*
* Añado un registro a la tabla interna de proveedores
CLEAR wa_proveedores.
wa_proveedores-nombre = 'Ernesto'.
wa_proveedores-apellido = 'Villanueva'.
wa_proveedores-dni = '24987564'.
APPEND wa_proveedores TO ti_proveedores.
* Añado otro registro a la tabla interna de proveedores
CLEAR wa_proveedores.
wa_proveedores-nombre = 'Ariel'.
wa_proveedores-apellido = 'Gallardo'.
wa_proveedores-dni = '25986584'.
APPEND wa_proveedores TO ti_proveedores.
* Ordeno los proveedores de mayor a menor por dni
SORT ti_proveedores BY dni DESCENDING.
* Recorro los registros donde el nombre no es blanco
LOOP AT ti_proveedores INTO wa_proveedores
WHERE NOT nombre IS INITIAL.
ENDLOOP.
* Leo los datos de un registro particular
READ TABLE ti_proveedores INTO wa_proveedores
WITH KEY nombre = 'Ariel'.
* Leo el primer registro de la tabla
READ TABLE ti_proveedores INTO wa_proveedores INDEX 1.
* Modifico el primer registro de la tabla
wa_proveedores-dni = '24987500'.
MODIFY ti_proveedores FROM wa_proveedores INDEX 1.
* Inserto un registro en la segunda posicion de la tabla
wa_proveedores-nombre = 'Marcelo'.
wa_proveedores-apellido = 'Rivarola'.
wa_proveedores-dni = '20857492'.
INSERT wa_proveedores INTO ti_proveedores INDEX 2.
* Borro un registro de la tabla
DELETE ti_proveedores WHERE dni = '20857492'.
* Inicializo la tabla interna
REFRESH ti_proveedores.
* Averiguo la cantidad de entradas de una tabla
DATA: v_lineas TYPE i.
DESCRIBE TABLE ti_proveedores LINES v_lineas.
Código Ejercicios de la Lección:
Ejercicio de Práctica: Crear el programa ABAP ZABAP_TABLA_INTERNA_#####, en el cual declararemos la tabla interna
TI_PASAJEROS con los siguientes campos:
Nombre campo Tipo de datos Descripción
PASAPORTE CHAR 10 posiciones Pasaporte
NOMBRE_APE CHAR 30 posiciones Nombre y Apellido
FECHA_NAC DATS 8 posiciones Fecha de Nacimiento
Luego agregamos tres registros con datos a elección a la tabla interna TI_PASAJEROS. Finalmente recorremos la tabla TI_PASAJEROS e imprimimos sus datos por pa
Solución:
*&---------------------------------------------------------------------*
*& Report ZABAP_TABLA_INTERNA
*&---------------------------------------------------------------------*
REPORT zabap_tabla_interna.
* Tabla interna de pasajeros
DATA: BEGIN OF ti_pasajeros OCCURS 0,
pasaporte(10) TYPE c,
nombre_ape(30) TYPE c,
fecha_nac TYPE dats,
END OF ti_pasajeros.
* Estructura de pasajeros
DATA: wa_pasajeros LIKE LINE OF ti_pasajeros.
*----------------------------------------------------------------------*
START-OF-SELECTION.
*----------------------------------------------------------------------*
CLEAR wa_pasajeros. “Inicializacion work space
wa_pasajeros-pasaporte = '27897654'.
wa_pasajeros-nombre_ape = 'Jaime Perez'.
wa_pasajeros-fecha_nac = '19790312'.
APPEND wa_pasajeros TO ti_pasajeros. “Inserto el 1er registro al final de la tabla
CLEAR wa_pasajeros.
wa_pasajeros-pasaporte = '21345234'.
wa_pasajeros-nombre_ape = 'Victor Gomez'.
wa_pasajeros-fecha_nac = '19820628'.
APPEND wa_pasajeros TO ti_pasajeros. “Inserto el 2do registro al final de la tabla
CLEAR wa_pasajeros.
wa_pasajeros-pasaporte = '27897654'.
wa_pasajeros-nombre_ape = 'Jaime Perez'.
wa_pasajeros-fecha_nac = '19850611'.
APPEND wa_pasajeros TO ti_pasajeros. “Inserto el 3er registro al final de la tabla
“imprimo los encabezados
WRITE:/1(20) 'Pasaporte',
21(30) 'Nombre y Apellido',
51(20) 'Fecha de Nacimiento'.
“Recorro los registros de la Tabla Interna
LOOP AT ti_pasajeros INTO wa_pasajeros.
“Imprimo en pantalla los campos
WRITE:/1(20) wa_pasajeros-pasaporte,
21(30) wa_pasajeros-nombre_ape,
51(20) wa_pasajeros-fecha_nac.
ENDLOOP.
 
 
 
Sobre el autor
Publicación académica de Gustavo Bolivar, en su ámbito de estudios para la Carrera Consultor ABAP Nivel Inicial.
Gustavo Bolivar
Profesión: Ing Sistemas - Chile - Legajo: EU47Z
✒️Autor de: 45 Publicaciones Académicas
🎓Egresado del módulo:
Presentación:
Enfocado en programación sap abap.
Certificación Académica de Gustavo Bolivar






Disponibilidad Laboral: FullTime


















