[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