PDA

Ver la Versión Completa : [Duda] Opción de BOTÓN CANCELAR un proceso a medias


Josber
25 de junio de 2024, 16:19
Todos usamos una instrucción PERFORM para llenar una tabla, leer un fichero, actualizar, etc., me guastaría poder poner un botón que cancele ese PERFORM en el momento que desees antes de que termine el proceso, (tipo a como aparece cuando haces un listado con POWERForm), ¿alguien puede iluminarme si se puede hacer de alguna manera?

Muchas gracias.-

Kuk
25 de junio de 2024, 20:21
@Josber, se me ocurre algo así:

En la Working Global:

01 GLB-CANCEL PIC X(1).


En el evento "Click" del botón Cancelar:

MOVE "S" TO GLB-CANCEL


En tu bucle haces lo siguiente:

MOVE "N" TO GLB-CANCEL

PERFORM UNTIL ... OR GLB-CANCEL NOT = "N"
*> tratamiento existente

INVOKE POW-SELF "ThruEvents" *> IMPORTANTE! Si no lo haces, el botón Cancelar estará bloqueado, vamos, todo el Form
END-PERFORM

IF GLB-CANCEL NOT = "N"
INVOKE POW-SELF "DisplayMessage" USING "El proceso ha sido cancelado." 48

ELSE
*> Tratamiento actual
END-IF

Josber
26 de junio de 2024, 16:14
@Kuk, algo así había pensado, el problema está en que, sólo tengo la opción de cancelar. Al "disparar" el evento "click" del botón que ponga, ya no puedo "volver" al mismo punto en que se pulsó ese botón si por un casual, he pulsado por error.

Un salu2.-

Kuk
26 de junio de 2024, 20:59
@Josber, estas cosas se gestionan mediante COMMIT y ROLLBACK si estás con SQL. Si estás con ficheros, se puede guardar el último registro tratado (su clave por ejemplo) en una variable global también y cosas por el estilo. ;)

Fito
27 de junio de 2024, 15:48
Hola:

Sin probar nada, pero se me ocurre que en vez de poner la condición de fallo en el perform, hagas dentro de él en un IF y ahi podés preguntar si continúa o no.

Saludos..

Fito...

Josber
27 de junio de 2024, 15:54
@Fito, eso no puede hacerse, en cuanto haces click en el botón, "pierdes el foco" de la rutina en la que estás, y tendrías que volver a la rutina y empezar de nuevo, no sé si me explico.
Éste fin de semana, haré la prueba de lo que me comentó @Kuk, a ver si funciona.

Un salu2.-

lumalma
24 de octubre de 2025, 11:41
Hola

Retomo este tema y tengo la siguiente consulta.

En un form tengo un botón con el que lanzo un proceso y quiero poner un botón que cancele dicho proceso.

El proceso es complicado con lecturas de un fichero de cabeceras y a partir de cada registro se leen las registros de líneas. Se hacen una serie de cálculos y se actualizan los registros de ambos ficheros. Además se generan dos ficheros secuenciales con los datos de los ficheros de cabeceras y líneas. Para realizar los cálculos y otros subprocesos se llaman rutinas del form mediante CALL.

La cuestión es que aunque ponga el método ThruEvents casi párrafo a párrafo y haga click en el botón de cancelación del proceso veo que debo clickar varias veces hasta que consigo que se ejecute el evento click y pueda parar el proceso. He hecho diferentes pruebas, incluso con un form que contenga el botón de cancelación siguiendo lo visto en otro post pero no encuentro la solución.

Agradeceré cualquier ayuda.

Un saludo

Kuk
24 de octubre de 2025, 20:14
@lumalma, cuando haces varios clic, te da la impresión que funciona con varios pero en realidad el que hace el trabajo es el primero que simplemente se retrasa.

Tu problema tiene solución, y es esta: Multihilo (Thread) en PowerCOBOL - Cobol Foro (https://www.cobolforo.es/showthread.php?t=1875)

lumalma
30 de octubre de 2025, 19:04
@Kuk, le echaré un vistazo.

Muchas gracias