BAIXA ESTOQUE COM PRODUCAO

G2SIS 04/12/2010 22:59:11
#358811
Boa noite pessoal

Estou tentando mas ainda não encontrei algo aqui no fórum que se assemelhe à minha dor de cabeça aqui. Dêem uma olhada nas tabelas (imagem anexa)
Aqui eu pretendo em uma trigger na tabela produção2 seja dada baixa no estoque do material utilizado para o produto.

relacionamentos: MATERIAL.CODIGO -- INGR.COD_MATERIAL; MATERIAL.UND --UND.CODIGO; PRODUCAO2.COD_PRODUTO -- INGR.COD_PRODUTO

Para fazer isso seria o estoque do material - a quantidade produzida * quantidade de ingrediente / unidade base.

ainda teria mais um ítem nesse cálculo que seria o rendimento, mas se eu conseguisse resolver até aqui, não teria problema.
G2SIS 07/12/2010 17:05:45
#359016
boa tarde pessoal

até agora o mais próximo da soluçaõ que cheguei foi criar uma cópia da tabela mercadoria (fiz mas não gostei muito), coloquei o rendimento em uma variável e o seguinte:
  update material set material.estoque = (select material_copy.estoque - (new.qtde/@rendimento) * (ingr.qtde /und.base) from ingr left join material_copy on ingr.cod_material = material_copy.codigo left join und on material_copy.und = und.codigo  where ingr.cod_produto = new.cod_produto); 


agora o problema aqui é que quando insiro um registro na tabela producao2 dá erro de subqueries resutando mais de uma linha.

G2SIS 07/12/2010 18:20:57
#359028
ok pessoal, eu agradeço a quem passou por aqui e deu uma olhada. Graças a Deus resolvi a questão.

esse é o código da trigger que vou usar pra que meu sistema de produção dê baixa no estoque de materia prima.

precisei usar mesmo uma cópia da tabela material, mas apenas os campos codigo, estoque, und. ao efetuar a produção, ele atualiza apenas os ítens dessa tabela material_copy que vou usar, então faz o cálculo e baixa da tabela material.

  begin
update material_copy set material_copy.estoque = (select material.estoque from ingr inner join material on ingr.cod_material = material.codigo where ingr.cod_produto = new.cod_produto and ingr.cod_material = material_copy.codigo);
select rendimento into @rendimento from produto where codigo = new.cod_produto;
update material set material.estoque = (select material_copy.estoque - new.qtde * ingr.qtde / @rendimento / und.base from ingr inner join material_copy on ingr.cod_material = material_copy.codigo left join und on material_copy.und = und.codigo where ingr.cod_produto = new.cod_produto and material.codigo = ingr.cod_material);
update produto set produto.QTDE = produto.QTDE + new.qtde where produto.CODIGO = new.cod_produto;
end

Tópico encerrado , respostas não são mais permitidas