Problema com Flagship
Enviado: 27 Jan 2019 21:04
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.
Pra colocar gráfico de tempo, coloquei pra processar pelo arquivo de movimentação.
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)
É 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
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
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)