✒️ABAP El control del flujo de datos
ABAP El control del flujo de datos
ABAP tiene algunas variables internas que se van actualizando automáticamente y que pueden ser utilizadas en los programas. Todas estás variables inicial con el prefijo SY.
CONDICIONALES
Como en todos los lenguajes estructurados, se tienen una serie de instrucciones para subdividir el programa en bloques lógicos que se ejecutaran cuándo se cumpla alguna condición.
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ónque sigue al ENDIF. Si queremos añadir una opción por defecto usamos la instrucción ELSE. Si queremos comprobar si se cumple una segunda condición usamos lainstrucción ELSEIF.
La segunda opción para comprobar si se cumple una condición es mediante el bloque de instrucciones CASE…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.
INTRUCCIONES DE BUCLE
Dentro de las condiciones podemos utilizar los clásicos operadores que ya conocemos. En Abap existen cuatro (4) tipos de bucles. Los bucles condicionales (WHILE), los no condicionales (DO), los bucles instrucción (SELECT) que se dan a través de los datos de la base de datos y los bucles sentencia (LOOP) que se dan en las tablas internas.
Los bucles condicionales se crean con el grupo de instrucciones WHILE…ENDWHILE. Se utiliza para repetir un bloque de instrucciones durante el tiempo que una determinada condición es verdadera, utilice la siguiente estructura de control:
[statemaent_block]
ENDWHILE.
log_exp puede ser cualquier expresión lógica. El bloque de instrucciones entre WHILE y ENDWHILE se repite mientras la condición es verdadera o hasta que una declaración de terminación, tales como cierre o detenga ocurre. El campo del sistema sy-index contiene el número de bucle pasa.
El sistema procesa el bloque de sentencias hasta que se cumpla la condición o hasta que el sistema procesa una sentencia EXIT, STOP o REJECT. Para condición se puede utilizar cualquier expresión lógica. El campo del sistema SY-INDEX contiene el número de veces que el bucle ha sido ejecutado. El sistema permite anidar sentencias WHILE, así como combinarlas con otras sentencias de bucle.
La opción VARY actúa de la misma forma en que actúa la opción VARYING en la sentencia DO. Al igual en la sentencia DO, se puede utilizar más de una opción VARY en una sentencia WHILE.
Supongamos que se le pide por pantalla al usuario que escriba un número que vamos a almacenar en la variable x.
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. Al igual que en las expresiones condicionales, en los bucles podemos comprobar más de una condición mediante las expresiones AND u OR. También podemos anidar varios bucles o condiciones.
Los bucles NO condicionales se crean con las instrucciones DO... ENDDO. Ejecución de sentencias indefinidamente hasta que se procese la sentencia EXIT, STOP o REJECT. En este caso se debe indicar el número de veces que requiere que se ejecute un grupo de instrucciones.
DO [ TIMES ] [ VARYING FROM NEXT ]
ENDDO.
La sentencia DO sin cláusulas ejecuta el bloque de sentencias indefinidamente, o hasta que se procese una sentencia EXIT, STOP o REJECT. Para limitar el número de pasos de un bucle se puede utilizar la opción TIMES. Puede ser un literal o una variable. Si es 0 o negativo, el sistema no procesará el bucle.
La cláusula ENDDO es obligatoria (marca el fin del bloque de sentencias). La variable SY-INDEX contiene el número de veces que el bucle ha sido ejecutado.
Utilizando la opción VARYING se pueden ir asignando valores a una variable a partir de un conjunto de campos del mismo tipo y longitud de memoria por cada paso de bucle. En una sentencia DO se pueden utilizar varias opciones VARYING.
Se puede terminar una vuelta con la instrucción CONTINUE. Otra forma de hacer lo mismo es con la sentecia de control CHECK.
En los procesos repetitivos, usamos DO y WHILE.
DO nos da permiso de ejecutar un bloque de instrucciones tantas veces cómo le indiquemos. En el caso de WHILE nos permite ejecutar un bloque de instrucciones mientras se cumpla una condición.
Para la utilización y explicación de los Bucles Select y Loop, se utilizan Tablas internas. Las tablas internas sirven para almacenar información extraída de la base de datos.
Bucle SELECT - ENDSELECT “Bucle a través de los datos de base de datos”
Esta sentencia realiza una lectura lineal de los datos de las tablas de la base de datos y los asigna directamente a los campos de nuestra tabla interna. Pero atención, para que queden almacenados sobre la tabla interna para cada registro seleccionado debemos utilizar la sentencia APPEND. La cláusula WHERE nos permite indicar el filtro de selección.
Nota: En las mejores prácticas de SAP se indica evitar el uso del SELECT...ENDSELECT, reemplazándolo por el bucle LOOP.
Bucle LOOP- ENDLOOP “Bucle en las tablas internas”
Esta sentencia nos permite recorrer uno a uno todos los registros que hemos guardado previamente en nuestra tabla interna. La forma en que la tratamos varía dependiendo de si hemos declarado nuestra tabla interna con cabecera o sin cabecera.
La sentencia loop...endloop en tablas internas con cabecera
No necesitan de ninguna variable adicional. Simplemente llamamos a nuestra tabla interna mediante la sentencia loop...endloop. En ese mismo momento, todos los registros de cada línea se cargan sobre la cabecera de la propia tabla interna.
* Acción sobre <tabla_interna>
ENDLOOP.
La sentencia loop...endloop en tablas internas sin cabecera
Necesitan de una variable estructura adicional donde se contenga el valor de cada registro de la tabla interna. Al hacer una llamada loop...endloop, el valor del registro por el que pasa se ha de traspasar a esta variable adicional.
* Acción sobre <estructura>
ENDLOOP.
Las sentencias de control
Se usaran para terminar el procesamiento de un bucle o proceso.
- CHECK.
- EXIT. Sentencia para salir del bucle.
- STOP. Sentencia que se ejecuta indefinidamente hasta que se procese la sentencia EXIT.
- LEAVE.
- REJECT. Sentencia que al igual que STOP, se ejecuta indefinidamente hasta que se procese la sentencia EXIT.
 
 
 
Sobre el autor
Publicación académica de Sergio Armando Beltran Castaneda, en su ámbito de estudios para la Carrera Consultor ABAP.
Sergio Armando Beltran Castaneda
Profesión: Ingeniero de Sistemas con Especialización en Gerencia de Proyectos - Colombia - Legajo: WK55K
✒️Autor de: 70 Publicaciones Académicas
🎓Cursando Actualmente: Consultor ABAP Nivel Avanzado
🎓Egresado del módulo:
Disponibilidad Laboral: FullTime
Presentación:
Soy ingeniero de sistemas desde hace mas de 10 años y quiero enfocarme en el mundo sap, iniciando en el lenguaje abap, con miras a ampliar mi conocimiento profesional y laboral.
Certificación Académica de Sergio Beltran