Atualizando Estoque
procedure TF_Entrada.btn_GravarNotaClick(Sender: TObject);
var Mes_Ano: String;
data: TDate;
begin
TPanelProcessando.Visible:= True;
ProgressBar.Max:= DM.qryNFEntrada.RecordCount;
With DM.qryNFEntrada do
begin
First;
While not eof do
begin
//Atualizando Tabela de Produtos
Data:= FieldByName ('DataLancamento').AsDateTime;
DM.qryProduto.Locate('Cod_InternoProduto',
FieldByName ('Cod_InternoProduto').AsInteger,[]);
DM.qryProduto.Edit;
DM.qryProduto.FieldByName('EstadoAtual').AsInteger:=
DM.qryProduto.FieldByName ('EstadoAtual').AsInteger +
FieldByName ('Quantidade').AsInteger;
DM.qryProduto.FieldByName('DataCompra').AsDateTime:=
FieldByName ('DataLancamento').AsDateTime;
DM.qryProduto.FieldByName('PrecoVenda').AsInteger:=
FieldByName ('ValorVenda').AsInteger;
DM.qryProduto.Post;
//Eviando Nota para Contas à Pagar
DM.qryContaPagar.Append;
DM.qryContaPagarCOD_FORNECEDOR.AsString:=
DM.qryNFCompraCOD_FORNECEDOR.AsString;
DM.qryContaPagarFORNECEDOR.AsString:=
DM.qryNFCompraFORNECEDOR.AsString;
DM.qryContaPagarNUMDOCUMENTO.AsString:=
FieldByName ('Cod_NFCompra').AsString;
DM.qryContaPagarDATAEMISSAO.AsDateTime:=
FieldByName ('DataLancamento').AsDateTime;
DM.qryContaPagarVALORTOTAL.AsString:=
FieldByName ('ValorTotal').AsString;
DM.qryContaPagarCOD_NATUREZAOP.AsString:=
DM.qryNFCompraCOD_NATUREZAOP.AsString;
DM.qryContaPagarNATUREZAOPERACAO.AsString:=
DM.qryNFCompraNATUREZAOPERACAO.AsString;
Mes_Ano:=
inttostr (MonthOf(data)) + '/' + inttostr (YearOf(data));
DM.qryContaPagarMESANO.Text:= Mes_Ano;
DM.qryContaPagar.Post;
Next;
ProgressBar.Position:= ProgressBar.Position +1;
end;
end;
TPanelProcessando.Visible:= False;
ShowMessage('NFe Cadastrada com Sucesso!');
DM.qryNFCompra.Refresh;
Close;
permitido:= False;
end;
Exemplo se eu colocar tres Produtos na nota ele so atualiza o ultimo da lista
mas pega a quantidade dos outros produtos todos que esta na nota e atualiza so em um produto
se alguem pode ajudar
agradeço
var Mes_Ano: String;
data: TDate;
begin
TPanelProcessando.Visible:= True;
ProgressBar.Max:= DM.qryNFEntrada.RecordCount;
With DM.qryNFEntrada do
begin
First;
While not eof do
begin
//Atualizando Tabela de Produtos
Data:= FieldByName ('DataLancamento').AsDateTime;
DM.qryProduto.Locate('Cod_InternoProduto',
FieldByName ('Cod_InternoProduto').AsInteger,[]);
DM.qryProduto.Edit;
DM.qryProduto.FieldByName('EstadoAtual').AsInteger:=
DM.qryProduto.FieldByName ('EstadoAtual').AsInteger +
FieldByName ('Quantidade').AsInteger;
DM.qryProduto.FieldByName('DataCompra').AsDateTime:=
FieldByName ('DataLancamento').AsDateTime;
DM.qryProduto.FieldByName('PrecoVenda').AsInteger:=
FieldByName ('ValorVenda').AsInteger;
DM.qryProduto.Post;
//Eviando Nota para Contas à Pagar
DM.qryContaPagar.Append;
DM.qryContaPagarCOD_FORNECEDOR.AsString:=
DM.qryNFCompraCOD_FORNECEDOR.AsString;
DM.qryContaPagarFORNECEDOR.AsString:=
DM.qryNFCompraFORNECEDOR.AsString;
DM.qryContaPagarNUMDOCUMENTO.AsString:=
FieldByName ('Cod_NFCompra').AsString;
DM.qryContaPagarDATAEMISSAO.AsDateTime:=
FieldByName ('DataLancamento').AsDateTime;
DM.qryContaPagarVALORTOTAL.AsString:=
FieldByName ('ValorTotal').AsString;
DM.qryContaPagarCOD_NATUREZAOP.AsString:=
DM.qryNFCompraCOD_NATUREZAOP.AsString;
DM.qryContaPagarNATUREZAOPERACAO.AsString:=
DM.qryNFCompraNATUREZAOPERACAO.AsString;
Mes_Ano:=
inttostr (MonthOf(data)) + '/' + inttostr (YearOf(data));
DM.qryContaPagarMESANO.Text:= Mes_Ano;
DM.qryContaPagar.Post;
Next;
ProgressBar.Position:= ProgressBar.Position +1;
end;
end;
TPanelProcessando.Visible:= False;
ShowMessage('NFe Cadastrada com Sucesso!');
DM.qryNFCompra.Refresh;
Close;
permitido:= False;
end;
Exemplo se eu colocar tres Produtos na nota ele so atualiza o ultimo da lista
mas pega a quantidade dos outros produtos todos que esta na nota e atualiza so em um produto
se alguem pode ajudar
agradeço
Rodrigo Almeida
Curtidas 0
Respostas
Joni Nunes
08/09/2011
Logo depois do comando DM.qryProduto.Post, adicione DM.qryProduto.First para que o sistema busque o próximo produto, fazendo a varredura pelo início da sua lista de produtos.
Segue outras sugestões para seu sistema:
1 - Sempre de nome para os componentes do seu projeto, exemplo botão gravar, renomeie para btGravar;
2 - Crie um método e centralize nele o algoritimo de atualizar o estoque, faça a chamada do método no evento clique do botão gravar;
3 - Pelo que notei em seu sistema, você simplesmente atualiza dados de compra, venda, data diretamente no cadastro de mercadorias, visando manter histórico, sugiro a criação de uma entiade de relacionamento, para armazenar essas informações, afim de manter histórico das compras e vendas dos seus produtos;
Espero ter ajudado.
abraço
Segue outras sugestões para seu sistema:
1 - Sempre de nome para os componentes do seu projeto, exemplo botão gravar, renomeie para btGravar;
2 - Crie um método e centralize nele o algoritimo de atualizar o estoque, faça a chamada do método no evento clique do botão gravar;
3 - Pelo que notei em seu sistema, você simplesmente atualiza dados de compra, venda, data diretamente no cadastro de mercadorias, visando manter histórico, sugiro a criação de uma entiade de relacionamento, para armazenar essas informações, afim de manter histórico das compras e vendas dos seus produtos;
Espero ter ajudado.
abraço
GOSTEI 0
Rodrigo Almeida
08/09/2011
Tentei utilizar o DM.qryProduto.First;
como mencionou
mas ainda continou o mesmo procedimento ele atualiza somente o ultimmo produto da lista
meu padrão para botão eh btn_NomeBotão
E quanto a dica que me deu em utilizar procedimento no oventoclick?
isso seria melhor para demsempenho
como mencionou
mas ainda continou o mesmo procedimento ele atualiza somente o ultimmo produto da lista
meu padrão para botão eh btn_NomeBotão
E quanto a dica que me deu em utilizar procedimento no oventoclick?
isso seria melhor para demsempenho
GOSTEI 0
Rodrigo Almeida
08/09/2011
O problema era o seguinte:
eu usava uma query não sei pq as query naum varem toda a lista não consegui descbri pq pois me projeto ja esta atrasado mas assim que terminar vou procurar me informar
a solução foi a seguinte troquei minhas ibqrery por ibtable componentes da palheta interbase
o projeto aumento um poko
mas o desempenho fikou melhor
eu usava uma query não sei pq as query naum varem toda a lista não consegui descbri pq pois me projeto ja esta atrasado mas assim que terminar vou procurar me informar
a solução foi a seguinte troquei minhas ibqrery por ibtable componentes da palheta interbase
o projeto aumento um poko
mas o desempenho fikou melhor
GOSTEI 0