[firebase-br] Caculo de saldo

Fabiano Lima frguitar em bol.com.br
Ter Jan 24 16:39:41 -03 2012


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




Mais detalhes sobre a lista de discussão lista