Problema com Flagship

Aqui é o lugar para bater papo e trocar idéias sobre os mais variados assuntos

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Problema com Flagship

Mensagem por JoséQuintas »

To falando que esse troço é esquisito....

É uma rotina meio básica.
Tem um arquivo com contas, e outra com movimentação.
A rotina vai recalcular os saldos.

Esta funciona, pego uma conta de cada vez do cadastro de contas, pesquiso na movimentação pra fazer os cálculos.

Código: Selecionar todos

#include "inkey.ch"

FUNCTION f_orgCx()

   LOCAL nSaldo, cConta, nKey := 0

   IF ! MsgNoYes( "Processo demorado. Confirma recalculo?" )
      RETURN NIL
   ENDIF
   IF ! AbreArquivos( "BCAIX", "BMVCX" )
      RETURN NIL
   ENDIF
   Mensagem( "Recalculando" )
   SELECT BMVCX
   SET ORDER TO 4
   SELECT BCAIX
   GOTO TOP
   DO WHILE nKey != K_ESC .AND. ! Eof()
      nSaldo := BCAIX->VALOR_INI
      SELECT BMVCX
      SEEK BCAIX->Cd_Caixa
      DO WHILE nKey != K_ESC .AND. BCAIX->Cd_Caixa == BMVCX->Cd_Caixa .AND. ! Eof()
         nKey := Inkey()
         nSaldo := nSaldo + iif( BMVCX->Flag == "C", BMVCX->Lan_Valor, 0 ) - iif( BMVCX->Flag == "D", BMVCX->Lan_Valor, 0 )
         IF BMVCX->Vl_Saldo != nSaldo // tentar agilizar
            BMVCX->( RecLock() )
            REPLACE BMVCX->Vl_Saldo WITH nSaldo
            BMVCX->( RecUnlock() )
         ENDIF
         SKIP
      ENDDO
      SELECT BCAIX
      RecLock()
      REPLACE ;
         BCAIX->Vl_Saldo WITH nSaldo, ;
         BCAIX->Dt_Saldo WITH Date()
      RecUnlock()
      SKIP
   ENDDO
   CLOSE DATABASES
   MsgExclamation( "Recalculo Efetuado" )

   RETURN NIL
Pra colocar gráfico de tempo, coloquei pra processar pelo arquivo de movimentação.

Código: Selecionar todos

#include "inkey.ch"

FUNCTION f_orgCx()

   LOCAL nSaldo, cConta, nKey := 0

   IF ! MsgNoYes( "Confirma recalcular caixa?" )
      RETURN NIL
   ENDIF
   IF ! AbreArquivos( "BCAIX", "BMVCX" )
      RETURN NIL
   ENDIF
   SELECT BMVCX
   bmvcx->( dbSetOrder(4) )
   bmvcx->( dbGoTop() )
   nAtual := 0
   nTotal := bmvcx->( LastRec() )
   SayScroll( "Iniciando do while" )
   SayScroll("")
   DO WHILE nKey != K_ESC .AND. ! bmvcx->( Eof() )
      cConta := BMVCX->cd_Caixa
      BCAIX->( dbSeek( BMVCX->cd_Caixa ) )
      nSaldo := BCAIX->VALOR_INI
      SayScroll( "Conta " + cConta )
      SayScroll("")
      SayScroll( "vai iniciar o do while" )
      SayScroll("")
      DO WHILE nKey != K_ESC .AND. cConta == BMVCX->Cd_Caixa .AND. ! BMVCX->( Eof() )
         SayScroll( "dentro do do while" )
         SayScroll( "data " + Dtoc( BMVCX->Data ) +  " " + Str( BMVCX->( RecNo() ) ) )
         SayScroll("")
         nKey := Inkey()
         nSaldo := nSaldo + iif( BMVCX->Flag == "C", BMVCX->Lan_Valor, 0 ) - iif( BMVCX->Flag == "D", BMVCX->Lan_Valor, 0 )
         IF BMVCX->Vl_Saldo != nSaldo // tentar agilizar
            BMVCX->( RecLock() )
            REPLACE BMVCX->Vl_Saldo WITH nSaldo
            BMVCX->( RecUnlock() )
         ENDIF
         BMVCX->( dbSkip() )
      ENDDO
      SELECT BCAIX
      BCAIX->( RecLock() )
      REPLACE ;
         BCAIX->Vl_Saldo WITH nSaldo, ;
         BCAIX->Dt_Saldo WITH Date()
      BCAIX->( RecUnlock() )
      SELECT BMVCX
   ENDDO
   CLOSE DATABASES
   MsgExclamation( "Recalculo Efetuado" )

   RETURN NIL
Coloquei várias mensagens pra tentar descobrir o problema.
Não entra no DO WHILE, dá erro fatal e o Flagship aborta, sem referência aonde foi o erro.

Durante o post pensei numa possibilidade.... atualizar saldo de conta que não existe no cadastro.....

Nota:
No Harbour sem problemas, o erro é só no Flagship (Pelo menos esta versão antiga, deveria se chamar FlagSHIT)
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Problema com Flagship

Mensagem por JoséQuintas »

Eureka, era aquilo mesmo! No Flagship não pode atualizar quando em Eof().

Mas aproveitando... a diferença entre Windows e Linux.
No Linux, trabalhar com DBF é bem mais rápido.
flagship.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Problema com Flagship

Mensagem por JoséQuintas »

flagship.png
No Flagship/Linux terminou em 11 minutos.
No Harbour/Windows, já se passaram 15 minutos e ainda vão mais 27 minutos.
O Linux está em uma máquina virtual, estou acessando remoto.
Já no Windows é local, máquina exclusiva.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Problema com Flagship

Mensagem por JoséQuintas »

harbourlinux.png
Já que estava testando e tinha que aguardar terminar.....

Fiz um teste com Harbour no Microsoft Linux.

De 42 minutos pra 11 minutos a diferença já era grande....
Mas 1 único minuto... aí é pra ficar triste....

Exatamente mesmos arquivos no Windows 10, mesmos fontes, mesmo Harbour 3.4 - inclusive acesso simultâneo aos mesmos arquivos.
Um rodando no prompt Windows e outro no prompt Linux/Windows.
De 42 minutos pra 1 minuto.

Dá o que pensar....
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder