Autor Tópico: Atualizar valores de tabelas pai x filho  (Lida 4900 vezes)

thiago.reis

  • Novato
  • *
  • Mensagens: 30
    • Email
Atualizar valores de tabelas pai x filho
« Online: Janeiro 23, 2014, 03:49:06 pm »
Boa tarde Senhores.

Tenho pouca experiencia com o SC...  e estou com o seguinte problema....

No banco de dados tenho 02 tabelas, sendo:

-Tabela Matéria Prima

-Tabela Produto Acabado

A tabela matéria prima é atualizada constantemente devido a variações de preços, etc...


A duvida é a seguinte:

-Quando um usuário alterar o valor da matéria prima, o sistema deve fazer os cálculos e alterar o valor final do produto acabado automaticamente.


Não tenho ideia de como fazer essa ligação.

Por gentileza alguém pode me ajudar?

Gratidão.

Haroldo

  • Expert
  • *****
  • Mensagens: 6293
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Atualizar valores de tabelas pai x filho
« Responder #1 Online: Janeiro 23, 2014, 03:54:45 pm »
Crie Triggers em sua tabela de matéria para atualizar os produtos automática mente.

Isso eh feito direto no banco de dados, sem usar programação no scriptcase.

thiago.reis

  • Novato
  • *
  • Mensagens: 30
    • Email
Re:Atualizar valores de tabelas pai x filho
« Responder #2 Online: Janeiro 23, 2014, 04:03:33 pm »
Haroldo, desculpe a minha ignorância...  pode me dar um exemplo de como criar uma Trigger?

Haroldo

  • Expert
  • *****
  • Mensagens: 6293
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Atualizar valores de tabelas pai x filho
« Responder #3 Online: Janeiro 23, 2014, 04:26:03 pm »

thiago.reis

  • Novato
  • *
  • Mensagens: 30
    • Email
Re:Atualizar valores de tabelas pai x filho
« Responder #4 Online: Janeiro 24, 2014, 07:03:41 am »
Haroldo, agradeço sua disposição e atenção para me ajudar.

Eu li o artigo do link... e estou com dificuldades para criar a Trigger


CREATE TRIGGER atualiza_materia_prima BEFORE UPDATE
ON cadastro_materia_prima FOR EACH ROW BEGIN
 EXECUTE PROCEDURE nome_da_função   (e agora? como fazer a condição para atualizar os preços dos produtos acabados?)




Não tenho experiencia com trigger....  não existe outra maneira (mais simples) de fazer essa atualização?

Gratidão
« Última modificação: Janeiro 24, 2014, 07:17:15 am por thiago.reis »

thiago.reis

  • Novato
  • *
  • Mensagens: 30
    • Email
Re:Atualizar valores de tabelas pai x filho
« Responder #5 Online: Janeiro 24, 2014, 08:23:48 am »
Estou tentando inserir via phpmyadmin e da erro

CREATE TRIGGER atualiza_materia_prima BEFORE UPDATE ON cadastro_materia_prima
FOR EACH ROW BEGIN
UPDATE cadastro_produto_final
SELECT preco_final_mp FROM cadastro_materia_prima
INNER JOIN cadastro_produto_final on preco_final_mp = preco_mp

Haroldo

  • Expert
  • *****
  • Mensagens: 6293
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Atualizar valores de tabelas pai x filho
« Responder #6 Online: Janeiro 24, 2014, 09:13:21 am »
A programação pode ser em php num formulário scriptcase, mas mas de qualquer forma precisa c conhecer:

1)PHP
2)SQL
3)Os procedimentos envolvidos, cálculos e operações que serão realizadas quando da alteração na matéria prima.

Em Trigger tem que conhecer:

1)SQL
2) Os procedimentos envolvidos, cálculos e operações que serão realizadas quando da alteração na matéria prima.

thiago.reis

  • Novato
  • *
  • Mensagens: 30
    • Email
Re:Atualizar valores de tabelas pai x filho
« Responder #7 Online: Janeiro 24, 2014, 09:22:06 am »

Conheço a linguagem PHP e os procedimentos envolvidos (cálculos e operações), minha dificuldade esta na Trigger e no SQL.

Gostaria apenas de um exemplo bem básico de como fazer essa alteração em meu projeto... pode ser via SC ou Trigger...

Sendo que são N matérias-primas e N produtos finais ...

Por favor me de uma luz... só falta isso para finalizar e começar a testar o sistema.

Grato


Haroldo

  • Expert
  • *****
  • Mensagens: 6293
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Atualizar valores de tabelas pai x filho
« Responder #8 Online: Janeiro 24, 2014, 09:22:37 am »
Seque um exemplo de um trigger que atualiza o saldo do local de estoque quando um produto eh movimentado.

USE `iwerp_cinco`;
DELIMITER $$

CREATE TRIGGER `estoqmov_bef_ins` BEFORE INSERT ON `estoqmov` FOR EACH ROW
-- Edit trigger body code below this line. Do not edit lines above this one
BEGIN

  DECLARE varProdutoId integer;
  DECLARE varLocalId integer;
  DECLARE varEstoquesId integer;
  DECLARE varSaldo decimal(14,4);
  DECLARE varQuantidade decimal(14,4);
  DECLARE varCodigoTrans varchar(15);
  DECLARE varEntradaSaida char(1);
 
  SELECT Parametros INTO varEntradaSaida FROM geraltab WHERE Grupo='ESTOQUETRANSAC'  AND Codigo=NEW.GTEstoqTransCod;
 
  IF (NEW.Estorno)
  THEN
    SELECT codigo INTO varCodigoTrans FROM geraltab WHERE grupo='ESTOQUETRANSAC' AND Parametros=CONCAT('ESTORNO:',NEW.GTEstoqTransCod);
    Set NEW.GTEstoqTransCod=varCodigoTrans;
    IF varEntradaSaida = 'E' THEN SET varEntradaSaida ='S'; ELSE SET varEntradaSaida='E'; END IF;   
  END IF;
 
  Set NEW.Transacao=varEntradaSaida;
 
  set varQuantidade=(CASE WHEN new.Transacao = 'E' THEN new.Quantidade ELSE new.Quantidade*-1 END); 
  Set varProdutoId=(select Id from produtos where Codigo = new.ProdutoCodigo);
  Set varLocalId=(SELECT Id FROM geraltab WHERE grupo = 'EstoqueLocal' and Codigo = new.GTLocalCodigo);
 
  SELECT ID, Saldo+varQuantidade
     INTO varEstoquesId, varSaldo
     FROM estoques
     WHERE GTEstoqueLocalId = varLocalId and ProdutoId = varProdutoId;
 
 
  IF (varEstoquesId > 0)
  THEN UPDATE estoques SET Saldo = varSaldo WHERE id = varEstoquesId;
  ELSE INSERT INTO estoques (GTEstoqueLocalId,ProdutoId,Saldo)
  VALUE (varLocalId,varProdutoId,varQuantidade);
  END IF;
 
  SET NEW.Saldo = (CASE WHEN varSaldo IS NULL THEN varQuantidade ELSE varSaldo END);
  SET NEW.DTUpdate= Now();
END

Haroldo

  • Expert
  • *****
  • Mensagens: 6293
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Atualizar valores de tabelas pai x filho
« Responder #9 Online: Janeiro 24, 2014, 09:25:16 am »
Veja o lado positivo nisso, vai ter que se empenhar em aprender SQL,  o que eh positivo e muito válido para se tornar um programador melhor e mais completo.

thiago.reis

  • Novato
  • *
  • Mensagens: 30
    • Email
Re:Atualizar valores de tabelas pai x filho
« Responder #10 Online: Janeiro 24, 2014, 09:33:20 am »
Haroldo,

Meus sinceros agradecimentos...

Esse projeto esta sendo bem desafiador... aprendi bastente coisa... e realmente tenho de aprender SQL...

Vou fazer alguns testes aqui e retorno em breve.

Gratidão!

FredKeyster

  • Expert
  • *****
  • Mensagens: 1702
  • DEWENNINMEN
    • Email
Re:Atualizar valores de tabelas pai x filho
« Responder #11 Online: Janeiro 24, 2014, 09:55:48 am »
Isso é um Módulo de Produção?

A lógica é essa mesmo, ou trigger ou via Php criando uma função e depois jogando em um evento.
Eu comecei assim como você! Entrei aqui não sabia o que era um If nem Else. Basta ser perseverante e amar estudar que você se dar bem. Ser teimoso e não desistir.
F. A.
Analista de Sistemas

thiago.reis

  • Novato
  • *
  • Mensagens: 30
    • Email
Re:Atualizar valores de tabelas pai x filho
« Responder #12 Online: Janeiro 24, 2014, 10:03:45 am »
Olá Fred.

Esse projeto é um sistema "simples" onde o usuário cadastra as matérias primas com seus respectivos valores.

A partir dai é possível desenvolver o produto final dentro do sistema, ao incluir o produto final o sistema faz os calculos e retorna o valor de custo de tal produto.

O problema é que a matéria prima sofre alteração, ou seja, quando a pessoa alterar algum valor de uma materia prima, o sistema deve recalcular todo o produto final que esta vinculado a ela.


Eu fiz um teste bem simples e funcionou... quando eu altero uma matéria prima, o SQL inclui o valor "1" ao produto final.


CREATE DEFINER =  `root`@`localhost` TRIGGER `atualiza_mp` AFTER UPDATE ON  `cadastro_materia_prima` FOR EACH ROW UPDATE cadastro_produto_final SET custo_total_pf =1




Minha duvida é a seguinte agora.

Como alterar apenas o produto final que a matéria prima esta vinculada?


FredKeyster

  • Expert
  • *****
  • Mensagens: 1702
  • DEWENNINMEN
    • Email
Re:Atualizar valores de tabelas pai x filho
« Responder #13 Online: Janeiro 24, 2014, 10:11:14 am »
Ao alterar o preço da matéria prima que esta vinculado ao produto, você cria na triger o WHERE informando o "id_materia_prima" que no caso é uma FK (Chave estrangeira) na tabela de produtos. Tipo:

TRIGGER `atualiza_mp`
AFTER UPDATE ON  `cadastro_materia_prima`
   FOR EACH ROW UPDATE cadastro_produto_final
SET custo_total_pf =1
WHERE id_materia_prima = 1
F. A.
Analista de Sistemas

thiago.reis

  • Novato
  • *
  • Mensagens: 30
    • Email
Re:Atualizar valores de tabelas pai x filho
« Responder #14 Online: Janeiro 24, 2014, 10:26:45 am »
Esta dando erro...

Não consigo pegar o ID da matéria prima que esta sendo atualizada.


a logica de calculo é essa aqui

total_produto_final = preco_materia_prima * percentual_produto_final / 100;



No caso tenho de pegar o valor da matéria prima através do ID e fazer o calculo, mas nao estou conseguindo passar para a Trigger