ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

DBGRID com Saldo Anterior

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
almir.jg
Novato
Novato


Registrado: Quarta-Feira, 3 de Março de 2004
Mensagens: 87

MensagemEnviada: Sex Mai 23, 2014 1:10 pm    Assunto: DBGRID com Saldo Anterior Responder com Citação

Very Happy Ola para todos Very Happy

Estou construindo um sistema financeiro, neste sistema tenho a conciliação bancária, para cada conta editada tenho um formulário onde são apresentados todos os lançamentos para cada conta, (data, historico, D/C e valor do lancamento). Me falta a coluna com o SALDO ATUAL. É ai que o "bicho pega". Vamos lá então:
Não estou procurando aqui um calculo para se fazer o Saldo atual, nem criar uma stored procedure para construir esta funcionalidade mas sim, tentando entender "o como fazer" utilizando um CalcFieds, para que este saldo seja apresentado de forma dinamica.
Código:

procedure TFrmEditConta.qLctBeforeOpen(DataSet: TDataSet);
begin
  vSaldo_Anterior := qrySLD_ABERTURA.AsCurrency;
end;


Código:
 
procedure TFrmEditConta.qLctCalcFields(DataSet: TDataSet);
begin
  qLctSaldo_Atual.Value := vSaldo_Anterior +     qLctVLR_MOVIMENTO.AsCurrency;
  vSaldo_Anterior := qLctSaldo_Atual.AsCurrency;
end;

1)Começo o procedimento criando uma variavel "SALDO ANTERIOR" e populo éla com o saldo desejado.
2)Criei um campo (CALCULATED) tipo currency "SALDO_ATUAL" na query dos lançamentos.
3)No CalcFields da query dos lançamentos efetuo o seguinte calculo:
3.1) Populo o SALDO ATUAL com o valor do SALDO ANTERIOR + o VALOR DO MOVIMENTO.
3.2) Em seguida repopulo o SALDO_ANTERIOR com o valor do SALDO_ATUAL, para que este saldo anterior possa ser utilizado na proxima linha.

Até este momento tudo ocorreu perfeitamente "como manda o figurino".
O problema esta quando faço a rolagem do GRID. A variavel SALDO_ANTERIOR perde seu valor e da um efeito em castata para todo o SALDO_ATUAL do GRID.

Idea Idea Idea Se alguem tiver uma Idea me avisem.

Algumas premissas para o que estou desenvolvendo:
1. Tem que ser DBGRID.
2. Tem que ser de forma dinamica.
3. Não pode ser stored procedure (o sistema é multi banco)-(ai fica fácil).
4. Não necessariamente tem que ser no CALCFIELDS.

Talvez o meu entendimendo do funcionamento do CALCFIELDS não seja suficiente para esta implementação.

Ajudas pequenas ou grandes serão bem vindas, só peço que atentem ao enunciado.

Valew. Rolling Eyes
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
almir.jg
Novato
Novato


Registrado: Quarta-Feira, 3 de Março de 2004
Mensagens: 87

MensagemEnviada: Sex Mai 23, 2014 5:16 pm    Assunto: Complementando Responder com Citação

Estou fazendo um estudo sobre o evento CALCFIELDS. Hoje passei a tarde lendo e procurando entendimento sobre o assunto, descobri algumas coisas interessantes que são:
Propriedade do DATASET: AutoCalcFields = FALSE --> Determina quando e como o evento ONCALCFIELDS é acionado e, pode ser acionado quando:
O conjunto de dados é aberto.
O conjunto de dados é colocado em estado DSEDIT .
Um registro é recuperado de um banco de dados

AutoCalcFields=TRUE
Quando o focomuda de um controle visual para outro
Quando reordenar a o grid
Quando alterar a largura de uma coluna, etc.


Se um aplicativo permite que os usuários alterem dados , OnCalcFields é freqüentemente acionado. Nestes casos, um aplicativo pode definir AutoCalcFields para False para reduzir a freqüência com que o evento ocorre OnCalcFields e com os quais a pesquisa valores são buscadas.

CUIDADO: Não faça alterações no DATASET proprietário do CALCFIELDS (dentro dele) isto irá gerar uma chamada recursiva.




Fonte: http://docwiki.embarcadero.com/Libraries/XE5/en/Data.DB.TDataSet.AutoCalcFields

Bem hoje aprendi mais um pouco e resolvi compartilhar.

Ainda não desisti de tentar obter o efeito desejado através deste evento.

Escreva, coloque a sua mensagem. Laughing
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB