atualizar estoque apos exclusao de vendas
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...
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
Curtidas 0
Respostas
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.
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
16/08/2012
Está dando algum erro ou apenas não está atualizando estoque?
GOSTEI 0
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..
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
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.
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
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!
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
16/08/2012
Supondo que o nome dos campos estejam corretos, tente assim;
Fiz um teste ak e funcionou, MySQL 5.5.
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
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
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 ?
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
16/08/2012
Sim...existe este campos sim...ok..abraco
GOSTEI 0
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.
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
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
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