[firebase-br] Store Procedure - Saldo Acumulado

Anderson Miranda Barrozo andersonpaduarj em gmail.com
Sex Maio 15 20:51:58 -03 2009


Grande,

         Adapte a sua necessidade.


CREATE PROCEDURE GERA_SALDOCAIXA (
    dataini date,
    datafim date)
returns (
    r_lancamento integer,
    r_data date,
    r_historico varchar(50),
    r_valor double precision,
    r_operacao char(1))
as
declare variable saldo_final double precision = 0.00;
declare variable saldo_ant_debito double precision = 0.00;
declare variable saldo_ant_credito double precision = 0.00;
begin
  /* Calcula o saldo anterior de DEBITOS e CREDITOS */
  SELECT coalesce(sum(tbcaixa.valor),0) FROM tbcaixa WHERE (tbcaixa.data <
:dataini and tbcaixa.operacao='D') into :saldo_ant_debito;
  SELECT coalesce(sum(tbcaixa.valor),0) FROM tbcaixa WHERE (tbcaixa.data <
:dataini and tbcaixa.operacao='C') into :saldo_ant_credito;
  r_data = :dataini - 1;
  r_historico = 'Saldo Anterior';
  r_valor = (saldo_ant_credito - saldo_ant_debito);
  saldo_final = r_valor;
  if (r_valor < 0) then
  begin
    r_operacao = 'D';
    r_valor = r_valor * -1;
  end
  else
  begin
    r_operacao = 'C';
  end
  suspend;
  /* Varre a tabela Kardex e lista todos registro da condição */
  FOR SELECT CX.data, CX.lancamento, CX.operacao, CX.historico, CX.valor
FROM tbcaixa CX
      WHERE (CX.data between :dataini AND :datafim) order by CX.lancamento
      INTO :r_data, :r_lancamento, :r_operacao, :r_historico, :r_valor
  do
  BEGIN
     if (:r_operacao = 'C') then
        begin
          r_historico = :r_historico;
          saldo_final = saldo_final + :r_valor;
          r_valor = :r_valor;
        end
     if (:r_operacao = 'D') then
        begin
          r_historico = :r_historico;
          saldo_final = saldo_final - :r_valor;
          r_valor = :r_valor;
        end
  SUSPEND;
  END
  if (saldo_final < 0) then
  begin
    r_operacao = 'D';
    saldo_final = saldo_final * -1;
  end
  else
  begin
    r_operacao = 'C';
  end
   /* Lista o saldo final */
   r_data = :datafim;
   r_lancamento = null;
   r_operacao = :r_operacao;
   r_historico = 'Saldo Final ';
   r_valor = saldo_final;
  suspend;
end

Anderson Miranda



2009/5/14 Eduardo Belo <beloelogica em gmail.com>

> Alguém tem um exemplo de Store Procedure para Saldo acumulado
> Linha-a-linha,
> tipo extrato bancário?
>
> Exemplo:
> TIPO       VALOR        SALDO
> ======  ========  ==============
> E           1.000,00      1.000,00
> E           2.000,00      3.000,00
> E           3.000,00      6.000,00
> S           1.500,00      4.500,00
>
>
>
> Obrigado a todos que ajudarem.
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



-- 
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
AS Informática
Anderson Miranda Barrozo
(22) 8115-8761
MSN: andersonpaduarj em hotmail.com



Mais detalhes sobre a lista de discussão lista