PDA

Ver la Versión Completa : [Sintaxis] No funciona EXIT PROGRAM después de un "SetFocus"


Josber
30 de septiembre de 2022, 20:12
A ver, supongamos que en el evento "opened" de un Form, tenemos algo así

"opened"


CALL "COMPROBAR".


y en la Sub-Rutina "COMPROBAR", tenemos

IF VALOR_N = 1
CALL "VALOR-BAJO"
INVOKE BOTON1 "SetFocus"
EXIT PROGRAM
END-IF.

y en la Sub-Rutina "VALOR-BAJO", tenemos

IF IMPORTE < 1000
INVOKE BOTON2 "SetFocus"
EXIT PROGRAM
END-IF.

Resulta que, en la rutina VALOR-BAJO, si el importe es < 1000, no me "ejecuta" el foco y el EXIT PROGRAM, por lo que, vuelve a la instrucción siguiente a CALL "VALOR-BAJO" de la rutina COMPROBAR, y ahí si me ejecuta el foco correctamente y "se va" a BOTON1, yo quiero que, independientemente del valor que tenga VALOR_N, si IMPORTE es menor de 1000, como le indico en VALOR-BAJO, que el foco lo recoja BOTON2.

Obviamente, no son así las sentencias auténticas pero, es que las puestas, tampoco funcionan bien. En el montón de programas que tengo escritos, no me había pasado esto nunca, instrucciones tan simples como estas, siempre me han funcionado correctamente. Por si preguntáis, Win10 X64 virtualizado, con PWC9 y los Runtime del PWC10, aunque es lo mismo, con otros programas y esta configuración, funciona correctamente

No sé si me explico correctamente.

fastpho
30 de septiembre de 2022, 21:38
Hola @Josber, de la forma que esta planteado , si haces un display sobre el boton2 en la Evento "GotFocus" seguro paso por ahi y se fue ..
Yo lo que haria seria el Sub-Rutina "VALOR-BAJO" decida para donde ir

IF IMPORTE < 1000 THEN
INVOKE BOTON2 "SetFocus"
EXIT PROGRAM
ELSE
INVOKE BOTON1 "SetFocus"
EXIT PROGRAM
END-IF.

es decir y NO Sub-Rutina "COMPROBAR"

IF VALOR_N = 1
CALL "VALOR-BAJO"
* INVOKE BOTON1 "SetFocus" *>ESTO NO
* EXIT PROGRAM
END-IF.

Saludos...

Fito
30 de septiembre de 2022, 23:17
Hola:

De acuerdo a tu rutina @Josber, pase lo que pase, siempre el foco va a quedar en BOTON1.

El EXIT PROGRAM sale del prg donde está la instrucción, yo creo que vos lo querés usar para que salga del Opened.

Como bien dice @fastpho, el foco pasa por BOTON2, pero el flujo del programa sigue, porque el EXIT PROGRAM de "VALOR-BAJO" termina con la ejecución de "VARLOR-BAJO" solamente.

Espero haber sido claro. Cómo docente no soy muy bueno.

Saludos

Fito...

Josber
1 de octubre de 2022, 13:07
A ver, es un ejemplo creado "al vuelo", realmente, el original, lo que hace es llamar a la SUB1, la SUB1, llama a la SUB2, y la SUB2, debería salirse a un control específico con un EXIT PROGRAM, pero no lo hace, devuelve el controla la SUB1 y continua ejecutando ésta, yo lo que quiero es que en ciertas condiciones, se salga de la SUB2, sin más, dándole el foco al control pertinente. El caso es que en otro programas, lo tengo hecho de manera similar, y funciona a la perfección, pero aquí no funciona y, no sé si es fallo mío, porque estoy algo "espesillo" y no veo el problema o es otra cosa.

Mil gracias.-

Kuk
2 de octubre de 2022, 00:37
@Josber, lo que dices no se puede hacer. Como dice el amigo @Fito, el EXIT PROGRAM sólo termina el "script" en cuestión que se está ejecutando, devolviendo el control al "script" llamante. Esto lo que quiere decir es que tienes que organizar la lógica de tal manera que el foco se decida al mismo nivel y no en modo "escalera". Por ejemplo que el SUB2 haga un RETURNING y según el RC sea el SUB1 el que ponga el foco en Botón1 o Botón2.

Josber
2 de octubre de 2022, 11:44
Esto lo que quiere decir es que tienes que organizar la lógica de tal manera que el foco se decida al mismo nivel y no en modo "escalera" ...

¡¡Oñoooo!!, pues voy a mirar en otros programas como lo tengo hecho, porque, yo creo que lo tengo de la manera que digo, a ver si es que estoy equivocado :tonto::tonto::piensa::piensa:

Graciassssss