FoxPro/Visual FoxPro - cancelar un proceso

 
Vista:
Imágen de perfil de Elias

cancelar un proceso

Publicado por Elias (79 intervenciones) el 25/09/2015 13:35:29
Hola a todos,

Quisiera consultar como se puede abortar un proceso de forma controlada.

Explico: Tengo que sacar un reporte de de tablas con muchos registros (1.000.000 aproximadamente) para lo cual debo ingresar un rango de fechas.

El problema que intento solucionar es el de poder abortar el proceso si por alguna razon se ingreso mal el rango de fechas. La idea es que al momento de abortar el proceso el programa vuelva a pedirme ingresar el rango de fechas.

Agradeceria mucho su ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

cancelar un proceso

Publicado por Fidel José (657 intervenciones) el 25/09/2015 16:06:43
Depende de cómo tengas programado:
Si utilizas SELECT SQL no veo la forma de interrumpir el comando.
Si utilizas SCAN / ENDSCAN o DO WHILE / ENDDO o FOR / ENDFOR tienes, al menos, una forma. Mirá este ejemplo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
LOCAL lStop_process,;
	lnSuma ,;
	nMess
 
lnSuma = 0
 
SELECT buymov
WAIT "[F8]=Interrumpir" WINDOW AT 20,25 NOWAIT
SCAN
	lnSuma = m.lnSuma + total
 
	IF INKEY("H") = -7
		lStop_Process=.t.
		CLEAR TYPEAHEAD
	endif
 
	IF m.lStop_Process
		nMess=MESSAGEBOX("Desea Detener el Proceso?",4,"Stop Process")
		IF m.nMess=6
			EXIT
		ELSE
			lStop_Process=.f.
			WAIT "[F8]=Interrumpir" WINDOW AT 20,25 NOWAIT
		endif
	endif
 
ENDSCAN
WAIT CLEAR
IF m.lStop_Process
	MESSAGEBOX("Proceso interrumpído por el usuario",0,"Stop Process")
	* Atacar consecuencias
ENDIF

Tené en cuenta que para la cantidad de registros de la que hablas, esto provocará una demora importante ya que estará testeando un evento 1.000.000 de veces.

La pregunta es por qué podrían solicitar las fechas equivocadas y si se puede prevenir antes de lanzar el proceso:
1) Petición invertida ( primer fecha > segunda) - Totalmente controlable
2) Fuera de rango - Controlable, habrá que ver la forma.
3) Rango de fechas mayor / menor que el usual. Si el proceso es mensual, siempre será mejor que el usuario indique mes y año. Se puede pedir confirmación para el caso en que el rango solicitado no esté dentro de determinados parámetros.

En cuanto a que ante la cancelación del proceso vuelva a pedir las fechas, obliga a encerrar el procedimiento en un rulo ciego (DO WHILE .T. / ENDDO, donde el EXIT dependerá de que haya habido cancelación o no. En estos casos no se debe apelar a una llamada recursiva. Las llamadas recursivas solo deben utilizarse cuando no hay otra solución.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar