FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour TIMER CANCELACION PROGRAMA
Posts: 117
Joined: Sun Oct 08, 2017 12:51 PM
TIMER CANCELACION PROGRAMA
Posted: Wed Nov 18, 2020 02:46 PM

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 !

Pedro L. Lavallen

San Luis (Capital), Argentina
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: TIMER CANCELACION PROGRAMA
Posted: Wed Nov 18, 2020 03:20 PM
Muestra como estas haciendo, o intenta con este MsgRun()


Code (fw): Select all Collapse
/*
    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
    <!-- w --><a class="postlink" href="http://www.fivetechsoft.com">www.fivetechsoft.com</a><!-- w -->
*/

#Include "FiveWin.Ch"

//----------------------------------------------------------------------------//

// <!-- l --><a class="postlink-local" href="http://forums.fivetechsupport.com/viewtopic.php?f=3&t=34020">viewtopic.php?f=3&t=34020</a><!-- l -->

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

//---------------------------------------------------------------------------//


Regards, saludos.
Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: TIMER CANCELACION PROGRAMA
Posted: Wed Nov 18, 2020 03:43 PM
Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 24
Joined: Thu Oct 02, 2014 03:51 AM
Re: TIMER CANCELACION PROGRAMA
Posted: Thu Nov 19, 2020 12:23 PM
Pedro:

Con un cartel en pantalla, un for y un syswait() provocas la espera

Code (fw): Select all Collapse
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
...


Saludos,
Daniel Puente
Santa Cruz, Argentina
Posts: 117
Joined: Sun Oct 08, 2017 12:51 PM
Re: TIMER CANCELACION PROGRAMA
Posted: Tue Dec 08, 2020 09:43 AM

Gracias Daniel !

Pedro L. Lavallen

San Luis (Capital), Argentina

Continue the discussion