✒️ABAP Las tablas internas
ABAP Las tablas internas
- TABLAS INTERNAS
Objeto que permite guardar en memoria grandes cantidades de registros de datos con la misma estructura, sin necesidad de acceder continuamente a la base de datos y poder realizar diversas operaciones con este conjunto de información.
Usos:
- Almacenar temporalmente los datos de las bases de datos para un procesamiento futuro.
- Estructurar y formatear datos que se mostrarán como salida del programa.
- Formatear datos para ser usados por otros servicios.
DATA: BEGIN OF <tabla> OCCURS <n>, <Def. campo>,... END OF <tabla>.
(Tabla interna con n líneas de memoria más una línea de cabecera o área de trabajo, esto limita la cantidad de registros que se guardarán simultaneamente, si se especifica 0 no hay límite)
Otra forma de declararla:
DATA: BEGIN OF <tabla>, <Def. campo>,... END OF <tabla>.
DATA: <tabla_interna> LIKE STANDARD TABLE OF <tabla> (<WITH HEADER LINE>)
Ej/ 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.
Con WITH HEADER LINE declaramos una tabla interna donde la cabecera o área de trabajo de la tabla interna es la misma tabla interna.
- LLENADO DE UNA TABLA INTERNA
APPEND TO: Añade un registr a la tabla interna en la última posición, con los valores que tengamos en la cabecera o área de trabajo.
Ej/ wa_proveedores-nombre = 'Ernesto'. wa_proveedores-apellidos = 'Gil'. wa_proveedores-dni = '12345678g'.
APPEND wa_proveedores TO ti_proveedores.
Para llenar la tabla interna con contenido de una base de datos lo haremos con la sentencia SELECT (lo veremos más adelante).
- ORDENAMIENTO DE UNA TABLA INTERNA
SORT: Ej/ SORT ti_proveedores BY dni DESCENDING. (Para orden ascendente usar ASCENDING).
- PROCESAMIENTO DE UNA TABLA INTERNA
LOOP - ENDLOOP: Para recorrer una tabla interna y procesar registro a registro.
Ej/ LOOP AT ti_proveedores INTO wa_proveedores WHERE NOT nombre IS INITIAL. ... ENDLOOP.
En caso de no existir ningún registro que cumpla la condición del WHERE, el SY-SUBRC será distinto de cero.
- LECTURA DE UNA TABLA INTERNA
READ TABLE: Para leer un registro concreto de una tabla interna sin necesidad de recorrerla.
Ej/ READ TABLE ti_proveedores INTO wa_proveedores WITH KEY nombre = 'Nacho'. (Si se encuentra el registro buscado, SY-SUBRC será igual a 0, en otro caso será distinto de 0).
Si deseamos leer los datos de una posición en particular de la tabla interna usaremos la clausula INDEX.
Ej/ READ TABLE ti_proveedores INTO wa_proveedores INDEX 1.
La clausula BINARY SEARCH hace que la sentencia READ TABLE sea mucho más eficiente. (Buscar en SAP con F1 sobre la instrucción)
- MODIFICACIÓN DE UNA TABLA INTERNA
MODIFY: Ej/ wa_proveedores-dni = '987654321z'. MODIFY ti_proveedores FROM wa_proveedores INDEX 1.
Si el registro que intentamos modificar de la tabla interna no existe la variable de sistema SY-SUBRC devolverá un valor distinto de cero.
- INSERCIÓN EN UNA TABLA INTERNA
INSERT: wa_proveedores-nombre = 'Ana'. wa_proveedores-apellidos = 'Ruiz'. wa_proveedores-dni = '4587961254c'. INSERT wa_proveedores INTO ti_proveedores INDEX 2.
- BORRADO EN UNA TABLA INTERNA
DELETE: DELETE ti_proveedores WHERE dni = '4587961254c'.
- BORRADO COMPLETO O INICIALIZACIÓN DE UNA TABLA INTERNA
REFRESH: REFRESH ti_proveedores. (Borra sólo el contenido de la tabla interna no la tabla en sí).
- OBTENER DATOS DE LA TABLA INTERNA
DESCRIBE TABLE: DATA vLineas TYPE i. DESCRIBE TABLE ti_proveedores LINES vLineas.
Nos devuelve el número de líneas de la tabla interna ti_proveedores y lo mete en la variable vLineas.
- LIBERAR EL ESPACIO EN MEMORIA DE UNA TABLA INTERNA
FREE: FREE ti_proveedores.
- INICIALIZAR LA CABECERA DE LA TABLA INTERNA
CLEAR: CLEAR wa_proveedores.
 
 
 
Sobre el autor
Publicación académica de Ignacio Mart?n Bolumar, en su ámbito de estudios para la Carrera Consultor ABAP.
Ignacio Mart?n Bolumar
Profesión: Ingeniero Inform?tico - Espa?a - Legajo: ZL84Z
✒️Autor de: 94 Publicaciones Académicas
🎓Egresado de los módulos:
Certificación Académica de Ignacio Mart?n