Fórum Prestações com datas de vencimento automáticas #45947

10/08/2004

0

É o seguinte, lembra daquele trigger que vc me ajudou a criar, ou melhor, que você criou pra mim? :wink:

SET TERM ^ ; 
CREATE TRIGGER "CRIAR_PRESTACOES" FOR "CARNE" 
ACTIVE AFTER INSERT POSITION 0 
AS 
   DECLARE VARIABLE contador SMALLINT; 
BEGIN 
   SELECT NU_PRESTACOES FROM CARNE_TIPO WHERE ID_TIPO_CARNE=NEW.ID_TIPO_CARNE INTO:contador; 
   WHILE (contador > 0) DO 
   BEGIN 
      INSERT INTO CARNE_PRESTACOES 
         (ID_CARNE, DT_PAGAMENTO, NU_VALOR_PAGO, NU_PRESTACAO, IN_PAGO) 
         VALUES (new.ID_CARNE, NULL, NULL, :contador, 0); 
      contador = contador - 1; 
   END 
END ^ 
COMMIT WORK ^ 
SET TERM ; ^
[url]http://delphiforum.icft.com.br/forum/viewtopic.php?t=49513&highlight=[/url]

Então, ficou perfeito, mais uma vez obrigado.

Só que apareceu mais uma coisa que gostaria de fazer nele.
Na tabela CARNE_PRESTACAO, criei um novo campo chamado DT_VENCIMENTO - eu ia fazer o cálculo das prestações via código, mas percebi que a performance vai lá pra baixo.

Gostaria então que vc me ajudasse a fazer o seguinte: Ao se criar as prestações, a data de vencimento fosse automaticamente atribuida com base na data do sistema. tipo assim:

A [b:0620cdd893]1ª[/b:0620cdd893] prestação vence na data do sistema + [b:0620cdd893]1[/b:0620cdd893] mês;
A [b:0620cdd893]2ª [/b:0620cdd893]prestação vence na data do sistema + [b:0620cdd893]2[/b:0620cdd893] mêses;
A [b:0620cdd893]3ª [/b:0620cdd893]prestação vence na data do sistema + [b:0620cdd893]3[/b:0620cdd893] mêses;
A [b:0620cdd893]...ª [/b:0620cdd893]prestação vence na data do sistema + [b:0620cdd893]... [/b:0620cdd893]mêses;
A [b:0620cdd893]nª [/b:0620cdd893]prestação vence na data do sistema + [b:0620cdd893]n [/b:0620cdd893]mêses;

SET TERM ^ ; 
CREATE TRIGGER "CRIAR_PRESTACOES" FOR "CARNE" 
ACTIVE AFTER INSERT POSITION 0 
AS 
   DECLARE VARIABLE contador SMALLINT; 
BEGIN 
   SELECT NU_PRESTACOES FROM CARNE_TIPO WHERE ID_TIPO_CARNE=NEW.ID_TIPO_CARNE INTO:contador; 
   WHILE (contador > 0) DO 
   BEGIN 
      INSERT INTO CARNE_PRESTACOES 
         (ID_CARNE, DT_PAGAMENTO, NU_VALOR_PAGO, NU_PRESTACAO, IN_PAGO, DT_VENCIMENTO) 
         VALUES (new.ID_CARNE, NULL, NULL, :contador, 0, ??????????); 
      contador = contador - 1; 
   END 
END ^ 
COMMIT WORK ^ 
SET TERM ; ^




[b:0620cdd893]Título removido.[/b:0620cdd893]

Para o título do tópico, procure descrever resumidamente o seu problema, e não direcionando a determinada pessoa.
Por favor, releia as [url=http://delphiforum.icft.com.br/forum/viewtopic.php?t=6689]Regras de Conduta[/url] do fórum.

Sandra/Moderação


Tenil

Tenil

Responder

Posts

10/08/2004

Tenil

Insisto, só o [b:c65ac229ab]Afarias [/b:c65ac229ab]vai conseguir me ajudar.


Responder

Gostei + 0

11/08/2004

Fsflorencio

Tenta alguma coisa do tipo:

SET TERM ^ ;
CREATE TRIGGER ´CRIAR_PRESTACOES´ FOR ´CARNE´
ACTIVE AFTER INSERT POSITION 0
AS
DECLARE VARIABLE contador SMALLINT;
BEGIN
SELECT NU_PRESTACOES FROM CARNE_TIPO WHERE ID_TIPO_CARNE=NEW.ID_TIPO_CARNE INTO:contador;
WHILE (contador > 0) DO
BEGIN
INSERT INTO CARNE_PRESTACOES
(ID_CARNE, DT_PAGAMENTO, NU_VALOR_PAGO, NU_PRESTACAO, IN_PAGO, DT_VENCIMENTO)
VALUES (new.ID_CARNE, NULL, NULL, :contador, 0, CURRENT_DATE + 30);
contador = contador - 1;
END
END ^
COMMIT WORK ^
SET TERM ; ^


Responder

Gostei + 0

11/08/2004

Fsflorencio

Melhor ainda:

SET TERM ^ ;
CREATE TRIGGER ´CRIAR_PRESTACOES´ FOR ´CARNE´
ACTIVE AFTER INSERT POSITION 0
AS
DECLARE VARIABLE contador SMALLINT;
DECLARE VARIABLE contador2 SMALLINT;
BEGIN
CONTADOR2 = 1;

SELECT NU_PRESTACOES FROM CARNE_TIPO WHERE ID_TIPO_CARNE=NEW.ID_TIPO_CARNE INTO:contador;
WHILE (contador2 <= contador) DO
BEGIN
INSERT INTO CARNE_PRESTACOES
(ID_CARNE, DT_PAGAMENTO, NU_VALOR_PAGO, NU_PRESTACAO, IN_PAGO, DT_VENCIMENTO)
VALUES (new.ID_CARNE, NULL, NULL, :contador, 0, CURRENT_DATE + 30 * CONTADOR2);
contador2 = contador2 + 1;
END
END ^
COMMIT WORK ^
SET TERM ; ^


Responder

Gostei + 0

11/08/2004

Tenil

[b:7041d8b6b8]fsflorencio[/b:7041d8b6b8], vou tentar.

Obrigado!


Responder

Gostei + 0

11/08/2004

Afarias

CURRENT_DATE + 30 * CONTADOR2



A idéia do fsflorencio está correta. E vc pode apenas usar o mesmo contador (sem precisar de mais uma variável -- contador2)



T+


Responder

Gostei + 0

11/08/2004

Tenil

fsflorencio, funcionou perfeitamente. :D

Obrigado,

Roberto


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar