Página 1 de 1

Atualização Automática do TBrowse

Enviado: 07 Out 2006 18:38
por Dri
Hi!

People, é o seguinte...
Tem um sistema que dou manutenção e tem um arquivo que controla os pedidos e este arquivo fica aberto num TBrowse pelo pessoal de vendas (três usuários) quase o dia todo.
Para que o arquivo seja atualizado, é necessário que o usuário pressione uma tecla de função. Aí os pedidos que já foram atendidos somem da tela do TBrowse porque a tecla de função faz um "Refresh".

O problema é que os usuários invocaram que não querem mais pressionar esta tecla de função... Querem que a cada 5 segundos, este "Refresh" seja feito automaticamente.

Estou pensando um usar o comando INKEY(5)... Quando chegar no tratamento das teclas, se nenhuma foi pressionada, faço um "refresh" e retorno ao WHILE que faz um STABILIZE.

Esta é a melhor solução?

Peço sugestões!

Enviado: 07 Out 2006 20:16
por evaldo
Essa rotina eu utilizo ha muito tempo, tenho cliente que tem mais de 20 vendedor passando venda ao mesmo tempo.

Código: Selecionar todos

DO WHILE  .T.
     ..
     nTecla := NavegaCx(oVenda,"PosVenda")
     ..
END

***********************      
FUNCTION NavegaCx(o,f)
***********************
   //
   LOCAL nTecla := TeclaCx(o,f)
   //
   IF (nTecla == K_DOWN)
      o:down()
   ELSEIF (nTecla == K_UP)   
      o:up()
   ELSEIF (nTecla == K_PGDN)   
      o:pageDown()
   ELSEIF (nTecla == K_PGUP)   
      o:pageUp()
   ELSEIF (nTecla == K_CTRL_PGUP)   
      o:goTop()
   ELSEIF (nTecla == K_CTRL_PGDN)   
      o:gobottom()
   ELSEIF (nTecla == K_RIGHT)   
      o:right()
   ELSEIF (nTecla == K_LEFT)   
      o:left()   
   ELSEIF (nTecla == K_CTRL_RIGHT)   
      o:panright()
   ELSEIF (nTecla == K_CTRL_LEFT)   
      o:panleft()
   ELSEIF (nTecla == K_HOME)
      o:panhome()
   ELSEIF (nTecla == K_END)
      o:panend()
   END
   //
   RETURN(nTecla)
*******************************************************************************
FUNCTION TeclaCx(o,f)
*********************
   //
   LOCAL nTecla := nTempo := 0
   //
   WHILE nTecla = 0
      //
      nTecla:=INKEY(.5)
      //
      o : deHilite()
      o : colorRect({o:rowPos,o:leftVisible,o:rowPos,o:rightVisible},{2,1})
      o : refreshCurrent()               
      //
      IF nTempo = 4 .AND. VALTYPE(o)="O" .AND. f=NIL
         o : refreshAll()
         o : deHilite()
         o : colorRect({o:rowPos,o:leftVisible,o:rowPos,o:rightVisible},{6,1})         
         o : forceStable()
         nTempo:=0
      ELSEIF nTempo = 4 .AND. VALTYPE(f)="C"
         &f()
         nTempo:=0   
      END
      //
      nTempo++
      //
   ENDDO
   //
RETURN(nTecla)
*****************************************************************************
PROCEDURE PosVenda()
********************
   //
   LOCAL lEOF := Venda->(EOF())
   LOCAL nReg := Venda->(RECNO())
   //
   SELECT Venda
   SET ORDE TO 1 
   GO TOP
   //
   Venda->(DBSEEK("1")) 
   nVenda  := 0
   WHILE Venda->(!EOF())
      IF &cVenda
         nVenda++
      END
      Venda->(DBSKIP())
   END
   //
   IF nVenda = 0
      Venda->(DBGOBOTTOM())
      Venda->(DBSKIP())
   ELSE
      Venda->(DBGOTO( nReg ))
   END
   //
   oVenda:refreshAll()
   oVenda:forceStable()
   //       
   RETURN NIL

Enviado: 08 Out 2006 06:57
por Dri
Hi, Evaldo!

Muito interessante sua rotina...
Vou adaptar minhas necessidades a ela.

Muito obrigada!