Puxar saldo fluxo de caixa(mensal)
Pessoal, estou querendo fazer um fluxo de caixa (mensal), mais nao consigo fazer puxar os saldos de cada mes
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.
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
Curtidas 0
Respostas
Adriano_servitec
17/09/2007
To tentando com o ListView, mais não estou conseguindo resultado
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
Adriano_servitec
17/09/2007
Tambem não estou obtendo o resultado esperado com uma SP
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?
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
Adriano_servitec
17/09/2007
Pessoal, preciso de ajuda neste select (Acho que assim vou conseguir fazer a soma deste bendito caixa)
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
--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
=====Recebimento====Pagamento
somas=== (27,50)======4,50
sald.ant==(500.00)============
sald.atu============523.00
totais===527.50=)=====527.50
Alguém pode me ajudar?
Tá difícil :D
GOSTEI 0
Adriano_servitec
17/09/2007
Não sei se acertei galera, mais por enquanto o resultado eu obtive assim
Se alguém tiver um jeito melhor e correto de puxar estes saldos eu agradeço
Adriano.
--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
Adriano_servitec
17/09/2007
Não deu certo não, ta a maior furada esta select
Será que é tão dificil de fazer isso?
Quero apenas vir puxando os saldos e somando no mes os valores.
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
Adriano_servitec
17/09/2007
Esta SP me mostra o sado DIÁRIO, mais eu preciso uma MENSAL
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?
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
Adriano_servitec
17/09/2007
Resolvido
Mais o pior foi que eu usei outro datasource no DBText, por isso o saldo não batia :shock:
Bom enfim tudo resolvido.
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
Walterjp
17/09/2007
onde vc aplicou esse codigo?
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;
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