Condición usando OR

Estoy trabajando con un bot que actualmente tiene un ciclo que funciona con una condición que dice
mientras i =< num_registros
haz todo el proceso.

Pero ahora necesito agregar una condición adicional que dice que
mientras i =< 41
haz todo el proceso.

Dentro de la actividad do while loop agregué la condición de esta forma ( i =< num_registros || i =< 41 )
de tal manera que si num_registros es < 41 el bot tome esa condición.
Pero al momento de ejecutar el bot no respeta esa condición y aunque llegue a 41 sigue ejecutandose el ciclo.

Puedes compartir tu workflow?

Es un worflow muy muy muy extenso, pero aqui comparto la parte donde se da la condición para el ciclo:

Necesito ver como termina el bucle.

Cuando hice una prueba conecté el camino “no” a la actividad i = i+1 (“list_item” en tu workflow) y esa la conecté al If, cerrando el bucle. Eso me resultó en un bucle infinito, aunque la lógica de la condición estaba correcta.

1 Like

Hola @cris-dsc
Screenshot_75
esta es la forma en la que termina el blucle, con el incremento de j y list_item

En cuanto a la variable folios_a_procesar esa se define su valor al inicio tomando en cuenta el valor en el portal web de numero de folios totales. La mayor parte del tiempo ese numero de folios es superior a 41, pero cuando no quisiera que fuera esa la condición que se respetara.

Veo que hay 3 flechas conectadas a la actividade j=j + 1. De donde vienen? Tal vez sea mejor que compartas tu workflow completo, porque todavía no puedo entender que está pasando :sweat_smile:

Hola @Yoshi, espero te encuentres bien.

Entiendo que originalmente, era un loop sencillo que continuaba mientras list_item fuera menor o igual a folios_a_procesar, pero lo que ahora quieres agregar es una condición de corte para que cuando list_item llegue a 41, el loop se detenga. ¿Es correcto?

En ese caso, debemos cambiar el operador OR por AND:

( list_item <= folios_a_procesar && list_item < 41 )

(en caso que quieras que el bucle también incluya el valor 41, cambiar ese útlimo < por <=)

A continuación aclaro por qué. Teniendo 2 condiciones:
(A) list_item <= folios_a_procesar
(B) list_item < 41

Imaginemos los siguientes valores:
folios_a_procesar = 100
list_item = 50

En este ejemplo, A = verdadera y B = falsa.
Como el operador OR resulta en verdadero si al menos 1 de las 2 condiciones es verdadera, la condición entera evaluará como YES (true), y el bucle continuará.

En cambio, con el operador AND todas las condiciones deben ser verdaderas para que la condición evalúe a YES (true). Es decir que el If…then evaluará a NO (false), y el bucle se interrumpirá.

Espero que esta respuesta haya sido útil, y que no haya resultado redundante o excesiva. Si entendí mal la lógica detrás de tu condición If…then, y por ende mi solución no te serviría, te solicito que por favor nos comentes en mayor detalle el objetivo de esa condición (cuándo debería cortar y cuándo debería seguir), idealmente con algún pequeño ejemplo, para poder proveer una mejor.

¡Saludos!

Hola Ivan
Entonces si uso AND es vez de OR

continuando con el ejemplo que expusiste

(A) list_item <= folios_a_procesar
(B) list_item <= 40

folios_a_procesar = 100
list_item = 1
El ciclo se va a repetir por que no se estan cumpliendo las dos condiciones, hasta que list_item llegue a 40 y se cumplan ambas condiciones?

Pero en ese caso tendría que invertir el funcionamiento de Yes / No, cierto?

En el ejemplo que has dado (folios_a_procesar = 100, list_item = 1), ambas condiciones son verdaderas, porque 1 <= 100 es verdadero y 1 <= 40 es verdadero. Lo mismo seguirá pasando a medida que incrementes list_item, incluyendo cuando list_item = 40. Después, cuando list_item = 41, la condición B va a pasar a ser falsa, y usando el operador AND, la condición entera (llamémosla “A AND B”) evaluará como falsa.

Si usaras OR, el If…then seguiría siendo verdadero, porque A seguiría siendo verdadera. Esto continuaría siendo así hasta que list_item = 101, porque ahí tanto A como B serían falsas, y por ende “A OR B” también lo sería.

Podríamos resumir esto en la siguiente tabla:

1 Like

Muchas gracias por la explicación más detallada, en efecto la condición debe llevar AND.