[firebase-br] Caculo de saldo

Fabiano Lima frguitar em bol.com.br
Qua Jan 25 11:44:56 -03 2012


Realmente meu amigo esta errado. Por descuido enviei o codigo anterior.
Segue o "correto"

CREATE OR ALTER PROCEDURE SLD_CX(
DATA_INI DATE,
DATA_FIN DATE)
RETURNS (
R_LANC_ID INTEGER,
R_CCONTA INTEGER,
R_CCONTAB INTEGER,
R_SALDO NUMERIC(11,2))
AS
DECLARE VARIABLE V_CREDITO NUMERIC(10,2);
DECLARE VARIABLE V_DEBITO NUMERIC(10,2);
DECLARE VARIABLE V_DATA TIMESTAMP;
DECLARE VARIABLE V_SALDO_ANT NUMERIC(10,2);
DECLARE VARIABLE V_SALDO_INI NUMERIC(10,2);

BEGIN
FOR
SELECT LANC_ID, CCONTA, DATA, CREDITO, DEBITO
FROM LANC
WHERE DATA BETWEEN :DATA_INI AND :DATA_FIN
ORDER BY DATA
INTO :R_LANC_ID, :R_CCONTA, :V_DATA, :V_CREDITO, :V_DEBITO
DO

BEGIN

SELECT SUM (CREDITO - DEBITO) FROM LANC WHERE DATA < :DATA_INI AND CCONTA = CCONTA INTO :V_SALDO_ANT;
SELECT SALDO_INI FROM CADBANCO WHERE CCONTA = :R_CCONTA INTO :V_SALDO_I NI;

BEGIN


R_SALDO = :V_SALDO_ANT + :V_CREDITO - :V_DEBITO;

IF (R_SALDO IS NULL or :v_saldo_ini <> '0.00') THEN

R_SALDO = :V_SALDO_INI + :V_CREDITO - :V_DEBITO;

SUSPEND;
END
END
END

Na situação de exemplo em que:

saldo_ini = 100

lanc 1
debito =1

lanc 2
debto = 10


ele me devolve

lanc 1 saldo = 99
lanc 2 saldo = 90

Logo ele não considera o ultimo saldo para fazer o calculo, e eu não estava inclinado a usar select sum no credito dentro do periodo pq ele iria me retornar a soma de tudo e não até o lançamento em questão.

abraço
Fabiano
 


____________________________________________

Em 25/01/2012 10:24, Gamarra de Jesus Daniel < danielgamarradejesus em gmail.com > escreveu:
Amigo, não compreendi para que serve o ultimo select, uma vez que a
variável saldo já obteve um valor.
Além do que o select leva em consideração as próprias variáveis.
Abraço

Em 24 de janeiro de 2012 16:39, Fabiano Lima  escreveu:

> Então, desfiz meus triggers e troquei a função de calculo do saldo para
> uma procedure.
> Porem estou com um problema para somar valores distintos pois tenho 3
> contas as quais tenho que ter o calculo do saldo independente)
> Na procedure abaixo eu obtenho o saldo inicial de acordo com o codigo da
> conta, mas na hora de calcular o saldo ele sempre esta fazendo a soma do
> credito menos a soma do debito, e ignorando o select onde obtenho o saldo
> anterior ao data_ini
>
> //// segue o codigo/////
>
>
> CREATE OR ALTER PROCEDURE SLD_CX(
>    DATA_INI DATE,
>    DATA_FIN DATE)
> RETURNS (
>    R_LANC_ID INTEGER,
>    R_CCONTA INTEGER,
>    R_CCONTAB INTEGER,
>    R_SALDO_INI NUMERIC(11,2),
>    R_SALDO NUMERIC(11,2))
> AS
> DECLARE VARIABLE V_CREDITO NUMERIC(10,2);
> DECLARE VARIABLE V_DEBITO NUMERIC(10,2);
> DECLARE VARIABLE V_DATA TIMESTAMP;
> DECLARE VARIABLE V_SALDO_ANT_CRED NUMERIC(10,2);
> DECLARE VARIABLE V_SALDO_ANT_DEB NUMERIC(10,2);
> DECLARE VARIABLE V_SALDO NUMERIC(10,2);
>
> BEGIN
>        FOR
>        SELECT LANC_ID, CCONTA, DATA, CREDITO, DEBITO
>        FROM LANC
>        WHERE DATA BETWEEN :DATA_INI AND :DATA_FIN
>        ORDER BY DATA
>        INTO :R_LANC_ID, :R_CCONTA, :V_DATA, :V_CREDITO, :V_DEBITO
>        DO
>
>    BEGIN
>
>       SELECT SUM (CREDITO) FROM LANC WHERE DATA < :DATA_INI AND CCONTA =
> CCONTA INTO :V_SALDO_ANT_CRED;
>       SELECT SUM (DEBITO) FROM LANC WHERE DATA < :DATA_INI AND CCONTA =
> CCONTA INTO :V_SALDO_ANT_DEB;
>
>       R_SALDO = (V_SALDO_ANT_CRED - V_SALDO_ANT_DEB);
>
>       IF (R_SALDO IS NULL) THEN
>
>        SELECT SALDO_INI, CCONTA FROM CADBANCO
>        WHERE CCONTA = :R_CCONTA
>        INTO :R_SALDO_INI, :R_CCONTAB;
>
>       R_SALDO = R_SALDO_INI;
>
>       BEGIN
>
>       SELECT DISTINCT :R_SALDO + :V_CREDITO - :V_DEBITO
>       FROM LANC WHERE (LANC_ID = :R_LANC_ID)
>       AND (DATA = :V_DATA)
>       AND (CCONTA = :R_CCONTAB)
>       INTO :R_SALDO;
>       SUSPEND;
>
>       END
>
>    END
>
> END
>
>
>
> Agradeço qualquer ajuda.
>
> Fabiano
>
> ______________________________________________
> 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
>



-- 
"Dai-me Senhor, a perseverança das ondas do mar, que fazem de cada recuo um
ponto de partida para um novo avanço."
______________________________________________
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