Puxar saldo fluxo de caixa(mensal)

Firebird

17/09/2007

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.


Adriano_servitec

Adriano_servitec

Curtidas 0

Respostas

Adriano_servitec

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

Adriano_servitec

17/09/2007

Tambem não estou obtendo o resultado esperado com uma SP
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

Adriano_servitec

17/09/2007

Pessoal, preciso de ajuda neste select (Acho que assim vou conseguir fazer a soma deste bendito caixa)

--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

Adriano_servitec

17/09/2007

Não sei se acertei galera, mais por enquanto o resultado eu obtive assim

--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

Adriano_servitec

17/09/2007

Não deu certo não, ta a maior furada esta select

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

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?


GOSTEI 0
Adriano_servitec

Adriano_servitec

17/09/2007

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

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;


GOSTEI 0
POSTAR