Atualizar estoque da Tabela de Produtos

Delphi

30/11/2004

Estou precisando atualizar o estoque da tabela de produtos após uma venda. Estou usando dbexpress com Interbase 6.0.
As tabelas são vendas, itenvendas, produtos. Eu sei que tenho que dar um update, mas não sei como nem aonde.

essas são as estruturas básicas das tabelas

Itenvenda Produtos
COD_VENDA COD_PRODUTO
COD_PRODUTO ESTOQUE_ATUAL
QUANTIDADE

preciso fazer ESTOQUE _ATUAL - QUANTIDADE quando finalizar a venda.
Por favor se alguém tiver alguma idéia


Luciohc

Luciohc

Curtidas 0

Respostas

Rômulo Barros

Rômulo Barros

30/11/2004

With(Query)Do
Begin
   Close();
   Sql.Text := ´ UPDATE PRODUTOS SET QUANTIDADE = QUANTIDADE - :Qtd_Vendida WHERE COD_PROD = :Codigo_Prod ´;
   Params[0].AsInteger := Quantidade_Vendida;
   Params[1].AsInteger := CodigoDoProdutoVendido;
   ExecSql;
End;



GOSTEI 0
Demetrioi

Demetrioi

30/11/2004

A resposta acima está correta, porém, deve-se guardar o estoque numa tabela estoque e não na de produtos


GOSTEI 0
Rômulo Barros

Rômulo Barros

30/11/2004

A resposta acima está correta, porém, deve-se guardar o estoque numa tabela estoque e não na de produtos


Acredito eu que o estoque deve ser guardado na tabela de [b:e3e7d43bc2]produtos[/b:e3e7d43bc2], entretanto a [b:e3e7d43bc2]quantidade vendida [/b:e3e7d43bc2]e o [b:e3e7d43bc2]preço da venda [/b:e3e7d43bc2]deverá ser guardado na tabela [b:e3e7d43bc2]DetalhesDaVenda[/b:e3e7d43bc2].


GOSTEI 0
Demetrioi

Demetrioi

30/11/2004

Acredito eu que o estoque deve ser guardado na tabela de produtos, entretanto a quantidade vendida e o preço da venda deverá ser guardado na tabela DetalhesDaVenda.

Caro Colega,
Tenho plena certeza de que a qtd em estoque deve ser guardada na tabela de estoque.
Tenho diversos sistemas comerciais (vendidos) e em qq q seja a linguagem escolhida, ou banco de dados, a tabela de estoque vai registrar a qtd em estoque. no resto o citado acima está certo


GOSTEI 0
Technos

Technos

30/11/2004

Senhores, estou teno um problemminha desse tipo, poderiam me mandar um Diagrama basico de controle de estoque ? tenho um assim, mas to com essa duvida aee onde devo dar baixa e tudo mais.

Mostrem aqui como seria a melhor forma.

um abraço.


GOSTEI 0
Demetrioi

Demetrioi

30/11/2004

Senhores, estou teno um problemminha desse tipo, poderiam me mandar um Diagrama basico de controle de estoque ? tenho um assim, mas to com essa duvida aee onde devo dar baixa e tudo mais. Mostrem aqui como seria a melhor forma. um abraço.


Mande-me um email que te mando um banco de dados exemplo
demetrioi@bol.com.br


GOSTEI 0
Hard.disk

Hard.disk

30/11/2004

Eu não vejo motivo para a qtd em estoque não seja gravada na tabela de produtos..

O que eu costumo fazer é uma tabela de movimento de estoque onde em cada operaçao que eu mexa no estoque eu gravo nessa tabela e a qtd em estoque eu gravo na tabela de produtos.

Não vejo motivo pra não ser dessa forma!!

Por favor, me explique o pq de vc gravar numa outra tabela.. estou curioso...
Obrigado


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

30/11/2004

a quantidade em estoque não deve ser gravada na tabela de produtos por uma simples razão: se seu sistema for multiempresas/filiais, como você saberia o saldo em estoque?
a estrutura seria mais ou menos assim:

- tbproduto
ID_Produto
Codigo
Descricao
etc....

- tbestoque
ID_Produto
ID_Filial
SaldoEmEstoque

assim você consegue saber qual a quantidade em cada filial da empresa.

imagine uma casas bahia da vida com o saldo no cadastro de produtos: você vai lá e compra uma geladeira e quer levá-la naquele momento. o vendedor consulta o saldo e vê que há 230 geladeiras. mas na hora que ele vai ao estoque esta vazio!!!! porque essas 230 geladeiras estão espalhadas por outras filiais. assim, esse tipo de cadastro se torna ineficiente.
se o cadastro do saldo estivesse separado, o vendedor saberia em qual(is) filiais o produto estaria disponível.


GOSTEI 0
Rômulo Barros

Rômulo Barros

30/11/2004

a quantidade em estoque não deve ser gravada na tabela de produtos por uma simples razão: se seu sistema for multiempresas/filiais, como você saberia o saldo em estoque? a estrutura seria mais ou menos assim: - tbproduto ID_Produto Codigo Descricao etc.... - tbestoque ID_Produto ID_Filial SaldoEmEstoque assim você consegue saber qual a quantidade em cada filial da empresa. imagine uma casas bahia da vida com o saldo no cadastro de produtos: você vai lá e compra uma geladeira e quer levá-la naquele momento. o vendedor consulta o saldo e vê que há 230 geladeiras. mas na hora que ele vai ao estoque esta vazio!!!! porque essas 230 geladeiras estão espalhadas por outras filiais. assim, esse tipo de cadastro se torna ineficiente. se o cadastro do saldo estivesse separado, o vendedor saberia em qual(is) filiais o produto estaria disponível.


Agora sim ficou bem explicado. Valeu, Emenson !!! :wink:

Mas, por outro lado, se não formos desenvolver para uma ´Casas Bahia´ da vida, continuo trabalhando com a filosofia de guardar a quantidade em estoque na tabela de produtos. Mesmo assim, foi bom e de bastante importância o post do Emerson.en. Está aí mais uma que eu não sabia, e aprendi agora aqui no fórum.

Espero que a dúvida do nosso colega ´Luciohc´ tenha sido sanada.

Valwss...


GOSTEI 0
Luciohc

Luciohc

30/11/2004

Coloquei no evento beforepost do clientdataset itenvenda
With qgeral Do
Begin
Close();
QGeral.CommandText:= ´UPDATE PRODUTOS SET ESTOQUE_ATUAL = ESTOQUE_ATUAL - :Qtd_Vendida´ +
´ WHERE COD_PROD = :COD_PROD´;
Params[0].value := QUANT;
Params[1].Value := PRODUTO;
qgeral.Execute;
End;

dá o erro list index of bounds(0)
alguém sabe como resolve isso


GOSTEI 0
Hard.disk

Hard.disk

30/11/2004

Ah sim!! agora concordo....
mas como eu tb nunca desenvolvi pra casas bahia.. vou continuar trabalhando com a estrutura de gravar qtd em estoque na tabela de produtos.... hehehe
mas valew... concordo com vc...


Qto ao erro.. naum sei direito qual eh..
mas experimenta usar
parambyname(´QUANT´).value
em vez de params[0]

Abraços,
Fabio


GOSTEI 0
Rômulo Barros

Rômulo Barros

30/11/2004

Ah sim!! agora concordo.... mas como eu tb nunca desenvolvi pra casas bahia.. vou continuar trabalhando com a estrutura de gravar qtd em estoque na tabela de produtos.... hehehe mas valew... concordo com vc...


Assim seja !!! :roll: :roll: :roll:

With qgeral Do 
Begin 
Close(); 
TSqlQuery.Sql.Clear();
CommandText:= ´UPDATE PRODUTOS SET ESTOQUE_ATUAL = ESTOQUE_ATUAL - ´ + IntToStr(QUANT) + 
´ WHERE COD_PROD = ´ + IntToStr(PRODUTO)´; 
qgeral.Execute; 
End; 



GOSTEI 0
Emerson Nascimento

Emerson Nascimento

30/11/2004

:shock: pô, galera, casas bahia foi só um exemplo...

eu trabalho desenvolvendo sistemas de gestão empresarial e também sistemas para gestão de transportadoras e sempre (SEMPRE) há necessidade de controlar mais de uma filial para esses tipos de sistema. por isso o meu esquema de estoque/produção e vendas/faturamento segue sempre esse modelo, mesmo que seja para sistemas menores, pois se a empresa abre uma nova filial, o sistema estará totalmente preparado para trabalhar com esses novos dados, dando informações corretas nesse sentido. e eu sempre fico torcendo pra esses clientes abrirem novas filiais... assim eu vou na carona deles... :D


GOSTEI 0
Hard.disk

Hard.disk

30/11/2004

C ta certo!! concordo com sua definição.. mas eh q eu soh tenho um cliente com 2 filiais.. o problema q ele nem pensa em ter dinheiro para fazer uma rede entre elas.. hehehe.. diriamos q ele ja sofre pra pagar o micro q tem..
os outros clientes q eu tenho saum na sua grande maioria fabricas... q tem pelo menos 10 anos e funcionamento.. e nem pensam em abrir filial.. mas com certeza o dia q eu tiver esse problema vou usar a sua solução...
valew...

Ja que agente esta falando sobre esse assunto...
Outra coisa q eu costumo fazer eh ter uma tabela de movimento de estoque para eu ter um controle do estoque em qualquer dia..
a tabela eh assim
Id Int
Tpmov FK para uma tabela de tipos de movimento onde ja diz se eh de entrada ou saida
Prod Fk para produto
Qtd (quantidade movimentada)
Valor (valor referente a quantidade movimentada na data que ela foi movimentada)

Vc tb faz assim??
o q vc axa disso??
Abraços


GOSTEI 0
Hard.disk

Hard.disk

30/11/2004

Esqueci de dizer..
nessa tabela tb tem
Data e Hora do movimento..


Abraços de novo


GOSTEI 0
Demetrioi

Demetrioi

30/11/2004

Tabela de Estoque não serve só para novas filiais:
Imagine só: hoje o cliente compra um produto e o preço de compra dele é 3 reais e o de venda é 5 e ele tem 20 unidades no estoque.
se amanhã ele comprar mais 10 unidades ao preço de compra de 4 reais e o preço de venda passar para 7 reais, mas ele que vender os vinte q ele ainda tinha pelo preço de venda anterior(5 reais) para só depois poder vender as outras dez ao preço de venda novo(7 reais) como faria isso guardando a qtd em estoque na tabela de vandas?
ficaria td confuso, entendeu? NÂO É APENAS PARA EMPRESAS COM DUAS OU MAIS FILIAIS, server pra isso tb mas n é só para isso.
Acho q isso encerra o assunto


GOSTEI 0
Hard.disk

Hard.disk

30/11/2004

Kra.. ai eu ja naum concordo...
tipo.. axu q o q vc falow tem logica.. mas na pratica naum da certo...
imagina q um cliente leve 2 unidades do mesmo produto.. e no cadastro de estoque existe uma unidade com o preço de 3 reais e as demais com o preço de 5 reias...

Este cliente vai estar pagando 3 reais por uma unidade e 5 reais na outra...
Eu tenho varios sistemas que controlam caixa.. te garanto q c o cliente ve isso na tela.. ele vai xingar muito!! hehehehe

resumindo.. naum sei c pro seu mercado isso serve.. mas pro meu naum serve.. ja que eh inviavel existirem dois produtos iguais com preços diferentes na loja...
Mas achei muito interessante essa sua solução...
Valew...


GOSTEI 0
Demetrioi

Demetrioi

30/11/2004

certo mas então como vc controla o que eu falei anteriormente?
gostaría de saber sua idéia.
T+


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

30/11/2004

[b:d3c26984b1]Hard.disk[/b:d3c26984b1], sim, eu tenho uma tebela de movimentação de produtos semelhante a sua. inclusive essa mesma tabela serve para todo o controle de produção, no caso de indústrias.

o [b:d3c26984b1]demetrioi[/b:d3c26984b1], tem razão na sua colocação. mas eu não coloco isso na tabela de estoque, e sim numa tabela de lotes (também controlado por filial). o controle deve ser feito por lote de produtos desde que a empresa trabalhe dessa forma. então, quando houver uma venda, é necessário saber se há saldo em lote e qual a quantidade unitária do produto desse lote. mas esse é um recurso que deve ser muito, muito bem controlado. como disse o Hard.disk, imagine que do meu lote de R$ 5,00 tenha sobrado 2 peças. e tem o novo lote de R$ 7,00 com 10 peças. o cliente quer comprar 5 peças. como fica? esse controle deve ser muito bem feito, pois num caso desses deverá ser cobrado o menor preço, conforme dita a lei, e serão subtraídas as 2 peças do lote de R$ 5,00 e 3 do lote de R$ 7,00. então, na próxima venda, deverá ser cobrado R$ 7,00, pois terá sobrado o lote de 7 peças a R$ 7,00 cada.

não sei se fui claro... mas é isso....


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

30/11/2004

sem contar que deverão ser subtraídas as 5 peças do [b:a7665ff462]estoque[/b:a7665ff462] da filial...


GOSTEI 0
Dopi

Dopi

30/11/2004

O assunto ficou interessante... :-)

No comercio em geral, certamente não há preocupaçao com de Lotes por causa do Preço de Entrada... Nesse caso é muito comum usar o Calculo do Preço Medio de Entrada para apurar corretamente o lucro...

O raciocinio do Lojista é : Vou vender por Preço de Entrada Atual + X¬ de Lucro

Mas o Lote é necessário para um controle de Validades dos produtos, Garantias, etc...


GOSTEI 0
Hard.disk

Hard.disk

30/11/2004

Tb axu que o assunto ta ficando interessante.. ehehe :lol:

entaum demetrioi..
Como eu disse antes... meus clientes que usam o meu sistema q controla estoque saum clientes pekenos,, na verdade.. eh uma rede de pet shops...
onde naum importa o conceito de lote... o que normalmente acontece eh o fornecedor aumentar em X¬ o preço dos produtos... e meu aplicativo permite aplicar esses X¬ nos produtos que atendem x condições que o cliente pediu.. logo não faço esse controle de lote.. nem de preço por lote.. ja que o mercado dos meus clientes naum trabalham assim.. mas axu q c eu precisasse fazer faria sim.. do seu jeito... mas antes é preciso intender muito bem como q o cliente funciona.. pra saber c eh assim mesmo que ele quer trabalhar...

Abraços


GOSTEI 0
Luciohc

Luciohc

30/11/2004

O sistema já está dando baixa no estoque, obrigado pela ajuda.
A solução foi:
With qryatualizaestoque Do
Begin
Close();
qryatualizaestoque.SQL.Clear;
qryatualizaestoque.SQL.Text:= ´UPDATE PRODUTOS SET ESTOQUE_ATUAL = ESTOQUE_ATUAL - ´
+ floattostr(dm.cdsitenvendaQUANTIDADE.Value) +
´ where cod_produto = ´ + inttostr(cod_produto);
qryatualizaestoque.ExecSQL();
end;

Estou com outra dúvida.
Como eu disse estou usando dbexpress e Interbase 6.0, estou precisando que quando inserir na tabela itenvenda o dbgrid seja atualizado com os produtos que estão sendo vendidos. Quando estou inserindo só está aparecendo no dbgrid os dados do último produto.


GOSTEI 0
Demetrioi

Demetrioi

30/11/2004

[b:f064ae9287]Hard.disk[/b:f064ae9287], sim, eu tenho uma tebela de movimentação de produtos semelhante a sua. inclusive essa mesma tabela serve para todo o controle de produção, no caso de indústrias. o [b:f064ae9287]demetrioi[/b:f064ae9287], tem razão na sua colocação. mas eu não coloco isso na tabela de estoque, e sim numa tabela de lotes (também controlado por filial). o controle deve ser feito por lote de produtos desde que a empresa trabalhe dessa forma. então, quando houver uma venda, é necessário saber se há saldo em lote e qual a quantidade unitária do produto desse lote. mas esse é um recurso que deve ser muito, muito bem controlado. como disse o Hard.disk, imagine que do meu lote de R$ 5,00 tenha sobrado 2 peças. e tem o novo lote de R$ 7,00 com 10 peças. o cliente quer comprar 5 peças. como fica? esse controle deve ser muito bem feito, pois num caso desses deverá ser cobrado o menor preço, conforme dita a lei, e serão subtraídas as 2 peças do lote de R$ 5,00 e 3 do lote de R$ 7,00. então, na próxima venda, deverá ser cobrado R$ 7,00, pois terá sobrado o lote de 7 peças a R$ 7,00 cada. não sei se fui claro... mas é isso....


Ae hard.disk gostei muito da sua idéia de uma tabela de lotes, atualmente uso um campo na tabela de estoque para definir isto q vc falou mas acho que criar uma tabela lotes seja mais apropriado mesmo, vou dar uma sacada nisso hj a noite e tentar remodelar meu BD já que meus sistemas são quase 100¬ OO no que diz rewspeito a SQL principalmente. daí fica mais fácil.
Acho muito bom este tópico pois poucos programadores sabem como tratar esta parte de um sistema(que eu acho a fundamental).
valew galera
T+
demetrioi@bol.com.br


GOSTEI 0
Caninha51

Caninha51

30/11/2004

Achei muito interessante a discursão, porém fiquei com pena do coitado do luciohc!heheh

Se prestarem atenção vcs não o ajudaram em nadica de nada!hehe
Ficaram tão empolgados com o assunto que esqueceram do ´dono´ do tópico!heheh

** Tô gargalhando aki na frente do micro heheheh

Quando chegou lá na frente o Hard.Disk depois de discutir com o outro, diz; - ´Qto ao erro.. naum sei direito qual eh.. ´ hehehe...

Ainda bem que no final o luciohc desenrolou o problema (sozinho)!! :))


Vixe, desenterrei o tópico!!


Valew as risadas... abraços!!!


Caninha51


GOSTEI 0
Japa

Japa

30/11/2004

Uuahuhahaua essa foi boa mesmo... coitado do luciohc MESMO... auhuahuah

Mas foi bom... achu que todos nos aprendemos mais um pouco :D


GOSTEI 0
Demetrioi

Demetrioi

30/11/2004

Galera realmente essa foi uma onda falamos tanto e deixamos nosso colega de lado kkkkkkkkk mas ao menos houve um grande debate sobre um assunto de extrema importancia


GOSTEI 0
Mmoreira

Mmoreira

30/11/2004

Eeste aqui é das antigas mas eu vou desenterrar este topico ...

Estou precisando da opinião do pessoal que tem experiencia em desenvolvimento de sistemas para controle de estoque.

eu estou querendo saber como devo proceder na atualização do estoque ou seja entrada de produtos no estoque .... Eu deveria ter uma tabela tipo TBENTRADA_PRODUTO onde eu guardaria a data da entrada, a referencia do produto em questao, o codigo da filial, a quantidade que entrou .... Será que é mais ou menos assim???

Estou fazendo este sistema para um cliente que fabrica bolsas de couro, ou seja após a fabricaçao das bolsas ele tem que lançar tudo no sistema.

Bom conto com a ajuda dos colegas ...

valewsss


GOSTEI 0
Henrique Rodrigues

Henrique Rodrigues

30/11/2004

Estou tendo o mesmo problema e vi o código acima:

With(Query)Do 
Begin 
   Close(); 
   Sql.Text := ´ UPDATE PRODUTOS SET QUANTIDADE = QUANTIDADE - :Qtd_Vendida WHERE COD_PROD = :Codigo_Prod ´; 
   Params[0].AsInteger := Quantidade_Vendida; 
   Params[1].AsInteger := CodigoDoProdutoVendido; 
   ExecSql; 
End;



não entendi como o param[0] e [1] fazem ligação em uma consulta de itens de venda.

Isso faria a atualização de vários produtos ao mesmo tempo?


GOSTEI 0
Henrique Rodrigues

Henrique Rodrigues

30/11/2004

sobe


GOSTEI 0
Henrique Rodrigues

Henrique Rodrigues

30/11/2004

sobe


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

30/11/2004

a forma que foi mostrada

With(Query)Do 
Begin 
   Close(); 
   Sql.Text := ´ UPDATE PRODUTOS SET QUANTIDADE = QUANTIDADE - :Qtd_Vendida WHERE COD_PROD = :Codigo_Prod ´; 
   Params[0].AsInteger := Quantidade_Vendida; 
   Params[1].AsInteger := CodigoDoProdutoVendido; 
   ExecSql; 
End;

indica que será subtraída da quandidade do produto, o valor contido na variável Quantidade_Vendida, desde que o código do produto seja igual ao conteúdo da variavel CodigoDoProdutoVendido.

Então, subebtende-se, que poderia ser algo assim:

Params[0].AsInteger := 15; // quantidade vendida
Params[1].AsInteger := 1; // código do produto

Seriam, então, subtraídas 15 unidades do estoque do produto 1 (somente do produto 1).

Mas essa é uma maneira bem simples de se fazer esse controle e, como já se havia discutido, o controle de estoque é algo muito mais complexo:

Deve-se verificar lote, série, validade...

Também deve ser verificada a filial e o almoxarifado padrão... entre outras coisas.


GOSTEI 0
Henrique Rodrigues

Henrique Rodrigues

30/11/2004

quanto a atualizar um só item é tranquilo, o problema é que tenho uma tebela de pedidos,outra itens de pedidos e outra estoque.

quero fazer uma consulta na itens de pedidos, retornando com vários produtos, quero a partir desta consulta fazer uma atualização da tabela estoque por atacado, tem como fazer isso ou eu terei que fazer isso um a um?


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

30/11/2004

dá pra automatizar num loop, sim. ou via stored procedure.


GOSTEI 0
Henrique Rodrigues

Henrique Rodrigues

30/11/2004

vc tem algum exemplo disso(stored procedure)? eu fazia prog antes com access e table e e coisas do genero, estou apanhando para mudar para o firebird


GOSTEI 0
Cássio Costa

Cássio Costa

30/11/2004

Boa Noite,
Estou desenvolvendo um sistema comercial, gostaria de ver esse diagrama como exemplo se possível.
Obrigado

cassiorochacosta@hotmail.com
GOSTEI 0
Robsonmatos

Robsonmatos

30/11/2004

Quem quiser aprender a fazer UPDATE em estoque com VB.net banco de dados em access manda um email para Robson.c2016@Outlook.com espero ter ajudado de alguma forma
GOSTEI 0
POSTAR