You are on page 1of 5

Reglas de asignación en ABAP

ASIGNANDO VALORES EN ABAP

Para asignar valores en ABAP existen dos posibilidades, podemos


usar la instrucción MOVE o el operador de asignación =

MOVE x TO y.

y = x.

En los dos casos el valor guardado en la variable x se copia en la


variable y. Los contenidos de la variable x se copian byte a byte a la
variable y.

También podemos asignar constantes o literales

MOVE 5 TO y.

MOVE ‘hola’ TO y.

El contenido de x y de y deben ser compatibles (tipo de variable,


longitud del campo, número de decimales…).

No es necesario que el tipo de las dos variables sea igual, también


pueden ser convertibles, aunque la ejecución del programa va a
tardar más.

REGLAS DE CONVERSIÓN

Según el tipo de variable de destino se va a producir lo siguiente

Tipo c (character): Los caracteres se copian de izquierda a


derecha. Cuando llegamos a final del campo se trunca. Los números
también se copian de izquierda a derecha y se truncan por la derecha
cuando se acaba el campo.

Tipo string: Se aplican las mismas reglas que para los de tipo c pero
nunca se trunca el valor asignado.
Alejandro Torrijos Página 1
Reglas de asignación en ABAP

Tipo n (numeric): Pese a su nombre es un campo de tipo carácter


que sólo puede guardar dígitos. No se pueden copiar letras en este
tipo de variables. Los dígitos se copian de derecha a izquierda hasta
el final del campo. Si no hay suficiente espacio se trunca por la
izquierda.

Tipo d (dates): Si asignamos una cadena de caracteres debemos


asegurarnos que es compatible con el formato de este tipo de
variables, es decir año(4 caracteres)/mes(2 caracteres)/día(2
caracteres). En caso contrario nos dará un error de compilación. Si
asignamos un número este se interpreta como el número de días
desde el 01/01/0001 y se pasa a formato fecha AAAA/MM/DD.

Tipo t (time): Si asignamos una cadena de caracteres debemos


asegurarnos que es compatible con el formato de este tipo de
variables, es decir horas(2 caracteres):minutos(2
caracteres):segundos(2 caracteres). En caso contrario nos dará un
error de compilación. Si asignamos un número este se interpreta
como el número de segundos desde las 00:00:00 y se pasa a
formato hora HH:MM:SS.

Tipos i (integer), p (packed), o f (float): Al ser todas estas


variables numéricas sólo pueden almacenar números. Si asignamos
una cadena de caracteres estos deben ser dígitos (12345…). En el
caso en el que incluya decimales, el tipo i lo redondeará al entero
más próximo, y el tipo p al último decimal. En el caso de que la
variable de destino sea de tipo f no se producirá redondeo.

Tipo x (hexadecimal): Los caracteres se interpretan como números


hexadecimales (del 0 al F). Si la cadena de caracteres incluye otro
carácter que no sea un dígito hexadecimal se trunca en ese punto.
Los números reales se pasan a enteros y después se pasan a
hexadecimal.

RESETEANDO EL VALOR DE UNA VARIABLE

Se entiende por resetear una variable sustituir el valor que tiene


asignado hasta ese momento por el valor que el sistema le asigna

Alejandro Torrijos Página 2


Reglas de asignación en ABAP

por defecto. En SAP el valor inicial de cualquier variable es cero


excepto en el caso de las variables de tipo carácter que es un espacio
en blanco.

Las estructuras se descomponen en sus componentes individuales y


estos se inicializan según el tipo de variable a que correspondan.

Las referencias o punteros se inicializan a nulo, es decir que no


apuntan a ningún sitio.

Las tablas internas se resetean borrando todas sus líneas.

Para resetear una variable, una estructura, un puntero o una tabla


interna usamos la instrucción CLEAR.

ASIGNANDO ESTRUCTURAS EN ABAP

Una estructura puede asignarse a otra estructura siempre que sea


compatible. Para ello podemos usar el operador de asignación

estructura2 = estructura1

Según esta instrucción el contenido de la estructura1 se asigna a la


estructura2.

Para asignar un componente de una estructura a otra estructura


podemos usar la instrucción MOVE

MOVE estructura1-componente1 TO estructura2-componente2

También podemos asignar componentes con el mismo nombre de


una estructura a otra. Por supuesto no sólo deben tener el mismo
nombre sino que también deben de ser compatibles

MOVE-CORRESPONDING estructura1 TO estructura2

Sin embargo debemos distinguir la asignación entre estructuras


planas (flat) y estructuras profundas (deep). Recordemos que estas
últimas son las que incluyen otras estructuras (o incluso tablas) entre
sus campos.

Alejandro Torrijos Página 3


Reglas de asignación en ABAP

Las estructuras profundas deben ser compatibles y no se permite


ningún tipo de conversión al asignar una a otra.

Las estructuras planas sí permiten la conversión e incluso podemos


asignar una estructura a una sola variable de tipo c.

Supongamos que una estructura incluye sólo componentes o campos


de tipo c. En este caso la estructura se considera como una única
cadena de caracteres en la que unos campos se alinean detrás de
otros. En realidad es así como se almacenan en la memoria del
sistema.

Si asignamos una estructura más larga a otra más corta (o a una


variable de tipo c más corta), la primera se trunca al llegar al final de
la segunda. En el caso en que la segunda sea más larga que la
primera el sobrante se inicializa de acuerdo al tipo que el sistema le
asigna por defecto (en el caso de una variable de tipo c son espacios
en blanco).

En el caso en que una estructura incorpore componentes numéricos


(por ejemplo del tipo i) hay que tener en cuenta el concepto de
alineamiento. Esto se produce porque, dado que una variable de tipo
i ocupa cuatro bytes, la dirección de memoria inicial de dicha variable
siempre será divisible por cuatro (en caso contrario el sistema estaría
leyendo información (bytes) procedente de dos variables distintas y
el resultado no tendría sentido.

Para alinear este tipo de componentes en la nueva estructura (es


decir, para conseguir que la dirección de memoria en la que se inicia
el componente numérico sea divisible por cuatro en el caso de los
componentes de tipo i, y por ocho en el caso de los componentes del
tipo f) el sistema puede incluir espacios en blanco (alignment gaps)
entre un campo de tipo carácter y otro numérico. Por lo tanto se
estaría ocupando más espacio en la memoria del que sería deseable,
por lo que en el caso en que una estructura contenga componentes
de tipo numérico conviene que estos estén los primeros para evitar
esos espacios en blanco.

Alejandro Torrijos Página 4


Reglas de asignación en ABAP

Con el nuevo sistema de codificación UNICODE cada carácter puede


ocupar más de un byte (depende de la plataforma) por lo que
también aquí se pueden producir problemas de alineamiento. Por eso
el sistema divide la estructura en fragmentos del mismo tipo
(fragment view) y comprueba que sean compatibles.

ASIGNANDO TABLAS INTERNAS

Las tablas internas sólo pueden ser asignadas a otras tablas internas,
y esto siempre que los campos de los registros o líneas sean
compatibles. Para ello el sistema comprueba la compatibilidad de la
estructura de campos de la tabla siguiendo las mismas reglas ya
descritas para estructuras y variables

El número de registros de cada tabla es indiferente.

Alejandro Torrijos Página 5

You might also like