Fórum Puxar saldo fluxo de caixa(mensal) #58865
17/09/2007
0
Ou seja o que foi feito em janeiro puxar o saldo pra fevereiro
Algeum sabe me informar como fazer isso?
Uso firebird 2.0 e Delphi 7.
Adriano_servitec
Curtir tópico
+ 0Posts
18/09/2007
Adriano_servitec
var somaP_R, saldoanterior, saldoatual : real; ListItem : TListItem; begin saldoanterior:=0; somaP_R:=0; saldoatual:=0; //-------------------------calculos soma de saldos----------------------------------- with dm.zqFluxoCaixaLW do begin close; sql.clear; sql.add(´select matricula, associado, historico, e_s, referentemesano, ´ +´conta, descrconta, coalesce(sum(recebimento),0)as Recebimento, ´ +´coalesce(sum(pagamento),0)as Pagamento, ´ +´coalesce(sum(recebimento),0) - coalesce(sum(pagamento),0)as saldo from fluxocaixa´); sql.add(´where substring(referentemesano from 1 for 2) = :pMes and ´ +´ substring(referentemesano from 4 for 7) = :pAno group by 1,2,3,4,5,6,7 order by conta ´); ParamByName(´PMes´).Value:=ComboBox2.Text; ParamByName(´PAno´).Value:=MaskEdit4.Text; Open; end; // Limpa o Conteudo Existente no ListView ListView1.Items.Clear; // Posicionamos no Primeiro Registro dm.zqFluxoCaixaLW.First; while not dm.zqFluxoCaixaLW.Eof do begin somaP_R:=dm.zqFluxoCaixaLW.fieldbyname(´saldo´).asFloat + somaP_R; saldoanterior:= SomaP_R; saldoatual:= saldoanterior - SomaP_R; ListItem:= ListView1.Items.Add; // Adiciona dados a Coluna // Verifica qual o Icone deve ser apresentado if dm.zqFluxoCaixaLW.FieldByName(´Conta´).Value = ´1´ then ListItem.ImageIndex := 0 else ListItem.ImageIndex := 1; ListItem.Caption :=dm.zqFluxoCaixaLW.FieldByName(´Conta´).Value; ListItem.SubItems.Add(dm.zqFluxoCaixaLW.FieldByName(´descrconta´).asString); ListItem.SubItems.Add(dm.zqFluxoCaixaLW.FieldByName(´historico´).asString); ListItem.SubItems.Add(dm.zqFluxoCaixaLW.FieldByName(´referentemesano´).asString); ListItem.SubItems.Add(format(´¬15.2n´,[dm.zqFluxoCaixaLW.FieldByName(´recebimento´).asfloat])); ListItem.SubItems.Add(format(´¬15.2n´,[dm.zqFluxoCaixaLW.FieldByName(´pagamento´).asfloat])); ListItem.SubItems.Add(format(´¬15.2n´,[somaP_R])); ListItem.SubItems.Add(format(´¬15.2n´,[saldoanterior])); ListItem.SubItems.Add(format(´¬15.2n´,[saldoatual])); dm.zqFluxoCaixaLW.Next; end;
Gostei + 0
18/09/2007
Adriano_servitec
CREATE PROCEDURE SALDOCAIXA ( datainicial date) returns ( sequencia integer, mespgto date, historico varchar(80), conta varchar(10), descrconta varchar(80), e_s char(1), historicocaixa varchar(40), valorpg numeric(15,2), saldo numeric(15,2)) as declare variable pagamento double precision; declare variable recebimento double precision; declare variable saldoatual double precision; begin select sum(valorpg) from fluxocaixa where e_s = ´R´ and mespgto < :DATAINICIAL into :Pagamento; select sum(valorpg) from fluxocaixa where e_s = ´P´ and mespgto < :DATAINICIAL into :Recebimento; saldoatual = coalesce(recebimento,0) - coalesce(pagamento,0) ; sequencia =0 ; mespgto = datainicial - 1; e_s = ´´; historicoCaixa = ´SALDO ANTERIOR´; valorpg = saldoatual; saldo = saldoatual; suspend; for select sequencia, mespgto, historico, conta, descrconta, e_s, historicoCaixa, COALESCE(valorpg,0),COALESCE(valorpg,0) from fluxocaixa where mespgto >= :datainicial order by mespgto, sequencia into :sequencia, :mespgto, :historico, :conta, :descrconta, :e_s, :historicoCaixa, :valorpg, :saldo do begin if (e_s = ´R´) then saldo = saldoatual + :valorpg; if (e_s = ´P´) then saldo = saldoatual - :valorpg; saldoatual = :saldo; suspend; end end
Mais me parece que não esta certo. Caso eu pegue algum valor anterior que não tem no saldo, esta puxando certo, mais se eu pego um valor que tem saldo anterior, me parece não puxar o saldo como eu quero.
Alguem sabe como fazer, com que o programa vem puxando saldo anterior, somando com o saldo atual?
Gostei + 0
19/09/2007
Adriano_servitec
--soma a coluna recebimento e pagamento cfe. o mes select coalesce(sum(recebimento),0) Recebimento, coalesce(sum(pagamento),0) Pagamento, --soma o saldo anterior (select coalesce(sum(recebimento),0) from fluxocaixa where extract(month from mespgto) < :pMes and extract(year from mespgto) <= :pAno) - (select coalesce(sum(pagamento),0) from fluxocaixa where extract(month from mespgto) < :pMes and extract(year from mespgto) <= :pAno) Saldo_Anterior, --soma o saldo atual (select coalesce(sum(recebimento),0) from fluxocaixa where extract(month from mespgto) < :pMes and extract(year from mespgto) <= :pAno) - (select coalesce(sum(pagamento),0) from fluxocaixa where extract(month from mespgto) < :pMes and extract(year from mespgto) <= :pAno) + (select coalesce(sum(recebimento),0) from fluxocaixa where extract(month from mespgto) = :pMes and extract(year from mespgto) = :pAno) - (select coalesce(sum(recebimento),0) from fluxocaixa where extract(month from mespgto) = :pMes and extract(year from mespgto) = :pAno) Saldo_Atual, --soma os totais dos recebimento e pagamento no mes + o saldo atual (select coalesce(sum(pagamento),0) from fluxocaixa where extract(month from mespgto) < :pMes and extract(year from mespgto) <= :pAno) + (select coalesce(sum(recebimento),0) from fluxocaixa where extract(month from mespgto) = :pMes and extract(year from mespgto) = :pAno) SomaRec from fluxocaixa where extract(month from mespgto) = :pMes and extract(year from mespgto) = :pAno
Explicando
Preciso mostrar os saldos e as somas cfe. o mes
no primeiro select esta correto
soma recebimento e pagamentos cfe. o mes digitado no parametro
no segundo subselect esta mostrando o saldo anterior certo também
agora o subselect 3 e o subselect 4 ai o bicho pegou :D
Resumindo o que eu quero
Alguém pode me ajudar?
Tá difícil :D
Gostei + 0
19/09/2007
Adriano_servitec
--soma a coluna recebimento e pagamento cfe. o mes select coalesce(sum(recebimento),0) Recebimento, coalesce(sum(pagamento),0) Pagamento, --soma o saldo anterior (select coalesce(sum(recebimento),0) from fluxocaixa where extract(month from mespgto) < :pMes and extract(year from mespgto) <= :pAno) - (select coalesce(sum(pagamento),0) from fluxocaixa where extract(month from mespgto) < :pMes and extract(year from mespgto) <= :pAno) Saldo_Anterior, --soma o saldo atual (select coalesce(sum(recebimento),0) from fluxocaixa where extract(month from mespgto) = :pMes and extract(year from mespgto) = :pAno) - (select coalesce(sum(pagamento),0) from fluxocaixa where extract(month from mespgto) = :pMes and extract(year from mespgto) = :pAno) + (select coalesce(sum(recebimento),0) from fluxocaixa where extract(month from mespgto) < :pMes and extract(year from mespgto) <= :pAno) - (select coalesce(sum(pagamento),0) from fluxocaixa where extract(month from mespgto) < :pMes and extract(year from mespgto) <= :pAno) Saldo_Atual, --soma os totais dos recebimento e pagamento no mes + o saldo atual (select coalesce(sum(pagamento),0) from fluxocaixa where extract(month from mespgto) < :pMes and extract(year from mespgto) <= :pAno) + (select coalesce(sum(recebimento),0) from fluxocaixa where extract(month from mespgto) = :pMes and extract(year from mespgto) = :pAno) + (select coalesce(sum(recebimento),0) from fluxocaixa where extract(month from mespgto) < :pMes and extract(year from mespgto) <= :pAno) - (select coalesce(sum(pagamento),0) from fluxocaixa where extract(month from mespgto) < :pMes and extract(year from mespgto) <= :pAno) SomaRec from fluxocaixa where extract(month from mespgto) = :pMes and extract(year from mespgto) = :pAno
Se alguém tiver um jeito melhor e correto de puxar estes saldos eu agradeço
Adriano.
Gostei + 0
19/09/2007
Adriano_servitec
with dm.zqSumSaldoFluxoCaixa do begin close; SQL.clear; sql.add(´select coalesce(sum(recebimento),0) Recebimento, ´ +´coalesce(sum(pagamento),0) Pagamento, ´ +´(select coalesce(sum(recebimento),0) from fluxocaixa where extract(month from mespgto) < :pMes ´ +´and extract(year from mespgto) <= :pAno) - (select coalesce(sum(pagamento),0) from fluxocaixa ´ +´where extract(month from mespgto) < :pMes and extract(year from mespgto) <= :pAno) Saldo_Anterior, ´ +´(select coalesce(sum(recebimento),0) from fluxocaixa where extract(month from mespgto) = :pMes ´ +´and extract(year from mespgto) = :pAno) - (select coalesce(sum(pagamento),0) from fluxocaixa ´ +´where extract(month from mespgto) = :pMes and extract(year from mespgto) = :pAno) + ´ +´(select coalesce(sum(recebimento),0) from fluxocaixa where extract(month from mespgto) < :pMes ´ +´and extract(year from mespgto) <= :pAno) - (select coalesce(sum(pagamento),0) from fluxocaixa ´ +´where extract(month from mespgto) < :pMes and extract(year from mespgto) <= :pAno) ´ +´Saldo_Atual, ´ +´(select coalesce(sum(pagamento),0) from fluxocaixa where extract(month from mespgto) < :pMes ´ +´and extract(year from mespgto) <= :pAno) + (select coalesce(sum(recebimento),0) from fluxocaixa ´ +´where extract(month from mespgto) = :pMes and extract(year from mespgto) = :pAno) ´ +´+ (select coalesce(sum(recebimento),0) from fluxocaixa where extract(month from mespgto) < :pMes ´ +´and extract(year from mespgto) <= :pAno) - (select coalesce(sum(pagamento),0) from fluxocaixa ´ +´where extract(month from mespgto) < :pMes and extract(year from mespgto) <= :pAno) SomaRec ´ +´from fluxocaixa ´ +´where extract(month from mespgto) = :pMes ´ +´and extract(year from mespgto) = :pAno ´); ParamByName(´PMes´).Value:=StrToInt(ComboBox3.Text); ParamByName(´PAno´).Value:=StrToInt(Edit2.Text); Open; end;
Será que é tão dificil de fazer isso?
Quero apenas vir puxando os saldos e somando no mes os valores.
Gostei + 0
20/09/2007
Adriano_servitec
CREATE PROCEDURE SALDO_CAIXAMES (
datainicial date)
returns (
mespgto date,
saldoanterior numeric(15,2),
pagamento numeric(15,2),
recebimento numeric(15,2),
saldoatual numeric(15,2))
as
declare variable valorpagamento numeric(15,2);
declare variable valorrecebimento numeric(15,2);
declare variable datafinal date;
begin
mespgto = datainicial;
-- datafinal será sempre a data atual do sistema --
datafinal = current_date;
-- **************************************************************
-- estas linhas estão fora do while para que sejam -- *
-- executadas apenas 1 vez, aumentando a performance. -- *
-- depois apenas faço a soma dos valores obtidos dia a dia -- *
-- para sempre obter o saldo anterior correto -- *
-- **************************************************************
select coalesce(sum(recebimento),0)
from fluxocaixa
where mespgto < :mespgto into :valorrecebimento;
select coalesce(sum(pagamento),0)
from fluxocaixa
where mespgto < :mespgto into :valorpagamento; -- *
-- obtenho o saldo anterior subtraindo o recebimento do pagamento
saldoanterior = valorrecebimento - valorpagamento;
-- **************************************************************
-- verifico o movimento dia a dia, até o dia anterior à data atual
while (mespgto < datafinal) do
begin
-- somo os recebimentos do dia
select coalesce(sum(recebimento),0)
from fluxocaixa
where mespgto = :mespgto into :recebimento;
-- somo os pagamentos do dia
select coalesce(sum(pagamento),0)
from fluxocaixa
where mespgto = :mespgto into :pagamento;
saldoatual = saldoanterior + (recebimento - pagamento);
-- se houve algum movimento no dia, exibo o registro
if ((recebimento > 0) or (pagamento > 0)) then
suspend;
mespgto = mespgto + 1;
saldoanterior = saldoanterior + (recebimento - pagamento);
end
-- somo os recebimentos da data atual
select coalesce(sum(recebimento),0)
from fluxocaixa
where mespgto = :mespgto into :recebimento;
-- somo os pagamentos da data atual
select coalesce(sum(pagamento),0)
from fluxocaixa
where mespgto = :mespgto into :pagamento;
saldoatual = saldoanterior + (recebimento - pagamento);
-- exibe o registro com o saldo do dia atual
suspend;
end
Alguém pode me ajudar?
Gostei + 0
20/09/2007
Adriano_servitec
with dm.zqSumSaldoFluxoCaixa do begin close; SQL.clear; sql.add(´select x.saldo_anterior, x.recebimento, x.pagamento, ´ +´(x.saldo_anterior + x.recebimento - x.pagamento) Saldo_Atual, ´ +´(x.saldo_anterior + x.recebimento) TotRecPagMes ´ +´from( ´ +´select first 1 ´ +´((select coalesce(sum(recebimento),0) from fluxocaixa where mespgto < :pdata)) - ´ +´((select coalesce(sum(pagamento),0) from fluxocaixa where mespgto < :pdata)) ´ +´as Saldo_Anterior , ´ +´(select coalesce(sum(recebimento),0) from fluxocaixa ´ +´where extract(month from mespgto) = :pmes and extract(year from mespgto) = :pano) recebimento, ´ +´(select coalesce(sum(pagamento),0) from fluxocaixa ´ +´where extract(month from mespgto) = :pmes and extract(year from mespgto) = :pano) pagamento ´ +´from fluxocaixa ´ +´) as x´); ParamByName(´Pdata´).Value:=StrToDate(Label20.Caption); ParamByName(´PMes´).Value:=StrToInt(ComboBox3.Text); ParamByName(´PAno´).Value:=StrToInt(Edit2.Text); Open; end;
Mais o pior foi que eu usei outro datasource no DBText, por isso o saldo não batia :shock:
Bom enfim tudo resolvido.
Gostei + 0
09/01/2008
Walterjp
em uma dataset?
with dm.zqSumSaldoFluxoCaixa do
begin
close;
SQL.clear;
sql.add(´select x.saldo_anterior, x.recebimento, x.pagamento, ´
+´(x.saldo_anterior + x.recebimento - x.pagamento) Saldo_Atual, ´
+´(x.saldo_anterior + x.recebimento) TotRecPagMes ´
+´from( ´
+´select first 1 ´
+´((select coalesce(sum(recebimento),0) from fluxocaixa where mespgto < :pdata)) - ´
+´((select coalesce(sum(pagamento),0) from fluxocaixa where mespgto < :pdata)) ´
+´as Saldo_Anterior , ´
+´(select coalesce(sum(recebimento),0) from fluxocaixa ´
+´where extract(month from mespgto) = :pmes and extract(year from mespgto) = :pano) recebimento, ´
+´(select coalesce(sum(pagamento),0) from fluxocaixa ´
+´where extract(month from mespgto) = :pmes and extract(year from mespgto) = :pano) pagamento ´
+´from fluxocaixa ´
+´) as x´);
ParamByName(´Pdata´).Value:=StrToDate(Label20.Caption);
ParamByName(´PMes´).Value:=StrToInt(ComboBox3.Text);
ParamByName(´PAno´).Value:=StrToInt(Edit2.Text);
Open;
end;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)