✒️ABAP Las tablas internas
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:
· Para estructurar y formatear datos que serán mostrados como salida del programa.
1.2 Declaración de Tablas Internas:
<Def.Campo>,
….
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.
· <n> NO limita el número máximo de registros
· 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.
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
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:
· 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 SINGLE
SELECT...INTO TABLE
SELECT...INTO CORRESPONDING FIELDS OF TABLE
SELECT MAX
SELECT COUNT
SELECT...FOR ALL ENTRIES
Ordenamiento de una Tabla Interna: se ordena mediante la sentencia SORT .
Ejemplos: SORT ti_proveedores BY dni DESCENDING.
SORT ti_proveedores BY dni ASCENDING.
Procesamiento de una Tabla Interna. Sentencia LOOP – ENDLOOP
Ejemplo:
LOOP AT ti_proveedores INTO wa_proveedores
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:
· INSERT variable INTO tabla INDEX 2 (inserta registros)
· REFRESH tabla (Borra el contenido de la tabla, no la tabla – inicialización)
Notas:
· 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.
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