Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Qu son?
Cuando desde un programa realizamos una consulta en Base de Datos a travs de sentencias SQL,
solemos requerir que los resultados se guarden en alguna estructura de nuestro programa, para su
posterior tratamiento.
Estas son las tablas internas.
Las tablas internas son, como su nombre lo indica, tablas; pero se diferencian de las tablas del
Diccionario de Datos en que stas solo estn disponibles DENTRO de un programa.
Son objetos cuya funcin es el tratamiento de varios registros exclusivamente durante la ejecucin
de un programa.
<estructura> es una Estructura de Datos del programa que ser el esqueleto de la tabla interna
(ver tema 2); luego se declara la tabla interna <itab> del tipo tabla cuya estructura ser
<estructura> .
Yo suelo usar ms esta segunda opcin.
Con la primera instruccin, la cabecera tambin se llamar <itab>, por lo que tendremos la
sensacin de que leemos la tabla interna directamente.
Ejemplo:
LOOP AT <itab>.
WRITE: <itab>-<campo1>.
ENDLOOP.
Con la segunda instruccin, cada registro que se lea de <itab> deber tratarse desde <line>, que es
la lnea de cabecera de la tabla interna.
Ejemplo:
LOOP AT <itab> INTO <line>.
WRITE: <line>-<campo1>.
ENDLOOP.
En el primer LOOP; la lnea de cabecera no es que desaparece, de hecho existe, solo que lleva el
mismo nombre que la tabla interna por lo que se omite la sentencia INTO y se trata directamente
con <itab>.
Work Area
Si queremos disponer de una variable que nos sirva para manipular los datos de una <itab>, con su
misma estructura, estn los que se conocen como work area o rea de trabajo.
Son estructuras con la misma forma que un registro de una tabla interna, similar a sus lneas de
cabecera, y se declaran de la siguiente manera:
DATA: <wa> TYPE <itab>.
Esto nos crear un work area llamado <wa> del mismo tipo que la lnea de cabecera <itab>.
READ: Lee un registro de la tabla interna y lo guarda en su lnea de cabecera, el registro que leer
lo determinar la condicin que le indiquemos.
Ejemplos:
READ TABLE <itab> WITH KEY <condicion> (con cabecera).
READ TABLE <itab> INTO <line> WITH KEY <condicion> (sin cabecera).
READ TABLE <itab> INDEX <n>. (Esta instruccin lee el registro ubicado en la lnea <n>).
COLLECT: Aade o suma la lnea de cabecera. Sumar los campos tipo P, F, I (tema 2), si existe una
lnea en la tabla con campos idnticos (tipo C) a los del work area. El problema es que se trata de
una instruccin que consume mucho en memoria.
En cada iteracin, la instruccin coloca la lnea de la tabla que se est procesando en la lnea de
cabecera.
Con la clusula WHERE podemos filtrar los registros que leeremos en el LOOP, tal cual como lo
haramos en una consulta SQL; si no existe ningn registro que cumpla con la condicin de la
clusula WHERE, la variable SY-SUBRC ser diferente de 0 y no habrn iteraciones en el LOOP.
Mientras haya iteraciones dentro de un LOOP, con la variable del sistema SY-TABIX podremos
saber cul es el ndice del registro que se procesa en un momento dado.
Te saluda,
Richard Rey
http://aprendeabap.com