Re: [firebase-br] Ajuda para montar um SP que calcule saldo diário..

Magno System magno em speet.com.br
Qua Out 25 18:45:47 -03 2006


Tenho um select que faz mais ou menos isto. Dê uma olhada e adapte para o 
seu código.

SELECT DISTINCT F.MOVIMENTO, F.RECIBO, F.DATA, F.HORA, F.DESCRICAO, 
F.DEBITO, F.CANCELADO,
F.CREDITO, F.MULTA, F.CODIGO,  F.CENTROCUSTO,  SUM(FI.DEBITO - FI.CREDITO + 
FI.MULTA) AS SALDO
FROM FICHA F, FICHA FI
WHERE (F.DATA + F.HORA >= FI.DATA + FI.HORA)
AND (FI.CODIGO = :CODIGOCLIENTE)
AND (F.CODIGO = :CODIGOCLIENTE)
GROUP BY F.DATA, F.HORA, F.MOVIMENTO, F.RECIBO, F.DESCRICAO,  F.DEBITO, 
F.CREDITO, F.MULTA, F.CODIGO, F.CENTROCUSTO, F.CANCELADO
ORDER BY F.DATA, F.HORA

----- Original Message ----- 
From: "José Aparecido da Silva" <joseasilva em bol.com.br>
To: "'FireBase'" <lista em firebase.com.br>
Sent: Wednesday, October 25, 2006 2:41 PM
Subject: RES: [firebase-br] Ajuda para montar um SP que calcule saldo 
diário..


> Segue o código para a SP. Espero que funcione. Me reporte algum erro
> Use assim SELECT * from PROC_MOVI(:datainicial) onde datainicial é o
> parametro para a procedure ;
> ********************************************
> SET TERM ^ ;
>
> CREATE PROCEDURE PROC_MOVI (
>    DATAINICIAL DATE)
> RETURNS (
>    CAILAN INTEGER,
>    CAIDAT DATE,
>    CAITIP CHAR(1),
>    CAIHIS VARCHAR(40),
>    CAIVAL NUMERIC(12,),
>    SALDO NUMERIC(12,2))
> AS
> DECLARE VARIABLE DEBITO DOUBLE PRECISION;
> DECLARE VARIABLE CREDITO DOUBLE PRECISION;
> DECLARE VARIABLE SALDOATUAL DOUBLE PRECISION;
> begin
>  select sum(movi.CAIVAL) from CAIXA movi where movi.CAITIP = 'D' and
> movi.CAIDAT < :DATAINICIAL into :DEBITO;
>  select sum(movi.CAIVAL) from CAIXA movi where movi.CAITIP = 'C' and
> movi.CAIDAT < :DATAINICIAL into :CREDITO;
>  SALDOATUAL =coalesce(CREDITO,0) - coalesce(DEBITO,0) ;
>  CAILAN =0 ;
>  CAIDAT = DATAINICIAL - 1;
>  CAITIP = '';
>  CAIHIS = 'SALDO ANTERIOR';
>  CAIVAL = SALDOATUAL;
>  SALDO = SALDOATUAL;
>  suspend;
>  for select
> CAILAN,CAIDAT,CAITIP,CAIHIS,COALESCE(CAIVAL,0),COALESCE(CAIVAL,0) from 
> CAIXA
> where CAIDAT >= :DATAINICIAL order by CAIDAT,CAILAN into
> :CAILAN,:CAIDAT,:CAITIP,:CAIHIS,:CAIVAL,:SALDO do
>  begin
>      if (CAITIP = 'C') then SALDO = SALDOATUAL + :CAIVAL;
>      if (CAITIP = 'D') then SALDO = SALDOATUAL - :CAIVAL;
>      SALDOATUAL = :SALDO;
>      suspend;
>  end
> end
> ^
>
> SET TERM ; ^
>
> GRANT SELECT ON CAIXA TO PROCEDURE PROC_MOVI;
>
> GRANT EXECUTE ON PROCEDURE PROC_MOVI TO SYSDBA;
>
>
> -----Mensagem original-----
> De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] 
> Em
> nome de Fausto
> Enviada em: quarta-feira, 25 de outubro de 2006 15:04
> Para: FireBase
> Assunto: [firebase-br] Ajuda para montar um SP que calcule saldo diário..
>
> Boa tarde gente..
> Agora estou apelando mesmo..
> Estou precisando de uma ajuda para escrever uma stored procedure
> retornável que calcule o saldo diário,tal qual extrato bancário.
> Tenho a tabela CAIXA com os seguintes campos
> CAIDAT  DATE NOT NULL  : Data de lançamento
> CAILAN  INTEGER NOT NULL : PK AutoIncremento via generator
> CAIHIS    VARCHAR(40) : Histórico
> CAIVAL  NUMERIC(12,2): Valor
> CAITIP  CHAR(1):Informa se é Débito ou Crédito (D/C)
> Preciso desenvolver uma procedure que me retorne estes campos da tabela
> CAIXA, mais uma terceira coluna que seria o calculo do saldo atual,
> entre duas datas.
> De tal forma que o resultado fosse este:
>
>      Data       Lan    Valor     Saldo
>   01/10/2005    87    250,00    250,00
>   01/10/2005    88    200,00    450,00
>   01/10/2005    89    200,00    650,00
>   01/10/2005    99    -435,00   215,00
>   04/10/2005    91    300,00    515,00
> Observem que a coluna saldo é calculada linha a linha..No paradox eu
> utilizava uma Query com a seguinte instrução:
> SELECT CAIDAT, CAILAN, CAIVAL, sum (DISTINCT CAIVAL)
> FROM CAIXA
> GROUP BY CAIDAT,CAILAN,CAIVAL
>
> Mas os amigos Eduardo Jedliczka e Kleber Caneva, me responderam que no
> FIREBIRD a clausula distinct utiliza toda uma linha e não somente para
> função SUM.
> Portanto se alguém puder me ajudar com a construção desta SP, ou tenha 
> algo
> já pronto e puder me ceder ficarei eternamente grato.
>
> Fausto
>
>
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço 
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
> -- 
> No virus found in this incoming message.
> Checked by AVG Free Edition.
> Version: 7.1.408 / Virus Database: 268.13.11/496 - Release Date: 
> 24/10/2006
>
> 





Mais detalhes sobre a lista de discussão lista