![](/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/66.jpg)
Si se desea solo modificar un campo de la estructura existen 2 posibilidades: la primera es asignar al resto de los campos de la estructura los mismos valores que posee y al campo que deseamos modificar lo pisamos con el nuevo valor por lo que ejecutariamos la sentencia MODIFY tal como vimos en la lección.
La otra posibilidad es utilizar la adición TRANSPORTING de la siguiente forma:
MODIFY TI_USUARIOS INDEX idx FROM WA_USUARIOS
TRANSPORTING DNI.
Que son tablas internas
-Es un objeto de datos que permite guardar en memoria grandes cantidades de registros de datos con la misma estructura. La cantidad de registros que puede almacenar una tabla interna esta relacionado con los limites especificados en la instalacion del sistema.
Uso Tipico:
Para almacenar temporalmente los datos de la BD para un procesamiento futuro
Para estructurar y formatear datos que se mostraran como salida de programa
Para formatear datos para ser utillizados por otros servicios.
2) Como declara una tabla interna.
DATA: BEGIN OF <tabla> OCCURS <n>,
<def Campo>,
..................
END OF <tabla>.
La cantidad de linea que se especifica en OCCURS, no limita la cantidad de registros que guardara la tabla , si no la cantidad de registros que se guardaran en memoria simultaneamente
Por lo generar , OCCURS se epecifica 0 , lo cual permitira trabajar con grandes cantidades de registros.
Declaramos una Tabla Interna
a) Primera forma
DATA:BEGIN OF ti_proveedores OCCURS 0,
nombre(30) TYPE c,
apellido(30) TYPE c,
dni(8) TYPE c,
END OF ti_proveedores.
b) Segunda forma
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.
Especificar tablas internas sin especificar un header.
DATA: ti_vuelos LIKE STANDARD TABLE OF SFLIGTH WITH HEADER LINE. " Estamos declarando una tabla interna en donde la cabecera o area de trabajo de la tabla es la misma ti
3) Llenado de una tabla interna.
APPEND TO : Se añade un regsitro a la tabla interna en la ultima posicion.
CLEAR wa_proveedores.
wa_proveedores-nombre = 'Prueba'.
wa_proveedores-apellifo = 'Prueba'.
wa_proveedores-dni = '12345678'.
APPEND wa_proveedores TO ti_proveedores.
CLEAR wa_proveedores.
wa_proveedores-nombre = 'Prueba2'.
wa_proveedores-apellifo = 'Prueba2'.
wa_proveedores-dni = '12345679'.
APPEND wa_proveedores TO ti_proveedores.
Otra forma: Es realizando la sentencia select de otra tabla del sistema.
4) Ordenamiento.
Utilizamos la sentencia SORT
SORT ti_proveedores BY dni ASCENDING. "DESCENDING
5) Procesamiento de una tabla interna.
Utilizaremos la sentencia LOOP-ENDLOOP.
LOOP AT ti_proveedores INTO wa_proveedores
WHERE NOT nombre IS INITIAL.
ENDLOOP.
Si no existe algun registro que cumpla con la clausula especificada en el WHERE , el SY-SUBRC sera diferente de 0
ESTRUCTURA - contiene las variables.
TABLA INTERNA - Almacena ESTRUCTURAS
Si queremos declarar una estrutura del mismo tipo de un tabla interna. utilizamos la sentencia "LIKE LINE OF"
DATA: wa_proveedores LIKE LINE OF ti_proveedores.
6)Lectura de una tabla interna
Para leer un registro concreto de un tabla interna utilizamos READ TABLE
READ TABLE ti_proveedores INTO wa_proveedores
WITH KEY nombre= 'Ariel'
Si se encuentra el registro SY-SUBRC sera 0.
Si se desea leer los datos en una posicion especifica utilizamos INDEX
READ TABLA ti_proveedores INTO wa_proveedores INDEX 1.
El agregado del BINARY SEARCH en la sentencia READ TABLE hace que la busqueda se amplimente mas eificiente. Si utilizamos esta sentencia el campo debe de estar ordenado por la KEY que estas buscando
READ TABLE xtab WITH KEY
n_var = 'Prueba' BINARY SEARCH.
7) Modificacion de una tabla interna
Utilizamos la sentencia MODIFY
wa_proveedores-dni ='12345677'.
MODIFY ti_proveedores FROM wa_proveedores INDEX 1.
Si intentamos modificar un registro de una tabla interna y el mismo no existe entonces el SY-SUBRC sera distinto de 0
Para insertar un registro en una posicion especifica utilizamos la sentencia INSERT.
wa_proveedores-nombre = 'Prueba'.
wa_proveedores-apellifo = 'Prueba'.
wa_proveedores-dni = '12345678'.
INSERT wa_proveedores INTO ti_proveedores INDEX 2.
Para borrar el contenido de una tabla interna utilizamos DELETE.
DELETE ti_proveedores WHERE dni = '12345677'.
Para borar todo el contenido de unta tabla interna, utilizamos REFRESH
REFRESH ti_proveedores.
Para saber la cantidad de lineas que tiene una tabla interna. Utilizamos DESCRIBE TABLE
DATA v_lineas TYPE i.
DESCRIBE TABLE ti_proveedores LINES v_lineas.
 
 
 
Sobre el autor
Publicación académica de Fabian Samir Geldres Del Carpio, en su ámbito de estudios para la Carrera Consultor ABAP.
Fabian Samir Geldres Del Carpio
Profesión: Computación E Informatica - Peru - Legajo: XT66M
✒️Autor de: 51 Publicaciones Académicas
🎓Cursando Actualmente: Consultor en SAP PP
🎓Egresado del módulo:
Certificación Académica de Fabian Geldres