✒️ABAP / El control del flujo de datos Por Gustavo Rondon Hernandez
ABAP El control del flujo de datos

El control de los flujos de datos
1 | Las condiciones
Tal como sucede en todos los lenguajes de programación, en ABAP contamos con sentencias para trabajar con condiciones.
Condición
Consiste en la ejecución de una sentencia o grupo de sentencias que se ejecutarán en base a si se cumple o no una determinada expresión lógica.
Las expresiones lógicas son todas aquellas expresiones que obtienen como resultado verdadero o falso.
Un ejemplo de una expresión lógica es: 1 más 1 = 2.
Si la expresión lógica se cumple entonces se ejecutará determinada sentencia o grupo de sentencias y si la expresión lógica no se cumple entonces se ejecutará otra sentencia o grupo de sentencias.
Existen dos formas de representar condiciones en ABAP, una de ellas es utilizando la sentencia IF-ENDIF.
DATA: v_calificacion (1) TYPE c VALVE '8'.
START-OF-SELECTION.
IF v_calificacion >= '8'.
WRITE:/ 'Aprobado' .
ELSE.
WRITE:/ 'Reprobado' .
ENDIF.
Podemos anidar o agregar más condiciones dentro del IF-ENDIF, utilizando la sentencia ELSEIF de la siguiente forma:
IF v_calificacion >= ' 9 ' .
WRITE: /'Aprobado con merites' .
ELSEIF v_calificacion BETWEEN ' 6 '. AND ' 8 ' .
WRITE: / 'Aprobado' .
ELSEIF v_calificacion BETWEEN ' 4 ' AND ' 8 '.
WRITE: / 'Aprobado raspando' .
ELSE.
WRITE: / 'Reprobado' .
ENDIF.
Si ninguna de las condiciones es válida, el sistema ejecutará las declaraciones que estén debajo del ELSE.
La otra forma de representar condiciones en ABAP es mediante la sentencia CASE-ENDCASE.
CASE v_calificacion.
WHEN '10' OR '9' OR '8' .
WRITE: / 'Aprobado con meritos' .
WHEN '7' OR '6'.
WRITE: / 'Aprobado ' .
WHEN ' 5 ' OR ' 4 ' .
WRITE: / 'Aprobado raspando' .
WHEN OTHERS .
WRITE ' Reprobado' .
ENDCASE.
Si ninguna de las condiciones es válida entonces el sistema ejecutará las declaraciones que estén debajo del WHEN OTHERS.
Ahora bien, ya sea que utilicemos la sentencia IF-ENDIF o la sentencia CASE-ENDCASE, vamos a tener que emplear 10 que se denomina operadores lógicos, que son los operadores que nos permiten agrupar expresiones lógicas.
Los operadores lógicos que tenemos disponibles en ABAP son: AND - OR - EQ - NE - GT - LT - GE - LE.
Tal como vimos en la imagen anterior algunos operadores pueden escribirse de dos formas diferentes, tal como es el caso del operador igual que se puede escribir EQ o =
Veamos algunos ejemplos sobre cómo podemos utilizar los operadores lógicos para agrupar expresiones lógicas:
Si ei sy-subrc es igual a cero
IF sy-subrc EQ 0 OR sy-subrc = 0. "Ambas expresiones lógicas son identicas"
Si sy-subrc distinto de cero
ELSEIF sy-subrc NE 0 OR sy-subrc <> 0. "Ambas expresiones lógicas son identicas"
Si sy-subrc es mayor a cero
ELSEIF sy-subrc GT 0 OR sy-subrc > 0. "Ambas expresiones lógicas son identicas"
Si el sy-subrc es menor a cero
ELSEIF sy-subrc LT 0 OR sy-subrc < 0. "Ambas expresiones lógicas son identicas"
Si el sy-subrc es mayor o igual a cero
ELSEIF sy-subrc GE 0 OR sy-subrc >= 0 "Ambas expresiones lógicas son identicas"
Si sy-subrc es menor o igaul a cero
ELSEIF sy-subrc LE 0 OR sy-subrc <= 0 "Ambas expresiones lógicas son identicas"
ENDIF.
2 | Los bucles
Al igual que con las condiciones, tal como sucede en todos los lenguajes de programación, en ABAP contamos con
sentencias para trabajar con bucles.
Bucle
Un bucle o ciclo, en programación, es una secuencia de instrucciones de código que se ejecuta repetidas veces, hasta que la condición asignada a dicho bucle deja de cumplirse.
Los bucles en ABAP se puede pueden representar de varias formas.
La primera de ellas es mediante la sentencia LOOP-ENDLOOP. Vamos a utilizar la sentencia LOOP-ENDLOOP exclusivamente cuando trabajemos con tablas internas, concepto que veremos bien en detalle en la próxima unidad.
Mediante esta sentencia vamos a recorrer el contenido de una tabla interna, registro por registro y en cada registro vamos a realizar algún tipo de procesamiento.
LOOP INTO AT ti_salida INTO wa_salida.
WRITE: / wa_salida-vertrag,
wa_salida-vkont,
wa_salida-belnr,
wa_salida-nettobtr.
ENDLOOP.
Con el agregado de la cláusula WHERE en la sentencia LOOP-ENDLOOP, se puede restringir el número de líneas a leer, ya que se producirá la iteración siempre y cuando se cumpla la condición. Para más información sobre la sentencia podemos presionar Fl sobre la misma.
Recorremos SALIDA siempre y cuando el campo NETTOBRT sea mayor a cero
LOOP AT ti_salida INTO va salida WHERE nettobtr > 0.
WRITE: / wa_salida-vertrag,
wa_salida-vkont,
wa_salida-belnr,
wa_salida-nettobtr.
ENDIOOP.
Sabias que: La utilización de la cláusula WHERE siempre y cuando sea posible, es considerada una buena práctica de programación ya que limita o restringe el acceso secuencial de todos los registros de la tabla interna.
Otra forma de representar un bucle en ABAP es mediante la sentencia DO-ENDDO.
Vamos a utilizar la sentencia DO-ENDDO para trabajar con variables y no con tabla internas, tal como sucede con LOOP-ENDLOOP.
La iteración se ejecutará solo si la condición es verdadera.
DO 5 TIMES.
ADD 1 TO v_vuelta.
WRITE: / v_vuelta.
ENDDO.
3 | Las sentencias de control
Al igual que con las condiciones y los bucles, tal como sucede en todos los lenguajes de programación, en ABAP contamos con sentencias de control.
Sentencias de control
Se utilizan para terminar el procesamiento de un bucle, de una subrutina o de todo un programa.
Cada lenguaje de programación tiene sus propias sentencias de control. En ABAP contamos con las siguientes sentencias de control:
- DCHECK: esta sentencia verifica si la condición es verdadera.
Si la condición es falsa y la sentencia está dentro de un bucle, por ejemplo un LOOP-ENDLOOP, entonces se saltearán todas las sentencias siguientes que estén dentro del bucle y se continuará con la siguiente iteración. Fuera de un bucle, se saltearán todas las sentencias hasta el final del evento o del programa en proceso.
Si la condición es verdadera entonces se continúa con el procesamiento.
CHECK sy-subrc EQ 0.
- EXIT: si ejecutamos esta sentencia dentro de un bucle entonces saldremos del bucle, dentro de una subrutina entonces saldremos de la misma y fuera de un bucle y fuera de una subrutina salimos del programa.
IF sy-subrc EQ 0.
EXIT.
ENDIF.
- CONTINUE: esta sentencia se utiliza solo dentro de un bucle. Luego de la ejecución de la sentencia el sistema continúa con la siguiente iteración del bucle.
CLEAR v vuelta.
DO 5 TIMES.
ADD 1 TO v_vuelta.
IF v_vuelta EQ 5.
WRITE: / v_vuelta.
ELSE.
CONTINUE .
ENDIF.
ENDDO.
- STOP: esta sentencia finaliza el programa en ejecución pero antes se ejecuta el evento END-OF-SELECTION, si es que este evento está escrito en el programa.
IF sy-subrc NE 0.
STOP.
ENDIF.
- LEAVE: esta sentencia finaliza el programa en ejecución y no se ejecuta el evento END-OF-SELECTION.
IF sy-subrc NE 0.
LEAVE.
ENDIF.
Debemos tener sumo cuidado en la utilización de las sentencias de control CHECK, EXIT, CONTINUE, LEAVE y STOP debido a que estas alteran en forma directa el flujo de control de un programa ABAP.
 
 
 
Sobre el autor
Publicación académica de Gustavo Jose Rondon Hernandez, en su ámbito de estudios para la Carrera Consultor ABAP Nivel Inicial.
Gustavo Jose Rondon Hernandez
Profesión: Becario - España - Legajo: WF47H
✒️Autor de: 33 Publicaciones Académicas
🎓Egresado del módulo:
Disponibilidad Laboral: FullTime
Presentación:
Soy informático con 10 años de experiencia en el área de tecnología, tengo un master en sap business intelligence sap bw & sap bi-bo en la salle barcelona.
Certificación Académica de Gustavo Rondon
























