Proibir Exclusão de Produto Movimentado
Pessoal Preciso de Algumas sugestões pois preciso fazer a seguinte validaçao:
se o Produto Cadastro ja Teve Algum movimento (entrada, Saida, Venda) eu proibir a exclusao eu pensei em usar o Field EstoqueReal que quando altera-se a partir do Cadstro bloque-se em fim para quem tem mais experiencia deve saber o melhor metodo ...
outra validacao é que se o Fornecedor ja possui produtos cadastrados eu nao possa o excluir pois a tabela Produtos tem Dependencia dessa Tabela, somente se nao tiver nenhum produto cadastrado de determinado Fornecedor ai sim, pode ser feita a exclusao
em fim quem puder me dar uma dica eu agradeço
abraço
se o Produto Cadastro ja Teve Algum movimento (entrada, Saida, Venda) eu proibir a exclusao eu pensei em usar o Field EstoqueReal que quando altera-se a partir do Cadstro bloque-se em fim para quem tem mais experiencia deve saber o melhor metodo ...
outra validacao é que se o Fornecedor ja possui produtos cadastrados eu nao possa o excluir pois a tabela Produtos tem Dependencia dessa Tabela, somente se nao tiver nenhum produto cadastrado de determinado Fornecedor ai sim, pode ser feita a exclusao
em fim quem puder me dar uma dica eu agradeço
abraço
Fabio
Curtidas 0
Respostas
Wilton Júnior
30/04/2014
Fabio, a forma que a empresa onde trabalho faz o seguinte, existe uma tabela que realiza todos os movimentos do produto, então ele checa que o produto possui movimento se possuir não permite exclusão.
A forma que esta pensando para mim estaria errado pois estoque real é o mesmo da entrada do estoque se o produto não tiver movimento, e durante varios movimentos o estoque real pode até se igualar novamente com entrada do estoque.
Então sugiro uma tabela para armazenar o movimento do produto, ou seja, uma tabela que controla entrada e saida do produto.
Espero ter ajudado.
A forma que esta pensando para mim estaria errado pois estoque real é o mesmo da entrada do estoque se o produto não tiver movimento, e durante varios movimentos o estoque real pode até se igualar novamente com entrada do estoque.
Então sugiro uma tabela para armazenar o movimento do produto, ou seja, uma tabela que controla entrada e saida do produto.
Espero ter ajudado.
GOSTEI 0
Fabio
30/04/2014
Sim eu tenho a Tabela MOVIMENTO onde tem os campos
id_movimento
id_produto
id_Entrada_Saida
Tabela
data
tipo_movimento ('S' pra saida ou venda e 'E' para entrada)
Descricao
Quantidade
porem nao sei como fazer essa validacao e comparacao no delphi o meu codigo de exclusao do formulario modelo esta assim
if MessageDlg('Deseja mesmo excluir este registro?',mtInformation, [mbYes, mbNo],0) = mrYes then
begin
if not DtsConsulta.DataSet.IsEmpty then //Verifica se nao esta vazio
begin
DtsConsulta.DataSet.Delete;
if dtsConsulta.DataSet is TClientDataSet then //compara se dtsconsulta e da classe Tclientdataset
TClientDataSet (dtsconsulta.DataSet).ApplyUpdates(0);// se for da o applyupdt
ShowMessage('Exclusão realizada com Exito');
id_movimento
id_produto
id_Entrada_Saida
Tabela
data
tipo_movimento ('S' pra saida ou venda e 'E' para entrada)
Descricao
Quantidade
porem nao sei como fazer essa validacao e comparacao no delphi o meu codigo de exclusao do formulario modelo esta assim
if MessageDlg('Deseja mesmo excluir este registro?',mtInformation, [mbYes, mbNo],0) = mrYes then
begin
if not DtsConsulta.DataSet.IsEmpty then //Verifica se nao esta vazio
begin
DtsConsulta.DataSet.Delete;
if dtsConsulta.DataSet is TClientDataSet then //compara se dtsconsulta e da classe Tclientdataset
TClientDataSet (dtsconsulta.DataSet).ApplyUpdates(0);// se for da o applyupdt
ShowMessage('Exclusão realizada com Exito');
GOSTEI 0
Wilton Júnior
30/04/2014
Ai fabio vc precisa fazer um select tah tabela de movimento buscando o produto que o usuario deseja excluir.
Se o produto que o usuario deseja excluir teve alguma saida então deve emitir uma mensagem informando que esse produto possui moviemento por isso não pode ser excluido e não fazer o delete. se tiver duvida para montar a estrutura passa para para mim as estrutura das tabela e o comando no botão delete que tento monta um para você.
Se o produto que o usuario deseja excluir teve alguma saida então deve emitir uma mensagem informando que esse produto possui moviemento por isso não pode ser excluido e não fazer o delete. se tiver duvida para montar a estrutura passa para para mim as estrutura das tabela e o comando no botão delete que tento monta um para você.
GOSTEI 0
Wilton Júnior
30/04/2014
abela MOVIMENTO
id_movimento
id_produto
id_Entrada_Saida
Tabela
data
tipo_movimento ('S' pra saida ou venda e 'E' para entrada)
Descricao
Quantidade
if MessageDlg('Deseja mesmo excluir este registro?',mtInformation, [mbYes, mbNo],0) = mrYes then
begin
with movimento do
begin
close;
sql.clear;
sql.add(select * from movimento where tipo_movimento = :wmov and id_produto = :wid');
parambyname('wmov').asstring := 'S';
parambyname('wid').asinteger:= DBEdit1.text;
open;
end;
if not Movimento.Empty then //Verifica se nao esta vazio
begin
Showmessage('Existe Movimento nesse produto');
BtnSair.setfocus;
exit;
end;
DtsConsulta.DataSet.Delete;
if dtsConsulta.DataSet is TClientDataSet then //compara se dtsconsulta e da classe Tclientdataset
TClientDataSet (dtsconsulta.DataSet).ApplyUpdates(0);// se for da o applyupdt
ShowMessage('Exclusão realizada com Exito');
end;
Da uma olha e ve se isso lhe ajuda
id_movimento
id_produto
id_Entrada_Saida
Tabela
data
tipo_movimento ('S' pra saida ou venda e 'E' para entrada)
Descricao
Quantidade
if MessageDlg('Deseja mesmo excluir este registro?',mtInformation, [mbYes, mbNo],0) = mrYes then
begin
with movimento do
begin
close;
sql.clear;
sql.add(select * from movimento where tipo_movimento = :wmov and id_produto = :wid');
parambyname('wmov').asstring := 'S';
parambyname('wid').asinteger:= DBEdit1.text;
open;
end;
if not Movimento.Empty then //Verifica se nao esta vazio
begin
Showmessage('Existe Movimento nesse produto');
BtnSair.setfocus;
exit;
end;
DtsConsulta.DataSet.Delete;
if dtsConsulta.DataSet is TClientDataSet then //compara se dtsconsulta e da classe Tclientdataset
TClientDataSet (dtsconsulta.DataSet).ApplyUpdates(0);// se for da o applyupdt
ShowMessage('Exclusão realizada com Exito');
end;
Da uma olha e ve se isso lhe ajuda
GOSTEI 0
Fabio
30/04/2014
[img]http://arquivo.devmedia.com.br/forum/imagem/368071-20140502-112708.jpg[/img]
minha estrutura do botao excluir
procedure TF_Modelo.btnExcluirClick(Sender: TObject);
begin
if MessageDlg('Deseja mesmo excluir este registro?',mtInformation, [mbYes, mbNo],0) = mrYes then
begin
if not DtsConsulta.DataSet.IsEmpty then //Verifica se nao esta vazio
begin
DtsConsulta.DataSet.Delete;
if dtsConsulta.DataSet is TClientDataSet then //compara se dtsconsulta e da classe Tclientdataset
TClientDataSet (dtsconsulta.DataSet).ApplyUpdates(0);// se for da o applyupdt
ShowMessage('Exclusão realizada com Exito');
end;
end;
end;
minha estrutura do botao excluir
procedure TF_Modelo.btnExcluirClick(Sender: TObject);
begin
if MessageDlg('Deseja mesmo excluir este registro?',mtInformation, [mbYes, mbNo],0) = mrYes then
begin
if not DtsConsulta.DataSet.IsEmpty then //Verifica se nao esta vazio
begin
DtsConsulta.DataSet.Delete;
if dtsConsulta.DataSet is TClientDataSet then //compara se dtsconsulta e da classe Tclientdataset
TClientDataSet (dtsconsulta.DataSet).ApplyUpdates(0);// se for da o applyupdt
ShowMessage('Exclusão realizada com Exito');
end;
end;
end;
GOSTEI 0
Wilton Júnior
30/04/2014
procedure TF_Modelo.btnExcluirClick(Sender: TObject);
begin
if MessageDlg('Deseja mesmo excluir este registro?',mtInformation, [mbYes, mbNo],0) = mrYes then
begin
with movimento do
begin
close;
sql.clear;
sql.add('select id_moviemnto from movimento where tipo_movimento = :wtipoi and id_produto = :wproduto');
parambyname('wtipo').value := 'S';
parambyname('wproduto').asstring := txtcodigodoproduto.text;
open;
if not movimento.isempty then
begin
showmessage('Produto possui movimentação! Exclusão não permitida.');
btnfechar.setfocus;
exit;
end;
if not DtsConsulta.DataSet.IsEmpty then //Verifica se nao esta vazio
begin
DtsConsulta.DataSet.Delete;
if dtsConsulta.DataSet is TClientDataSet then //compara se dtsconsulta e da classe Tclientdataset
TClientDataSet (dtsconsulta.DataSet).ApplyUpdates(0);// se for da o applyupdt
ShowMessage('Exclusão realizada com Exito');
end;
end;
end;
Com certesa esse código assim dará certo, se entendi é isso que vc precisa.
begin
if MessageDlg('Deseja mesmo excluir este registro?',mtInformation, [mbYes, mbNo],0) = mrYes then
begin
with movimento do
begin
close;
sql.clear;
sql.add('select id_moviemnto from movimento where tipo_movimento = :wtipoi and id_produto = :wproduto');
parambyname('wtipo').value := 'S';
parambyname('wproduto').asstring := txtcodigodoproduto.text;
open;
if not movimento.isempty then
begin
showmessage('Produto possui movimentação! Exclusão não permitida.');
btnfechar.setfocus;
exit;
end;
if not DtsConsulta.DataSet.IsEmpty then //Verifica se nao esta vazio
begin
DtsConsulta.DataSet.Delete;
if dtsConsulta.DataSet is TClientDataSet then //compara se dtsconsulta e da classe Tclientdataset
TClientDataSet (dtsconsulta.DataSet).ApplyUpdates(0);// se for da o applyupdt
ShowMessage('Exclusão realizada com Exito');
end;
end;
end;
Com certesa esse código assim dará certo, se entendi é isso que vc precisa.
GOSTEI 0
Fabio
30/04/2014
Cara assim que Chegar em Casa eu vou testar ele mas tambem acho que vai dar certo,
e te aviso se funcionou blz
obrigado por enquanto....
e te aviso se funcionou blz
obrigado por enquanto....
GOSTEI 0
Fabio
30/04/2014
procedure TF_Modelo.btnExcluirClick(Sender: TObject);
begin
if MessageDlg('Deseja mesmo excluir este registro?',mtInformation, [mbYes, mbNo],0) = mrYes then
begin
with movimento do
begin
close;
sql.clear;
sql.add('select id_moviemnto from movimento where tipo_movimento = :wtipoi and id_produto = :wproduto');
parambyname('wtipo').value := 'S';
parambyname('wproduto').asstring := txtcodigodoproduto.text;
open;
if not movimento.isempty then
begin
showmessage('Produto possui movimentação! Exclusão não permitida.');
btnfechar.setfocus;
exit;
end;
if not DtsConsulta.DataSet.IsEmpty then //Verifica se nao esta vazio
begin
DtsConsulta.DataSet.Delete;
if dtsConsulta.DataSet is TClientDataSet then //compara se dtsconsulta e da classe Tclientdataset
TClientDataSet (dtsconsulta.DataSet).ApplyUpdates(0);// se for da o applyupdt
ShowMessage('Exclusão realizada com Exito');
end;
end;
end;
Com certesa esse código assim dará certo, se entendi é isso que vc precisa.
begin
if MessageDlg('Deseja mesmo excluir este registro?',mtInformation, [mbYes, mbNo],0) = mrYes then
begin
with movimento do
begin
close;
sql.clear;
sql.add('select id_moviemnto from movimento where tipo_movimento = :wtipoi and id_produto = :wproduto');
parambyname('wtipo').value := 'S';
parambyname('wproduto').asstring := txtcodigodoproduto.text;
open;
if not movimento.isempty then
begin
showmessage('Produto possui movimentação! Exclusão não permitida.');
btnfechar.setfocus;
exit;
end;
if not DtsConsulta.DataSet.IsEmpty then //Verifica se nao esta vazio
begin
DtsConsulta.DataSet.Delete;
if dtsConsulta.DataSet is TClientDataSet then //compara se dtsconsulta e da classe Tclientdataset
TClientDataSet (dtsconsulta.DataSet).ApplyUpdates(0);// se for da o applyupdt
ShowMessage('Exclusão realizada com Exito');
end;
end;
end;
Com certesa esse código assim dará certo, se entendi é isso que vc precisa.
Cara nao deu certo ele nao ta pegando DM + SqlQuery.clear o codigo fico assim:
procedure TF_Produto.btnExcluirClick(Sender: TObject);
begin
inherited;
if MessageDlg('Deseja mesmo excluir este registro?',mtInformation, [mbYes, mbNo],0) = mrYes then
begin
with DM.Movimentos do
begin
close;
DM.Movimentos.clear;
DM.Movimentos.add('select id_moviemnto from movimento where tipo_movimento = :wtipoi and id_produto = :wproduto');
parambyname('wtipo').value := 'S';
parambyname('wproduto').asstring := txtcodigodoproduto.text;
open;
if not dts_movimento.isempty then
begin
showmessage('Produto possui movimentação! Exclusão não permitida.');
btnfechar.setfocus;
exit;
end;
if not DtsConsulta.DataSet.IsEmpty then //Verifica se nao esta vazio
begin
DtsConsulta.DataSet.Delete;
if dtsConsulta.DataSet is TClientDataSet then //compara se dtsconsulta e da classe Tclientdataset
TClientDataSet (dtsconsulta.DataSet).ApplyUpdates(0);// se for da o applyupdt
ShowMessage('Exclusão realizada com Exito');
end;
end;
end;
end;
outra coisa o que seria esse txtcodigodoproduto.text? nao consegui entender se puder me ajudar eu agradeço
abraço
GOSTEI 0
Nelson Santos
30/04/2014
ganhe dinheiro com softwares 3D em Delphi 7
http://www.3dsistemas.com.br
http://www.3dsistemas.com.br
GOSTEI 0