atualizar estoque apos exclusao de vendas

16/08/2012

22

oi pessoal, uso delphi e o mysql - o que esta errado nesta triggers..estou tentando fazer com que ao deletar uma venda..fazer com que as quantidades voltem para o estoque.. uso esta trigger mas nao esta funcionando..

CREATE TRIGGER `Atualiza_Estoque_Devolucao` AFTER DELETE ON `itens2`
FOR EACH ROW
update produtos p
set estoque = estoque + old.quantidade
where p.codprod = old.codprod;


aguardo retorno...
Responder

Posts

16/08/2012

Romulo Contro

pq vc não faz direto no programa? acho que fica melhor...
e um conselho: não deleta a venda do banco, coloca um campo APAGADO ou DELETADO, e marca ele como S ou N... pois se precisar mostrar um relatório depois, vc pode exibir pro cliente que houve compra, e que houve cancelamento... se ele tiver algum problema com estoque, ou mesmo até dinheiro em caixa algum dia, ele vai poder consultar as vendas que foram canceladas... aí na tabela de vendas vc lança um valor negativo lá... e no estoque subtrai a quantidade cancelada por dentro do delphi mesmo.
Responder

16/08/2012

Joel Rodrigues

Está dando algum erro ou apenas não está atualizando estoque?
Responder

17/08/2012

Jose Maria

Sou Iniciante...

resposta 1 -como fazer este cancelamento dentro da venda, pois se cancelar tem q voltar para o estoque...
resposta 2 -nao apresenta erro..mas nao devolve as qtd...

aguardo retorno..
Responder

17/08/2012

Romulo Contro

vc calcula o estoque como? tem uma tabela separada que armazena o valor do estoque? ou calcula ele na tabela de venda?

pois o que vc poderia fazer, é lançar mais um registro na tabela de vendas com quantidade negativa... assim ficaria um registro da venda, e outro registro do cancelamento... entende?

mas se tiver uma tabela diferente pra estoque, vc lê o estoque atual e depois faz a soma com a quantidade do cancelamento... tudo junto na rotina de cancelamento do seu programa...

exemplo:
estoque inicial 2
16/08 - venda de 1 ... estoque anterior 2 - 1 da venda ... estoque = 1
17/08 - cancelamento da venda (1) ... estoque 1 + 1 cancelamento da venda = estoque 2

daí vc teria uma tabela separada pra salvar o estoque... pode ser na de produtos mesmo...

ficaria mais ou menos isso...

aí se quiser colocar um campo na tabela de vendas, como CANCELADO = S/N... facilita depois pra vc emitir relatórios... por exemplo, se o cliente quiser tirar um relatório só de cancelamentos... ou só de vendas sem cancelamentos...

daí no cancelamento, vc da um update nesse registro da venda pra cancelado = S;
depois cria um novo registro negativo referente a essa venda cancelada;
depois vc faz a alteração do estoque.
Responder

17/08/2012

Romulo Contro

e outra coisa... caso não queira fazer do jeito que falei, e volte a mexer na trigger, tenta fazer assim com o begin, end e BEFORE no lugar de AFTER:

CREATE TRIGGER `Atualiza_Estoque_Devolucao` BEFORE DELETE ON `itens2`
FOR EACH ROW
begin
update produtos p
set estoque = estoque + old.quantidade
where p.codprod = old.codprod;
end


pq sei lá... AFTER delete... vai fazer DEPOIS que deletar... não tenho certeza, mas pode ser que por já ter deletado, ele nao ta passando nenhum valor na trigger... desse novo jeito ele vai atualizar o estoque ANTES de deletar... mas não sei, tenta fazer desse jeito aí e fala pra gente.

abraço!
Responder

17/08/2012

William

Supondo que o nome dos campos estejam corretos, tente assim;

delimiter $$
CREATE TRIGGER `Atualiza_Estoque_Devolucao` AFTER DELETE ON `itens2`
FOR EACH ROW
begin
  update produtos
  set estoque = estoque + old.quantidade
  where codprod = old.codprod;
end $$
delimiter ;


Fiz um teste ak e funcionou, MySQL 5.5.
Responder

20/08/2012

Jose Maria

ola pessoal, william e romulo, tentei alterar a triggers mas nao funcionou..nao esta voltando as qtd para o estoque...aguardo retorno...desde agradeço pela atençao...
Responder

20/08/2012

William

Colega sei q é chato, mas vou ter q perguntar:

Existe o campo estoque na tabela PRODUTOS, e o tipo desse campos é int?

Existe o campo codprod na tabela PRODUTOS?

Existe o campos quantidade na tabela ITENS2 o tipo desse campos é int?

Existe o campo codprod na tabela ITENS2 ?

Responder

27/08/2012

Jose Maria

Sim...existe este campos sim...ok..abraco
Responder
pq vc não faz direto no programa? acho que fica melhor...
e um conselho: não deleta a venda do banco, coloca um campo APAGADO ou DELETADO, e marca ele como S ou N... pois se precisar mostrar um relatório depois, vc pode exibir pro cliente que houve compra, e que houve cancelamento... se ele tiver algum problema com estoque, ou mesmo até dinheiro em caixa algum dia, ele vai poder consultar as vendas que foram canceladas... aí na tabela de vendas vc lança um valor negativo lá... e no estoque subtrai a quantidade cancelada por dentro do delphi mesmo.



Boa tarde, como ficaria direto no programa? Estou tentando fazer pela Trigger, porém não estou conseguindo passar a condição para verificar se a venda foi CANCELADA para retornar o Estoque... Se puder ajudar, agradeço!! (Obs: estou criando a Trigger em cima da tabela vendas_itens)...
Responder

Sugiro a manter no banco.
Isso reduz muito a manutenção de código fonte e de paradas de sistema.
CREATE TRIGGER Atualiza_Estoque_Devolucao AFTER INSERT
ON itens2
FOR EACH ROW
BEGIN
	UPDATE Produtos SET Estoque = Estoque - OLD.Quantidade
	WHERE Referencia = OLD.Produto;
END
Responder
CREATE TRIGGER Atualiza_Estoque_Devolucao AFTER INSERT
ON itens2
FOR EACH ROW
BEGIN
    UPDATE Produtos SET Estoque = Estoque - OLD.Quantidade
    WHERE CodProd = OLD.CodProd;
END
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar