Re: Re: [firebase-br] Dificuldade com Query - Ninguém pode me Ajudar ?
Josauro S.J.
josauro em casasoft.inf.br
Ter Dez 21 17:55:38 -03 2004
VEJA ISSO..
Veja um modelo do que uso, mas so uso uma conta com qualquer numero de
niveis, 1.1.01.01.001
o resulta do é
1 110.000,00 100.000,00
1.1 70.000,00 70.000,00
1.1.01 50.000,00 20.000,00
1.1.01.001 10.000,00 10.000,00
1.1.01.002 40.000,00 10.000,00
1.1.02 20.000,00 50.000,00
1.1.02.001 5.000,00 5.000,00
1.1.02.002 15.000,00 45.000,00
1.2 40.000,00 30.000,00
.
CREATE PROCEDURE GET_BALANCO_CONTAS (
CONTA_INICIAL VARCHAR(13),
CONTA_FINAL VARCHAR(13),
DATA_INICIAL DATE,
DATA_FINAL DATE,
)
RETURNS (
TOTAL_CREDITO NUMERIC(18,2),
TOTAL_DEBITO NUMERIC(18,2),
TOTAL NUMERIC(18,2),
SINTETICO_ANALITICO CHAR(1),
TITULO VARCHAR(40),
CONTA VARCHAR(13))
AS
DECLARE VARIABLE OPERACAO SMALLINT;
DECLARE VARIABLE VALOR NUMERIC(18,2);
DECLARE VARIABLE CONTA_CLASSE VARCHAR(13);
begin
/* Procedure Text */
FOR
select c.cla_conta,
c.cla_titulo,
c.cla_sintetico_analitico,
c.cla_codigo
from PLANO_CONTA c
where (c.cla_conta >= :CONTA_INICIAL AND
c.cla_conta <= :CONTA_FINAL) OR
(:CONTA_INICIAL = '' AND
:CONTA_FINAL = '')
order by c.cla_conta
INTO :CONTA,:TITULO,:SINTETICO_ANALITICO,:CLA_CODIGO
DO BEGIN
TOTAL = 0;
TOTAL_DEBITO = 0;
TOTAL_CREDITO = 0;
if (SINTETICO_ANALITICO = 'A')
then BEGIN
FOR
SELECT L.LCS_VALOR,
L.LCS_OPERACAO,
L.lcs_MOVIMENTO_VALOR,
L.lcs_LANCAMENTO
FROM VW_lancamento_CONTAS L
WHERE L.CLASSE LIKE (:CONTA||'%') and
((L.classe >= :CONTA_INICIAL AND
L.classe <= :CONTA_FINAL) OR
(:CONTA_INICIAL = '' AND
:CONTA_FINAL = ''))
INTO VALOR, :OPERACAO
DO BEGIN
TOTAL = TOTAL + (VALOR*OPERACAO);
if (OPERACAO = -1)
then TOTAL_DEBITO = TOTAL_DEBITO + (VALOR*OPERACAO);
ELSE
if (OPERACAO = 1)
then TOTAL_CREDITO = TOTAL_CREDITO + (VALOR*OPERACAO);
END
END
ELSE BEGIN
FOR
SELECT LCS_VALOR, LCS_OPERACAO, LCS_MOVIMENTO_VALOR, LCS_CLASSE,
LCS_LANCAMENTO
FROM lancamento_CONTAS
WHERE LCS_CLASSE = :CLA_CODIGO
INTO :VALOR,:OPERACAO
DO BEGIN
TOTAL = TOTAL + (OPERACAO*VALOR);
if (OPERACAO = -1)
then TOTAL_DEBITO = TOTAL_DEBITO + (OPERACAO*VALOR);
ELSE
if (OPERACAO = 1)
then TOTAL_CREDITO = TOTAL_CREDITO + (OPERACAO*VALOR);
END
END
if ((TOTAL <> 0) OR
(TOTAL_DEBITO <> 0) OR
(TOTAL_CREDITO <> 0))
then suspend;
END
end
Josauro S.J.
Diretor
josauro em casasoft.inf.br
Mais detalhes sobre a lista de discussão lista