[firebase-br] (sem assunto)

Sandro Souza escovadordebits em gmail.com
Sex Fev 5 11:36:26 -03 2010


Bom dia/tarde José.

Grande José, eu provalmente falarei besteira, mas se você deseja obter o 
total de crédito, débito e saldo de todos os clientes, então porque você 
apenas não retira o código do cliente das cláusulas WHERE da sua stored 
procedure?

Poderia até extendê-la, como por exemplo, se o código do cliente 
informado for zero, então a SP deve retornar o somatório de todos os 
clientes, caso contrário, apenas daquele que foi informado.

Se essa idéia tiver fundamento p/ você, então teste o seguinte código:

SET TERM ^ ;

CREATE OR ALTER PROCEDURE SP_CALCULACD(
-- Código do cliente (zero = todos).
ID INTEGER
)RETURNS(
-- Débito.
APAGAR NUMERIC(12,2),
-- Crédito.
ARECEBER NUMERIC(12,2),
-- Saldo.
SITUACAO NUMERIC(12,2)
)AS
BEGIN
-- Deseja obter a situação geral dos clientes?
IF ((ID IS NULL) OR (ID = 0)) THEN
BEGIN
-- Obtém o total de débitos de todos os clientes.
SELECT SUM(VALOR_PARCELA)
FROM CONTASRECEBER
INTO :APAGAR;
-- Obtém o total de créditos de todos os clientes.
SELECT SUM(VALOR)
FROM CAIXA
INTO :ARECEBER;
END -- IF
ELSE
BEGIN
-- Obtém o total de débitos do cliente informado.
SELECT SUM(VALOR_PARCELA)
FROM CONTASRECEBER
WHERE ID_CLIENTE = :ID
INTO :APAGAR;
-- Obtém o total de créditos do cliente informado.
SELECT SUM(VALOR)
FROM CAIXA
WHERE ID_CLIENTE = :ID
INTO :ARECEBER;
END -- ELSE
-- Calcula o saldo.
SITUACAO = DEBITO - CREDITO; -- Não seria CREDITO - DEBITO?
END^

SET TERM ; ^

Agora basta testar:

SELECT * FROM CALCULACD(0);

SELECT * FROM CALCULACD(1);

Espero ter ajudado mais que atrapalhado. :D

Jose Luiz de Medeiros escreveu:
> Colegas…
>
>  
>
> Tenho essa procedure:
>
>  
>
> SET TERM ^ ;
>
>  
>
> CREATE PROCEDURE SP_CALCULACD (
>
>     id integer)
>
> returns (
>
>     apagar numeric(12,2),
>
>     areceber numeric(12,2),
>
>     situacao numeric(12,2))
>
> as
>
> declare variable debito numeric(12,2);
>
> declare variable credito numeric(12,2);
>
> begin
>
>  
>
>  select sum(d.valor_parcela)
>
>    from contasreceber d
>
>    where d.id_cliente = :id
>
>    into :debito;
>
>  
>
> select sum(c.valor)
>
>    from caixa c
>
>    where c.id_cliente = :id
>
>    into :credito;
>
> apagar = :debito;
>
> areceber = :credito;
>
> situacao = :debito - :credito;
>
> suspend;
>
> end^
>
>  
>
> SET TERM ; ^
>
>  
>
> Preciso saber a situação de todos os clientes de uma vez, nessa procedure
> coloco o id de um cliente ela me retorna
>
> O debito o credito e a situação daquele cliente.
>
> Sera que teria jeito de saber a situação de todos de uma vez?
>
>  
>
> Tentei assim mas não deu:
>
>  
>
> Execute procedure SP_calculacd(select id from clientes);
>
>  
>
> Como sou meio cru em firebird, alguém poderia me dar uma força?
>
>  
>
>  
>
> Grato:
>
> Jose Luiz 
>
>  
>
>  
>
> ______________________________________________
> 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