Fórum Proibir Exclusão de Produto Movimentado #477650
30/04/2014
0
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
Curtir tópico
+ 0Posts
02/05/2014
Wilton Júnior
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
02/05/2014
Fabio
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
02/05/2014
Wilton Júnior
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
02/05/2014
Wilton Júnior
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
02/05/2014
Fabio
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
02/05/2014
Wilton Júnior
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
02/05/2014
Fabio
e te aviso se funcionou blz
obrigado por enquanto....
Gostei + 0
02/05/2014
Fabio
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
27/05/2014
Nelson Santos
http://www.3dsistemas.com.br
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)