Fórum Problemas com onCalcFields #358035

06/05/2008

0

Bom dia..
Meu problema é o seguinte:
a cada registro tenho q calcular o saldo referente a movimentações anteriores. ex:

COD__DÉBITO___ CRÉDITO____CRE - DEB______SALDO
1_______100_______250 _________150________150
2_______300________50 ________ -250_______-100
3________10 _______ 10___________ 0_______-100
4_________0_______100_________ 100__________0
5________50_________0__________-50________-50
6________20_______500__________480_______ 430

Bom.. estou calculando isso em memória e está indo tudo bem, exceto quando eu movimento o scrool do DbGrid para cima, pois meu calculo tem q vir do primeiro registro para o último.
Se eu bloqueio o Cálculo meu Field fica nulo.
Eu consegui em alguns eventos do dbgrid da seguinte forma:
´SE CAMPO_SALDO FOR NULO ENTAO EXECUTA ONCALCFIELDS´
mas nao fico do jeito que eu necessito, pois eu não consegui achar um evento q executa na hora exata.

Agradecido


Diegolambaum

Diegolambaum

Responder

Posts

06/05/2008

Joaoshi

Colega, dependendo do volume de informações você poderia:

- Deixar a coluna CRE DEB e SALDO criadas (não como calcfields)
- Obter as informações COD, DÉBITO E CRÉDITO.
- Dar um disablecontrols no DataSet.
- Ler o arquivo do inicio ao fim e efetuar a soma.
- Dar um EnableControls

Se você estiver utilizando um SELECT poderia criar uma procedure para retornar os valores.

Espero ter ajudado.


Responder

Gostei + 0

06/05/2008

Diegolambaum

Bom.. o único CalcField é o Saldo e eu tenho uma quantidade enorme de registros e o meu cliente quer que vai saindo o saldo dessa forma.
ele já está funcionado.. só dá problema no calculo quando eu uso o scrool do dbgrid, pois ele executa o onCalcField e eu nao consigo nessa hora dar um first.. eu precisava mesmo de evento que executasse quando rolassem o scroll.
o dataset tem esse evento.. mas se uso um first lá ou algo parecido o sistema entra em redundância.


Responder

Gostei + 0

06/05/2008

Diegolambaum

mas essa dica foi uma grande ajuda
Obrigado


Responder

Gostei + 0

06/05/2008

Brunolspp

troque o tipo do campo de calcfield para internalcalc e no evento oncalcfield coloque o seguinte codigo:

if dataset.state = dsInternalCalc then
begin
....
//colocar os codigos dos campos calculados aqui
...
end;


Responder

Gostei + 0

06/05/2008

Diegolambaum

Intaum.. eu trabalho com tIBdatasets e não achei o tipo internalcalc
mesmo assim eu tentei esse codigo do .state mas nao deu certo
ao meu ponto de vista tudo que preciso é de um evento que execute quando o scrool do dbgrid role.. que ai nessa hora é eu dar um first e depois executar o onCalcField eu volto o registro pelo recno
Obrigado a todos


Responder

Gostei + 0

06/05/2008

Diegolambaum

Muito obrigado e Problema Resolvido
Utilizei o evento onDataChange do datasource e flags para controlar a hora certa de disparar os eventos
Bom.. essa foi a primeira vez que participo de um forum e espero participar mais vezes
Obrigado pela ajuda


Responder

Gostei + 0

06/05/2008

Ffabiop

Nesse caso acho que seria interessante usar o clientdataset e os campos agregados.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar