Fórum Alguem me dah uma mão com Trigger!! #197398

27/11/2003

0

Tem que fazer uma trigger que quando tu mecher na tabela produção, ele vai procurar na tabela ingredientes os ingredientes que vão na receito do produto a ser fabricado, a outra ele vai passar essa movimentação de baixa de ingredientes e aumento de produtos na tabela produtos e registrar na tabela movimentação do estoque.

Tabelas: Produto
Campos: Código do produto
Nome do produto
Categoria do produto
Saldo estoque
Unidade produto
Preço do produto

Tabela: Movimentação do estoque
Campos: Código do produto
Código do vendedor
Código do cliente
Data
Quantidade
Valor total
Tipo de movimento
Movimento do preço total
Fornecedor cliente

Tabela: Receita
Campos: Código da receita
Nome da receita
Rendimentos

Tabela: Ingredientes
Campos: Código da receita
Código do produto
Quantidade

Tabela: Produção
Campos: Data da produção
Código da receita
Receita quantidade


Marciobrignol

Marciobrignol

Responder

Posts

27/11/2003

Frcjf



vai alguns exemplos de como baixa, adicionar usando trigger de uma estudada.

Flávio Campos
SET TERM ^ ;


/* Triggers only will work for SQL triggers */

CREATE TRIGGER ´BI_I_SAIDA´ FOR ´I_SAIDA´
ACTIVE BEFORE INSERT POSITION 0
as

begin
/* Testar se o produto existe, caso contrário gero excessão */

Update Produto set Qtde = Qtde - New.Qtde where CodigoProduto = New.CodigoProduto;
Update Produto_lote set Qtde = Qtde - New.Qtde
where (CodigoProduto = New.CodigoProduto)
and (Lote = New.Lote);


end
^

CREATE TRIGGER ´AU_I_SAIDA´ FOR ´I_SAIDA´
ACTIVE AFTER UPDATE POSITION 0
as
Declare variable iReg smallint;
begin
iReg = 0;
Select Count(CodigoProduto)
from Produto where CodigoProduto = old.CodigoProduto
into :iReg;
/* Caso o Produto não exista gero erro...*/
if (:iReg = 0 ) Then EXCEPTION Codigo_invalido;

/* Antes da alteração somo o valor anterior em Produto */
Update Produto set Qtde = Qtde + Old.Qtde where CodigoProduto = Old.CodigoProduto;

iReg = 0;
Select Count(CodigoProduto) from Produto_lote
where (CodigoProduto = old.CodigoProduto)
and (Lote = old.Lote) into :iReg;

/* Testar se o produto_lote existe, caso contrário gero o registro com Qtde 0 */
if (:iReg = 0 ) Then
EXCEPTION Codigo_invalido;

Update Produto_lote set Qtde = Qtde + Old.Qtde
where (CodigoProduto = Old.CodigoProduto)
and (Lote = Old.Lote);


iReg = 0;
Select Count(CodigoProduto)
from Produto where CodigoProduto = New.CodigoProduto
into :iReg;
/* Caso o Produto não exista gero erro...*/
if (:iReg = 0 ) Then EXCEPTION Codigo_invalido;

/* Depois de alterar somo o valor novo*/

Update Produto set Qtde = Qtde - New.Qtde where CodigoProduto = New.CodigoProduto;

iReg = 0;
Select Count(CodigoProduto) from Produto_lote
where (CodigoProduto = New.CodigoProduto)
and (Lote = new.Lote) into :iReg;

/* Testar se o produto_lote existe, caso contrário gero o registro com Qtde 0 */
if (:iReg = 0 ) Then
EXCEPTION Codigo_invalido;

Update Produto_lote set Qtde = Qtde - New.Qtde
where (CodigoProduto = New.CodigoProduto)
and (Lote = New.Lote);
end
^

CREATE TRIGGER ´BD_I_SAIDA´ FOR ´I_SAIDA´
ACTIVE BEFORE DELETE POSITION 0
as

begin

Update Produto set Qtde = Qtde + Old.Qtde where CodigoProduto = Old.CodigoProduto;
Update Produto_lote set Qtde = Qtde + Old.Qtde
where (CodigoProduto = Old.CodigoProduto)
and (Lote = Old.Lote);


end
^

COMMIT WORK ^
SET TERM ;^


Responder

Gostei + 0

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

Aceitar