[firebase-br] Caculo de saldo
Fabiano Lima
frguitar em bol.com.br
Qua Jan 25 11:44:56 -03 2012
Realmente meu amigo esta errado. Por descuido enviei o codigo anterior.
Segue o "correto"
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 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 NUMERIC(10,2);
DECLARE VARIABLE V_SALDO_INI 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 - DEBITO) FROM LANC WHERE DATA < :DATA_INI AND CCONTA = CCONTA INTO :V_SALDO_ANT;
SELECT SALDO_INI FROM CADBANCO WHERE CCONTA = :R_CCONTA INTO :V_SALDO_I NI;
BEGIN
R_SALDO = :V_SALDO_ANT + :V_CREDITO - :V_DEBITO;
IF (R_SALDO IS NULL or :v_saldo_ini <> '0.00') THEN
R_SALDO = :V_SALDO_INI + :V_CREDITO - :V_DEBITO;
SUSPEND;
END
END
END
Na situação de exemplo em que:
saldo_ini = 100
lanc 1
debito =1
lanc 2
debto = 10
ele me devolve
lanc 1 saldo = 99
lanc 2 saldo = 90
Logo ele não considera o ultimo saldo para fazer o calculo, e eu não estava inclinado a usar select sum no credito dentro do periodo pq ele iria me retornar a soma de tudo e não até o lançamento em questão.
abraço
Fabiano
____________________________________________
Em 25/01/2012 10:24, Gamarra de Jesus Daniel < danielgamarradejesus em gmail.com > escreveu:
Amigo, não compreendi para que serve o ultimo select, uma vez que a
variável saldo já obteve um valor.
Além do que o select leva em consideração as próprias variáveis.
Abraço
Em 24 de janeiro de 2012 16:39, Fabiano Lima escreveu:
> 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
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
--
"Dai-me Senhor, a perseverança das ondas do mar, que fazem de cada recuo um
ponto de partida para um novo avanço."
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista