sap: instrucciones de control y bucles en abap
DESCRIPTION
Tutorial sobre el uso de instrucciones de control y de bucles en AbapTRANSCRIPT
SENTENCIAS CONDICIONALES EN ABAP
Para ejecutar instrucciones sólo si se cumplen ciertas condiciones ABAP tiene dos bloques de instrucciones.
El primero es IF….ENDIF
Esta instrucción comprueba si se cumple una condición antes de pasar a la siguiente instrucción. Si no se cumple ejecuta la instrucción que sigue al ENDIF, por ejemplo
IF x > 0.
WRITE / ‘x es un número positivo’.
ENDIF.
Si queremos añadir una opción por defecto usamos la instrucción ELSE, por ejemplo
IF x > 0.
WRITE / ‘x es un número positivo’.
ELSE
WRITE / ‘x es un número negativo’.
ENDIF.
También podría darse el caso de que la variable x fuera cero. Si queremos comprobar si se cumple una segunda condición usamos la instrucción ELSEIF, por ejemplo
Página 1 de 7
IF x GT 0.
WRITE / ‘x es un número positivo’.
ELSEIF x EQ 0.
WRITE / ‘x es igual a cero’.
ELSE
WRITE / ‘x es un número negativo’.
ENDIF.
La segunda opción para comprobar si se cumple una condición es mediante el bloque de instrucciones CASE…ENDCASE. Por ejemplo para el caso anterior
CASE x.
WHEN x GT 0.
WRITE / ‘x es un número positivo’.
WHEN x EQ 0.
WRITE / ‘x es cero’.
WHEN OTHERS.
WRITE / ‘x es un número negativo’.
ENDCASE.
Podemos comprobar si se cumplen varias condiciones a la vez mediante la expresión AND.
También podemos comprobar si se cumple alguna de las condiciones mediante la expresión OR.
CASE x.
Página 2 de 7
WHEN x GT 0 AND x LE 100.
WRITE / ‘x es un número positivo entre uno y cien’.
WHEN x EQ 0 OR x LT 0.
WRITE / ‘x es cero o un número negativo’.
ENDCASE.
INTRUCCIONES DE BUCLE
En Abap existen dos tipos de bucles. Los bucles condicionales y los no condicionales.
Los bucles condicionales se crean con el grupo de instrucciones WHILE…ENDWHILE.
Supongamos que le pedimos por pantalla al usuario que escriba un número que vamos a almacenar en la variable x. Con el siguiente código le seguimos pidiendo al usuario que introduzca otro número mientras que se cumpla la condición inicial del bucle (que NO sea cero).
WHILE x NE 0.
WRITE / ‘Por favor escriba otro número’.
ENDWHILE.
En cada iteración el sistema comprueba que se cumple la condición antes de entrar de nuevo en el bucle. Si no se cumple salta hasta la sentencia ENDWHILE y continúa ejecutando el programa a partir de esa instrucción.
Página 3 de 7
Al igual que en las expresiones condicionales, en los bucles podemos comprobar más de una condición mediante las expresiones AND u OR.
WHILE x <> 0 AND x < 100.
WRITE / ‘Por favor escriba otro número’.
ENDWHILE.
En este caso le pedimos al usuario que escriba otro número siempre que este no sea cero y que sea menor que cien.
También podemos anidar varios bucles o condiciones, por ejemplo
WHILE x <> 0.
PARAMETER x TYPE i.
IF x MOD 2 = 0.
WRITE / ‘Es un número par’.
ELSE
WRITE / ‘Es un número impar’.
ENDIF
ENDWHILE.
Los bucles NO condicionales se crean con las instrucciones DO…ENDDO.
En este caso debemos indicar el número de veces que queremos que se ejecute un grupo de instrucciones, por ejemplo
DO 10 TIMES
Página 4 de 7
WRITE ‘Hola amigos’.
ENDDO.
En este caso aparecerá por pantalla 10 veces la frase ‘Hola amigos’.
Podemos terminar una vuelta con la instrucción CONTINUE
DO 10 TIMES
PARAMETER x TYPE i.
IF x <= 0.
CONTINUE.
ENDIF.
IF x MOD 2 = 0.
WRITE / ‘Es un número par’.
ELSE.
WRITE / ‘Es un número impar’.
ENDIF.
ENDDO.
En este caso si el usuario escribe un número positivo el sistema escribe en la pantalla si es un número par o impar (así hasta un máximo de diez veces). Si el usuario escribe un número negativo el sistema vuelve al principio del bucle (vuelve a ejecutar la primera instrucción).
Otra manera de hacer lo mismo es con la instrucción CHECK
DO 10 TIMES
Página 5 de 7
PARAMETER x TYPE i.
CHECK x > 0.
IF x MOD 2 = 0.
WRITE / ‘Es un número par’.
ELSE.
WRITE / ‘Es un número impar’.
ENDIF.
ENDDO.
En este caso el programa comprueba que x es un número positivo antes de seguir a la siguiente instrucción.
Página 6 de 7
Por último podemos usar la instrucción EXIT para salir del bucle
DO 10 TIMES
PARAMETER x TYPE i.
IF x < 0.
EXIT.
ENDIF.
IF x MOD 2 = 0.
WRITE / ‘Es un número par’.
ELSE.
WRITE / ‘Es un número impar’.
ENDIF.
ENDDO.
En este caso si el usuario introduce un número negativo el programa nos lleva inmediatamente a la instrucción ENDDO y continúa ejecutando la instrucción que viene a continuación (es decir nos saca del bucle).
Página 7 de 7