[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