[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