atualizar estoque apos exclusao de vendas

Delphi

16/08/2012

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...
Jose Maria

Jose Maria

Curtidas 0

Respostas

Romulo Contro

Romulo Contro

16/08/2012

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.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

16/08/2012

Está dando algum erro ou apenas não está atualizando estoque?
GOSTEI 0
Jose Maria

Jose Maria

16/08/2012

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..
GOSTEI 0
Romulo Contro

Romulo Contro

16/08/2012

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.
GOSTEI 0
Romulo Contro

Romulo Contro

16/08/2012

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!
GOSTEI 0
William

William

16/08/2012

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.
GOSTEI 0
Jose Maria

Jose Maria

16/08/2012

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...
GOSTEI 0
William

William

16/08/2012

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 ?

GOSTEI 0
Jose Maria

Jose Maria

16/08/2012

Sim...existe este campos sim...ok..abraco
GOSTEI 0
Jefferson Quinelatto

Jefferson Quinelatto

16/08/2012

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)...
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

16/08/2012


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
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

16/08/2012

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
GOSTEI 0
POSTAR