[firebase-br] Caculo de saldo

Gamarra de Jesus Daniel danielgamarradejesus em gmail.com
Qua Jan 25 10:24:12 -03 2012


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 <frguitar em bol.com.br> 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."



Mais detalhes sobre a lista de discussão lista