[firebase-br] Store Procedure - Saldo Acumulado

Eduardo Belo belo em elogica.com.br
Sáb Maio 16 00:11:56 -03 2009


Anderson, te devo essa. Obrigado.

2009/5/15 Anderson Miranda Barrozo <andersonpaduarj em gmail.com>

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



Mais detalhes sobre a lista de discussão lista