[firebase-br] Campos Calculados
Joelson - Souzamark
joelsonss em yahoo.com.br
Ter Mar 15 08:18:34 -03 2005
Opa, se vc passar a controlar pelo banco com toda certeza fica melhor ;-),
e quanto ao calculo vc pode fazer isso através de SP's ou campos calculados
eu particularmente prefiro as SP's e tb uso numa rotina parecida...
quanto ao campo calculado com condição é possível sim eis a sintaxe do campo
que calcula os dias em atraso:
COMPUTED BY (CASE WHEN "PAGO" = 'N' AND "VENCIMENTO" < CURRENT_DATE THEN
CURRENT_DATE - "VENCIMENTO" ELSE 0 END)
e como eu to muito bonzinho hj lá vai a SP que atualiza os juros... da pra
vc analisar
e adaptar pra vc....
CREATE PROCEDURE ATUALIZA_CONTA_RECEBER (
PS INTEGER, /*aqui vai o codigo da pessoa que vc vai calcular*/
JURO CHAR(1))/*e aqui se vai cobrar juro ou não "S" ou "N"*/
AS
DECLARE VARIABLE J_D NUMERIC(2,2);
DECLARE VARIABLE T_D INTEGER;
DECLARE VARIABLE I INTEGER;
DECLARE VARIABLE VLR NUMERIC(15,2);
DECLARE VARIABLE VLR_J NUMERIC(15,2);
DECLARE VARIABLE D_ATR INTEGER;
DECLARE VARIABLE CD INTEGER;
begin
SELECT FIRST 1 JURO_DIARIO, TOLERANCIA FROM PARAMETROS INTO J_D, T_D;
FOR SELECT CODIGO, VALOR, DIAS_ATRASO FROM CONTA_RECEBER
WHERE PESSOA = :PS AND PAGO = 'N' INTO :CD, :VLR, :D_ATR DO
IF (JURO='S') THEN /*se tiver habilitado pra cobrar juro*/
BEGIN
I = 0;
VLR_J = 0.00;
WHILE (I <= D_ATR) DO
BEGIN
VLR_J = VLR_J + (J_D * (VLR + VLR_J) / 100);
I = I + 1;
END
IF (:D_ATR <= :T_D) THEN
VLR_J = 0.00;
UPDATE CONTA_RECEBER SET
VALOR_JURO = :VLR_J,
VALOR_REAL = VALOR + :VLR_J
WHERE CODIGO = :CD;
END
ELSE /*se não for cobrar juro*/
UPDATE CONTA_RECEBER SET
VALOR_JURO = 0.00,
VALOR_REAL = VALOR
WHERE CODIGO = :CD;
END
sem mais
Joelson
Mais detalhes sobre a lista de discussão lista