Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL (ActiveX, v4 - v11) (https://www.cobolforo.es/forumdisplay.php?f=9)
-   -   [Sintaxis] No funciona EXIT PROGRAM después de un "SetFocus" (https://www.cobolforo.es/showthread.php?t=1531)

Josber 30 de septiembre de 2022 20:12

No funciona EXIT PROGRAM después de un "SetFocus"
 
A ver, supongamos que en el evento "opened" de un Form, tenemos algo así

"opened"

Código COBOL:
  1. CALL "COMPROBAR".

y en la Sub-Rutina "COMPROBAR", tenemos

Código COBOL:
  1. IF VALOR_N = 1
  2.    CALL "VALOR-BAJO"
  3.    INVOKE BOTON1 "SetFocus"
  4.    EXIT PROGRAM
  5. END-IF.

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

Código COBOL:
  1. IF IMPORTE < 1000
  2.    INVOKE BOTON2 "SetFocus"
  3.    EXIT PROGRAM
  4. 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
Código COBOL:
  1.        IF IMPORTE < 1000 THEN
  2.           INVOKE BOTON2 "SetFocus"
  3.           EXIT PROGRAM
  4.        ELSE
  5.           INVOKE BOTON1 "SetFocus"
  6.           EXIT PROGRAM
  7.        END-IF.  
es decir y NO Sub-Rutina "COMPROBAR"
Código COBOL:
  1. IF VALOR_N = 1
  2.    CALL "VALOR-BAJO"
  3. *   INVOKE BOTON1 "SetFocus" *>ESTO NO
  4. *   EXIT PROGRAM
  5. 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

Cita:

Citación del post de Kuk (Mensaje 8144)
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


La franja horaria es GMT +2. Ahora son las 00:46.

Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.