Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL (ActiveX, v4 - v11) (https://www.cobolforo.es/forumdisplay.php?f=9)
-   -   [Duda] Opción de BOTÓN CANCELAR un proceso a medias (https://www.cobolforo.es/showthread.php?t=1776)

Josber 25 de junio de 2024 16:19

Opción de BOTÓN CANCELAR un proceso a medias
 
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:
Código COBOL:
  1.  01  GLB-CANCEL        PIC X(1).

En el evento "Click" del botón Cancelar:
Código COBOL:
  1.      MOVE "S" TO GLB-CANCEL

En tu bucle haces lo siguiente:
Código COBOL:
  1.      MOVE "N" TO GLB-CANCEL
  2.      
  3.      PERFORM UNTIL ... OR GLB-CANCEL NOT = "N"
  4.         *> tratamiento existente          
  5.  
  6.          INVOKE POW-SELF "ThruEvents" *> IMPORTANTE! Si no lo haces, el botón Cancelar estará bloqueado, vamos, todo el Form
  7.      END-PERFORM
  8.      
  9.      IF  GLB-CANCEL NOT = "N"
  10.          INVOKE POW-SELF "DisplayMessage" USING "El proceso ha sido cancelado." 48
  11.      
  12.      ELSE
  13.         *> Tratamiento actual
  14.      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

lumalma 30 de octubre de 2025 19:04

@Kuk, le echaré un vistazo.

Muchas gracias


La franja horaria es GMT +2. Ahora son las 22:57.

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