[firebase-br] CALCULO DE SALDO
Franncisco
francisco em logosinfo.com.br
Ter Jun 26 21:36:43 -03 2007
cara... eu uso essa store procedure no banco... funciona blz... via sql
direto no componete e complicado... veja se adapta ao seu sistema.
CREATE PROCEDURE EXTRATO_CC(
CC INTEGER,
DT1 DATE,
DT2 DATE)
RETURNS(
VENCIMENTO DATE,
CHEQUE VARCHAR(10) CHARACTER SET NONE,
HISTORICO VARCHAR(200) CHARACTER SET NONE,
VALOR NUMERIC(18, 2),
TIPO VARCHAR(1) CHARACTER SET NONE,
SALDO NUMERIC(18, 2),
CREDITO NUMERIC(18, 2),
DEBITO NUMERIC(18, 2),
LOJA INTEGER)
AS
DECLARE VARIABLE SALDO_ANT_CREDITO NUMERIC(18,2);
DECLARE VARIABLE SALDO_ANT_DEBITO NUMERIC(18,2);
DECLARE VARIABLE SALDO_FINAL NUMERIC(18,2);
declare variable VTIPO VARCHAR(2);
declare variable TOTAL NUMERIC(18,2);
declare variable vd date;
DECLARE VARIABLE TOTENT NUMERIC(18,2);
DECLARE VARIABLE TOTSAI NUMERIC(18,2);
BEGIN
TOTENT=0;
TOTSAI=0;
if (dt2 is null) then select first 1 mov_caixa.bom_para from mov_caixa
where mov_caixa.conta=:cc order by mov_caixa.bom_para desc into :dt2;
SELECT SUM(MOV_CAIXA.TOTAL) FROM MOV_CAIXA WHERE MOV_CAIXA.CONTA=:CC AND
MOV_CAIXA.bom_para<:DT1 AND MOV_CAIXA.DC='S' INTO :SALDO_ANT_DEBITO;
SELECT SUM(MOV_CAIXA.TOTAL) FROM MOV_CAIXA WHERE MOV_CAIXA.CONTA=:CC AND
MOV_CAIXA.bom_para<:DT1 AND MOV_CAIXA.DC='E' INTO :SALDO_ANT_CREDITO;
if (:SALDO_ANT_CREDITO is null) then SALDO_ANT_CREDITO = 0.00;
if (:SALDO_ANT_DEBITO is null) then SALDO_ANT_DEBITO = 0.00;
VENCIMENTO = null;
historico = 'SALDO ANTERIOR';
VALOR = (saldo_ant_credito - saldo_ant_debito);
SALDO = (saldo_ant_credito - saldo_ant_debito);
IF (SALDO<0) THEN TIPO='D';
IF (SALDO>=0) THEN TIPO='C';
LOJA=NULL;
saldo_final = SALDO;
SUSPEND;
FOR SELECT
MOV_CAIXA.BOM_PARA,MOV_CAIXA.NUM_CHEQUE,MOV_CAIXA.HISTORICO,MOV_CAIXA.total,MOV_CAIXA.dc,MOV_CAIXA.loja
from MOV_CAIXA
where (MOV_CAIXA.BOM_PARA between :DT1 and :DT2) AND
MOV_CAIXA.CONTA=:CC
ORDER BY MOV_CAIXA.BOM_PARA
INTO :VENCIMENTO,:CHEQUE,:HISTORICO,:TOTAL,:TIPO,:LOJA
do
begin
if (:TIPO='E') then BEGIN
VALOR=:TOTAL;
CREDITO=TOTAL;
TOTENT=TOTENT+TOTAL;
debito=null;
saldo = saldo + :TOTAL;
TIPO='C';
END
if (:TIPO='S') then BEGIN
VALOR=TOTAL;
TOTSAI=TOTSAI+TOTAL;
DEBITO=TOTAL;
credito=null;
saldo = saldo - :TOTAL;
TIPO='D';
END
SUSPEND;
END
END;
Mais detalhes sobre a lista de discussão lista