Somar Itens DbGrid Automaticamente
Oi pessoal!
Tenho um dbgrid com os itens da venda e tenho um edit com o total da venda. Gostaria que fosse mostrado na tela no edit total da venda a soma de todos os itens do dbgrid. Exemplo: A venda começa zerada e toda vez que o usuario vai acrescentando itens no grid o campo valor total vai sendo atualizado. Hoje so faço isso no momento que o usuario salva, porque ai chamo uma procedure que faz esse calculo pra mim, mas o ideal seria que aparecesse pra ele na hora que ele vai vendendo..
Agradeço desde já.
Tenho um dbgrid com os itens da venda e tenho um edit com o total da venda. Gostaria que fosse mostrado na tela no edit total da venda a soma de todos os itens do dbgrid. Exemplo: A venda começa zerada e toda vez que o usuario vai acrescentando itens no grid o campo valor total vai sendo atualizado. Hoje so faço isso no momento que o usuario salva, porque ai chamo uma procedure que faz esse calculo pra mim, mas o ideal seria que aparecesse pra ele na hora que ele vai vendendo..
Agradeço desde já.
Tcarvalho
Curtidas 0
Respostas
Eixox
07/07/2005
Crie uma SQL mais ou menos assim:
O que vai acontecer é o seguite:
1 - Quando você abrir o pedido de venda, jogue o valor para essa consulta
2 - Essa consulta deve ser executada toda a vez que um usuário executar uma tarefa de inclusão e exclusão.
Nos três eventos da tabela (AfterDelete, AfterPost) execute a consulta da seguinte forma
Acho que isso resolve teu problema.
Quando fechar o pedido não esqueçe de fechar a consulta. Para colocar no form você sabe como faz né - isso é o básico.
Eixox -|-
SELECT SUM(CampoQueTemOTotal), COUNT(CódigoMestre) FROM TabelaDetalhes //Que contém os itens da venda WHERE CódigoDoPedido = :CódigoMestre
O que vai acontecer é o seguite:
1 - Quando você abrir o pedido de venda, jogue o valor para essa consulta
2 - Essa consulta deve ser executada toda a vez que um usuário executar uma tarefa de inclusão e exclusão.
Nos três eventos da tabela (AfterDelete, AfterPost) execute a consulta da seguinte forma
SQLTotalDaVenda.Active := False; SQLTotalDaVenda.Params(´CódigoMestre´).AsInterger := TaTabelaMestreCODIGOMASTER.Value; SQLTotalDaVenda.Active := True;
Acho que isso resolve teu problema.
Quando fechar o pedido não esqueçe de fechar a consulta. Para colocar no form você sabe como faz né - isso é o básico.
Eixox -|-
GOSTEI 0
Tcarvalho
07/07/2005
Bom dia!
Obrigado pela atenção amigo, mas desse jeito que vc disse so funciona se ja houver dados na venda. O que eu queria eh no momento de que o usuario começa a vender, mas ainda nao finalizou a venda, quando ele for escolhendo os itens o valor total seja incrementado...Tipo um supermercado, sabe??Quando vc vai no caixa e a medida que os produtos vao sendo incluidos na venda, aparece o total ate aquele momento.
Ex: Item 1 = 10,00 - Total = 10,00
Item 2 = 5,00 - Total = 15,00
Item 3 = 20,0 - Total = 35,00
Agradeço novamente a atenção
T+
Obrigado pela atenção amigo, mas desse jeito que vc disse so funciona se ja houver dados na venda. O que eu queria eh no momento de que o usuario começa a vender, mas ainda nao finalizou a venda, quando ele for escolhendo os itens o valor total seja incrementado...Tipo um supermercado, sabe??Quando vc vai no caixa e a medida que os produtos vao sendo incluidos na venda, aparece o total ate aquele momento.
Ex: Item 1 = 10,00 - Total = 10,00
Item 2 = 5,00 - Total = 15,00
Item 3 = 20,0 - Total = 35,00
Agradeço novamente a atenção
T+
GOSTEI 0
Eixox
07/07/2005
O negócio é o seguinte:
Quando você começa a fazer uma venda, não existe nenhum dado na tabela. Isso quer dizer que o valor que será mostrado para seu cliente será R$ 0,00.
Quando o primeiro item for registrado (inserido) na tabela de detalhes ele começa a somar. Da forma que você quer. Igual ao supermercado. No supermercado, existe um outro problema que, os itens não são enviados diretamente para impressora por causa da encrenca do estorno. Após a impressão no ECF para estornar o produto é uma caixa de abelha.
O que acontece então, quando todos os itens são vendidos, eles passam a ser retirados automaticamente do estoque e segue para a posterior impressão no ECF.
No seu caso, o que você solicitou foi o que eu enviei para você. Você abre o pedido de compra e ele calcula automaticamente o total de todos os produtos. Se você quer fazer isso com os itens, só vai atrasar a sua vida - tipo Registra a quantidade depois o valor e finalizar com o cálculo de quantidade X valorUnitário e depois Somatiza tudo.
Veja bem o que você falou:
Um elemento só pode ser contabilizado no momento efetivo da transação e não por uma questão temporal. Até porque pode gerar um falso resultado para o seu cliente. Dá a impressão de que alguma coisa está errada.
Da forma como lhe passei, acredito que é a forma que a grande maioria faz.
Eixo x -|-
Quando você começa a fazer uma venda, não existe nenhum dado na tabela. Isso quer dizer que o valor que será mostrado para seu cliente será R$ 0,00.
Quando o primeiro item for registrado (inserido) na tabela de detalhes ele começa a somar. Da forma que você quer. Igual ao supermercado. No supermercado, existe um outro problema que, os itens não são enviados diretamente para impressora por causa da encrenca do estorno. Após a impressão no ECF para estornar o produto é uma caixa de abelha.
O que acontece então, quando todos os itens são vendidos, eles passam a ser retirados automaticamente do estoque e segue para a posterior impressão no ECF.
No seu caso, o que você solicitou foi o que eu enviei para você. Você abre o pedido de compra e ele calcula automaticamente o total de todos os produtos. Se você quer fazer isso com os itens, só vai atrasar a sua vida - tipo Registra a quantidade depois o valor e finalizar com o cálculo de quantidade X valorUnitário e depois Somatiza tudo.
Veja bem o que você falou:
´ Exemplo: A venda começa zerada e toda vez que o usuario vai acrescentando itens no grid o campo valor total vai sendo atualizado. Hoje so faço isso no momento que o usuario salva, porque ai chamo uma procedure que faz esse calculo pra mim, mas o ideal seria que aparecesse pra ele na hora que ele vai vendendo.´
Um elemento só pode ser contabilizado no momento efetivo da transação e não por uma questão temporal. Até porque pode gerar um falso resultado para o seu cliente. Dá a impressão de que alguma coisa está errada.
Da forma como lhe passei, acredito que é a forma que a grande maioria faz.
Eixo x -|-
GOSTEI 0
Silviogs
07/07/2005
Olá
já fiz uma vez, tente desta maneira.
todas as vezes que era confirmado o item para o pedido ou venda executava esta rotina.
Atenciosamente
Silvio Guedes
já fiz uma vez, tente desta maneira.
procedure TFmCadPedidos.AtualizaTotaisItems; var SomaItems, SomaDesconto : Real; RecAnterior : TBookmark; begin Recanterior := DataModule1.Items.GetBookmark; DataModule1.Items.Disablecontrols; try DataModule1.Items.First; SomaItems := 0; SomaDesconto := 0; while not DataModule1.Items.Eof do begin SomaItems := SomaItems + DataModule1.ItemsValorTotal.Value; SomaDesconto := SomaDesconto + DataModule1.ItemsDesconto.Value; DataModule1.Items.Next; end; DataModule1.Pedidos.Edit; DataModule1.PedidosTotalItens.Value := SomaItems; DataModule1.PedidosTotalDesconto.Value := SomaDesconto; DataModule1.PedidosTotalPago.Value := SomaItems - SomaDesconto; finally DataModule1.Items.Enablecontrols; if RecAnterior <> nil then begin DataModule1.Items.GotoBookmark(RecAnterior); DataModule1.Items.FreeBookmark(RecAnterior); end; end; DataModule1.Items.First; end;
todas as vezes que era confirmado o item para o pedido ou venda executava esta rotina.
Atenciosamente
Silvio Guedes
GOSTEI 0