Fórum Proibir Exclusão de Produto Movimentado #477650

30/04/2014

0

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
Fabio

Fabio

Responder

Posts

02/05/2014

Wilton Júnior

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.
Responder

Gostei + 0

02/05/2014

Fabio

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');
Responder

Gostei + 0

02/05/2014

Wilton Júnior

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ê.
Responder

Gostei + 0

02/05/2014

Wilton Júnior

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
Responder

Gostei + 0

02/05/2014

Fabio

[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;
Responder

Gostei + 0

02/05/2014

Wilton Júnior

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.
Responder

Gostei + 0

02/05/2014

Fabio

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....
Responder

Gostei + 0

02/05/2014

Fabio

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.


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
Responder

Gostei + 0

27/05/2014

Nelson Santos

ganhe dinheiro com softwares 3D em Delphi 7
http://www.3dsistemas.com.br
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar