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