Hola gente !
Estoy usando FWH 17.09.
El programa en cuestión es sobre la facturación electrónica (argentina).
Resulta que cuando ejecuto la siguiente sentencia: waitrun("fe.exe",0),
estoy mandando un formulario XML a un servidor de la AFIP (que es el agente de recaudación fiscal).
para que éste me autorice la factura solicitada y me devuelva el número de factura.
El problema es que a veces, tarda mucho tiempo en responder, ya sea por problemas de internet o por
otras razones, mientras tanto, cuando la espera es muy prolongada, el usuario se queda con esperando
sin saber que hacer.
Cuando pasa eso, y no siga esperando, le he asignado a la tecla F12 un bat 'cancelar.bat',
que cancela el programa 'FE.EXE' con TASKKILL.
La gran pregunta es:
¿ Existe alguna manera de usar un TIMER u otra cosa para poder controlar el tiempo de respuesta ?
Es decir, ¿ poder user un timer para que por ejemplo a los 10 segundos de no tener respuesta del servidor,
ejecute 'cancelar.bat' en forma automática sin hacer la cancelación manual con la tecla F12 ?
Muchas gracias !
[ENGLISH]
The program in question is about electronic invoicing (Argentina).
It turns out that when I run the following statement: waitrun ("fe.exe", 0),
I am sending an XML form to an AFIP server (which is the tax collection agent).
so that he authorizes me the requested invoice and returns the invoice number to me.
The problem is that sometimes, it takes a long time to respond, either due to internet problems or
other reasons, meanwhile, when the wait is very long, the user is left waiting
Without knowing what to do.
When that happens, and don't keep waiting, I have given the F12 key a bat 'cancel.bat',
which cancels the 'FE.EXE' program with TASKKILL.
The big question is:
Is there a way to use a TIMER or something else to be able to control the response time?
That is, can you use a timer so that, for example, after 10 seconds of not having a response from the server,
run 'cancel.bat' automatically without doing manual cancel with the F12 key?
Thanks a lot !
TIMER CANCELACION PROGRAMA
TIMER CANCELACION PROGRAMA
[url=http://drugstoreviewer.com/]drugstoreviewer.com[/url]
Re: TIMER CANCELACION PROGRAMA
Muestra como estas haciendo, o intenta con este MsgRun()
Regards, saludos.
Code: Select all
/*
MsgWait y MsgRun no se muestran correctamente bajo 32 bits, el
cálculo de coordenadas no es correcto pues el texto de cuerpo
se recorta:
Moises,
En source\function\msgrun.prg hay que modificar estas líneas asi:
Código:
ACTIVATE DIALOG oDlg CENTER ;
ON PAINT oDlg:Say( 11, 0, xPadC( oDlg:cMsg, nWidth ),,,, .T. )
Antonio Linares
www.fivetechsoft.com
*/
#Include "FiveWin.Ch"
//----------------------------------------------------------------------------//
// http://forums.fivetechsupport.com/viewtopic.php?f=3&t=34020
function MsgRun( cCaption, cTitle, bAction, oWndParent ) // MUDEI: 24/07/2017 - Joao
LOCAL oDlg, nWidth, uReturn, aGrad
/*
DEFAULT cCaption := "Please, wait...",;
bAction := { || WaitSeconds( 1 ) }
*/
DEFAULT cCaption := "Por Favor, Espere...", ;
bAction := { || WaitSeconds( 1 ) }
// Modelos de gradient
// aGrad := { { 0.5, CLR_HRED,CLR_WHITE},{ 0.5,CLR_WHITE,CLR_HRED } }
// aGrad := { { 0.30, CLR_HRED, CLR_WHITE},{ 0.70, CLR_WHITE, CLR_HRED } }
// gostei assim, mas gosto e que nem friozo... cada um tem o seu... kkkkkkk
aGrad := { { 0.30, CLR_BLACK, CLR_YELLOW},{ 0.70, CLR_YELLOW, CLR_BLACK } }
/* // assim, todos os dialogos assumem o gradiente, nao gostei.
// Nao testei na window(janela) creio fique show().
SetDlgGradient( { {0.30,CLR_HRED,CLR_WHITE}, {0.70,CLR_WHITE,CLR_HRED} } )
*/
DEFINE FONT oFnt NAME "Ms Sans Serif" SIZE 0, -12 BOLD
DEFINE FONT oFont NAME "Ms Sans Serif" SIZE 0, -14 BOLD
IF cTitle == NIL
// DEFINE DIALOG oDlg ;
DEFINE DIALOG oDlg GRADIENT aGrad ; // usando gradient
FROM 0,0 TO 3, Len( cCaption ) + 4 ;
STYLE nOr( DS_MODALFRAME, WS_POPUP )
/* ;
COLORS CLR_BLACK, CLR_YELLOW */
ELSE
// DEFINE DIALOG oDlg ;
DEFINE DIALOG oDlg GRADIENT aGrad ; // usando gradient
FROM 0,0 TO 4, Max( Len( cCaption ), Len( cTitle ) ) + 4 ;
TITLE cTitle ;
STYLE DS_MODALFRAME
/* ;
COLORS CLR_BLACK, CLR_YELLOW */
ENDIF
oDlg:bStart := { || uReturn := Eval( bAction, oDlg ), oDlg:End(), SysRefresh() }
oDlg:cMsg := cCaption
nWidth := oDlg:nRight - oDlg:nLeft
SET FONT OF oDlg TO oFnt
ACTIVATE DIALOG oDlg ON PAINT oDlg:SayText( oDlg:cMsg ) ;
ON INIT oDlg:Center( oWndParent )
return uReturn
/* // antigo
Function MsgRun( cCaption, cTitle, bAction )
Local oDlg, nWidth, oFnt, oFont, oBrush
DEFAULT cCaption := "Por Favor, Espere... ",;
bAction := { || WaitSeconds( 1 ) }
DEFINE FONT oFnt NAME "Ms Sans Serif" SIZE 0, -12 BOLD
DEFINE FONT oFont NAME "Ms Sans Serif" SIZE 0, -14 BOLD
IF cTitle == Nil
DEFINE DIALOG oDlg ;
FROM 0,0 TO 3, Len( cCaption ) + 4 ;
STYLE nOr( DS_MODALFRAME, WS_POPUP ) ;
COLOR nRGB( 000, 000, 000 ), nRGB( 135, 206, 235 )
oDlg:lHelpIcon := .F. // ok
ELSE
DEFINE DIALOG oDlg ;
FROM 0,0 TO 4, Max( Len( cCaption ), Len( cTitle ) ) + 4 ;
TITLE cTitle ;
STYLE nOR( DS_MODALFRAME ) ;
COLOR nRGB( 000, 000, 000 ), nRGB( 135, 206, 235 )
oDlg:lHelpIcon := .F. // ok
ENDIF
oDlg:bKeyDown = { | nKey | IF( nKey == VK_ESCAPE, ( oDlg:End() ), ) }
oDlg:bStart := { || Eval( bAction, oDlg ), oDlg:End(), SysRefresh() }
oDlg:cMsg := cCaption
nWidth := oDlg:nRight - oDlg:nLeft
SET FONT OF oDlg TO oFnt
//-> Modificado By Antonio Linares 26/10/2007 - Correcao de Bug
ACTIVATE DIALOG oDlg CENTERED ;
ON PAINT oDlg:Say( 11, 0, xPadC( oDlg:cMsg, nWidth ),,,, .T. )
oFnt:End()
oFont:End()
RETURN NIL
*/
//---------------------------------------------------------------------------//
Function WaitSeconds( nSecs )
Local nStart := GetTickCount()
DEFAULT nSecs := 1
While GetTickCount() - nStart < ( 1000 * nSecs )
Enddo
Return Nil
//---------------------------------------------------------------------------//
Function MsgWait( cCaption, cTitle, nSeconds )
DEFAULT nSeconds := 4
Return MsgRun( cCaption, cTitle, { || WaitSeconds( nSeconds ) } )
//---------------------------------------------------------------------------//
Function StopUntil( bBlock )
DO WHILE !Eval( bBlock )
WaitMessage()
SysRefresh()
ENDDO
Return Nil
//---------------------------------------------------------------------------//
João Santos - São Paulo - Brasil
Re: TIMER CANCELACION PROGRAMA
João Santos - São Paulo - Brasil
Re: TIMER CANCELACION PROGRAMA
Pedro:
Con un cartel en pantalla, un for y un syswait() provocas la espera
Saludos,
Daniel Puente
Santa Cruz, Argentina
Con un cartel en pantalla, un for y un syswait() provocas la espera
Code: Select all
winexec( (wPathB)+"\"+cTexto,1)
SYSREFRESH()
MSGRUN("Esperando respuesta Servidor AFIP...","Conectando con AFIP",{|| RET:=FEejecuta(cticket,cDir,wLfact,cFormaPago,cEntregado,cVuelto,cAtiende,cNg,cIva,wIva21,wIva10,cNgIF21,cNgIF10,cCodTarjeta,cTarjeta,cNTarjeta,cCupon)})
STATIC Function FEejecuta(cTicket,cDir,wlFact,cFormaPago,cEntregado,cVuelto,cAtiende,cNg,cIva,wIva21,wIva10,cNgIF21,cNgIF10,cCodTarjeta,cTarjeta,cNTarjeta,cCupon)
.......
FOR I:=1 TO oApp:cFESeconds
SYSWAIT(1)
...
IF FILE('any2cae.csv')
FOR J:=1 TO 3
Result:=MEMOREAD('any2cae.csv')
IF LEN(RTRIM(memoline(result,254,1))) >= 85 .OR. MLCOUNT(result) > 1
EXIT
ENDIF
RET:=PROCESACAE(result,cFormaPago,cEntregado,cVuelto,cAtiende,cNg,cIva,wIva21,wIva10,cNgIF21,cNgIF10,cCodTarjeta,cTarjeta,cNTarjeta,cCupon)
...
IF I == oApp:cFESeconds
MSGSTOP('NO FUE POSIBLE LEER LA RESPUESTA FISCAL',oemtoansi('Verifique la conexi¢n a internet y los datos ingresados'))
RET:=.F.
ENDIF
NEXT
...
Daniel Puente
Santa Cruz, Argentina
Re: TIMER CANCELACION PROGRAMA
Gracias Daniel !
[url=http://drugstoreviewer.com/]drugstoreviewer.com[/url]