![](/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/108.jpg)
Lección 1: Tablas internas.
1.-Que son las tablas internas?
*Para almacenar temporalmente los datos de las bases de datos para un procesamiento futuro.
*Para formatear datos para ser utilizados por otros servicios.
2.- Como se declara una table interna?
DATA: BEGIN OF <tabla> OCCURS <n> ,
<Def.Campo>,
END OF <table>.
De este modo definimos una tabla interna con n líneas en memoria mas una 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 guardan en memoria simultáneamente.
Por lo general en el parámetro OCCURS se especifica la cantidad 0, lo que permite trabajar con tablas de gran cantidad de registros.
Ejemplo de creación de tabla interna TI_PROVEEDORES
*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.
*Tabla interna de proveedores
DATA: BEGIN OF wa_proveeodres,
Nombre(30) TYPE c,
Apellido(30) TYPE c,
Dni(8) TYPE c,
END OF wa_proveedores.
3.-LLenado de una tabla interna
Para llenar un table interna:
-APPEND TO: Se añade un registro en la última posición:
* 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.
4.-Ordenamiento de una tabla interna
Para ordenar la tabla usamos la sentencia SORT
* Ordeno los proveedores de mayor a menor por dni SORT ti_proveedores BY dni DESCENDING ( ASCENDING ).
5.-Procesamiento de una table interna
Para recorrer la table usamos la sentencia LOOP END LOOP.
* Recorro los registros donde el nombre no es blanco LOOP AT ti_proveedores INTO wa_proveedores WHERE NOT nombre IS INITIAL. ENDLOOP.
6.-Lectura de una tabla interna
Se usa la sentencia READ TABLE
* Leo los datos de un registro particular READ TABLE ti_proveedores INTO wa_proveedores WITH KEY nombre = 'Ariel'. Si se desea leer los datos de una posición particular de la tabla, se usará la clausula INDEX * Leo el primer registro de la tabla READ TABLE ti_proveedores INTO wa_proveedores INDEX 1.El agregado de la clausula BINARY SEARCH en la sentencia READ TABLE hace que la búsqueda sea mas eficiente.
7.-Modificando una tabla interna
Se usa la sentencia MODIFY
* Modifico el primer registro de la tabla wa_proveedores-dni = '24987500'. MODIFY ti_proveedores FROM wa_proveedores INDEX 1.
Recordamos que si el registro no existe, no deja modificarlo, no deja borrarlo, etc. SY-SUBRC será distinto de 0.
Para insertar un registro en una posición determinada usamos la sentencia INSERT
* 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.
Para borrar el contenido de un registro, sentencia DELETE
* Borro un registro de la tabla DELETE ti_proveedores WHERE dni = '20857492'.
Para borrar todo el contenido de la tabla
* Inicializo la tabla interna REFRESH ti_proveedores.Para saber la cantidad de registros que tiene la tabla DESCRIBE TABLE LINES
* Averiguo la cantidad de entradas de una tabla DATA: v_lineas TYPE i. DESCRIBE TABLE ti_proveedores LINES v_lineas. 
 
 
Sobre el autor
Publicación académica de Juan Hernández, en su ámbito de estudios para la Carrera Consultor ABAP.
Juan Hernández
Profesión: Programador Informático - España - Legajo: XQ15K
✒️Autor de: 125 Publicaciones Académicas
🎓Egresado de los módulos:
Disponibilidad Laboral: PartTime