ESTRUCTURAS EN ABAP
• Las estructuras son variables complejas compuestas de
componentes que a su vez pueden ser elementales o complejos.
• La estructura es una unidad lógica, con un nombre que la
identifica, y con la que se puede operar como si fuera una entidad
única.
• Sin embargo también podemos acceder a cada uno de los
componentes de la estructura de forma individualizada.
• Las tablas son un tipo particular dentro de las estructuras con
algunas características que las hacen diferentes al resto.
• Una estructura, a la que llamaremos casa, se crea con la
instrucción TYPES. Por ejemplo
TYPES: BEGIN OF casa,
calle TYPE string,
numero TYPE n,
END OF casa.
Una variable del tipo casa se declara con la instrucción DATA. Por
ejemplo,
DATA mi_casa TYPE casa.
• También podemos declarar una variable de tipo estructura llamada
casa sin haber antes definido el tipo de estructura. Por ejemplo,
DATA: BEGIN OF casa,
calle TYPE string,
numero TYPE n,
END OF casa.
• Los distintos componentes de una estructura están encadenados a
través de punteros, y el orden en que están definidos en la
declaración de tipos es el mismo en el que se va a almacenar la
información en la memoria del sistema.
• Una estructura es plana (flat) si contiene sólo variables elementales
del tipo i, p, f, c, n, d, t, x.
• Una estructura el profunda (deep) si contiene entre sus
componentes variables de tipo string (un string es realmente un
puntero al primer carácter de una cadena), punteros o tablas. Una
variable del tipo tabla es realmente un puntero a la primera
dirección de memoria de la tabla física.
• Componentes: Para acceder al contenido de un componente de la
estructura debemos escribir el nombre de la estructura y del
componente separados po un guión, por ejemplo,
casa-calle
Estructuras anidadas:
• Una estructura puede tener otras estructuras entre sus
componentes.
• Varias estructuras anidadas componen una estructura plana si
todos sus componentes son variables elementales.
• Si alguno de sus componentes es del tipo string, puntero o tabla,
entonces la estructura será profunda. Veamos un ejemplo de
estructura anidada
TYPES: BEGIN OF población,
cod_postal TYPE n,
ciudad(25) TYPE c,
END OF población.
TYPES: BEGIN OF domicilio,
calle TYPE string,
numero TYPE n,
ciudad TYPE población,
END OF domicilio.
• En este caso el componente domicilio-ciudad es una estructura
dentro de otra estructura. Veamos un ejemplo gráfico
• Se pueden anidar hasta un máximo de 9 estructuras
• Para declarar una variable del tipo domicilio lo hacemos igual que
para cualquier otra estructura
DATA mi_domicilio TYPE domicilio.
• Para acceder al contenido de un componente dentro de una
estructura anidada tenemos que escribir el nombre de las dos
estructuras y del componente separados por un guión, por ejemplo
domicilio-ciudad-cod_postal
• También podemos declarar una variable del tipo domicilio
especificando todos sus componentes en la declaración de
variables. Por ejemplo,
DATA: BEGIN OF mi_domicilio,
calle TYPE string,
numero TYPE n,
BEGIN OF mi_población,
cod_postal TYPE n,
ciudad(25) TYPE c,
END OF mi_población.
END OF mi_domicilio.
• Para asignar valores a cada uno de los componentes de la
estructura lo podemos hacer a través del signo =. Por ejemplo,
mi_domicilio-calle = 'Calle Mayor'.
mi_domicilio-numero = '125'
mi_domicilio-mi_población-cod_postal = '28056'
mi_domicilio-mi_población-ciudad = 'Madrid'
• Para evitar este tipo de estructuras jerárquicas podemos incluir una
estructura en otra estructura a través de la instrucción INCLUDE.
• En este caso todos los componentes de la estructura resultante
estarían al mismo nivel.
• Sólo se pueden incluir estructuras planas a través de esta
instrucción.
DATA: BEGIN OF casa,
calle TYPE string,
numero TYPE n,
INCLUDE STRUCTURE población AS pob,
END OF casa.
• En este caso los componentes de la estructura población quedan
incorporados a la estructura casa como un componente llamado
pob.
• Todavía podemos operar con la estructura población como una
unidad si escribimos su nuevo nombre.
• En el caso en que haya un conflicto de nombres podemos
renombrar un campo añadiéndole un sufijo al nombre con la
instrucción RENAMING WITH SUFFIX, por ejemplo,
INCLUDE STRUCTURE población AS pob RENAMIG WITH SUFFIX
_pob
• Para asignar un valor a un campo ahora no necesitamos encadanar
tres nombres jerárquicamente, sino que podemos hacerlo
casa-ciudad_pob = 'Madrid'.
Por último, para mostrar el contenido de un componente dentro de una
estructura utilizamos la instrucción WRITE. Por ejemplo,
WRITE: / casa-calle,
/ casa-numero,
/ casa-cod_postal_pob,
/ casa-ciudad_pob.