QUANTIDADE CORRETA DO ESTOQUE

JOHNSTEVE 16/09/2016 19:59:17
#467035
Boa noite galera, hoje tive um pequeno problema com um cliente. sobre o estoque.
na campo [Ô]quantidade[Ô] da tabela de Produtos eu deixei como [txt-color=#e80000] Decimal - 2 casas [/txt-color]
e no meu update logo abaixo. tbm convertei para decimal.

   Dim intEntradaProduto As Decimal

For j = 0 To dgvProdutos.Rows.Count - 1
sql = [Ô]SELECT codigo,qtdEstoque from produtos where codigo=?[Ô]
cmd = New OleDbCommand(sql, con)
cmd.Parameters.Add(New OleDb.OleDbParameter([Ô]@codigo[Ô], dgvProdutos.Rows(j).Cells(18).Value.ToString())) [ô]COD.PRODUTO

dr = cmd.ExecuteReader
If dr.HasRows Then
dr.Read()

If Not IsDBNull(dr.Item([Ô]qtdEstoque[Ô])) Then Estoque_Baixa = dr.Item([Ô]qtdEstoque[Ô])

intEntradaProduto = Format(CDec(Estoque_Baixa) + Format(CDec(dgvProdutos.Rows(j).Cells(20).Value.ToString())))

sql = [Ô]UPDATE produtos SET qtdEstoque=@qtdEstoque WHERE ((codigo=@codigo))[Ô]
cmd = New OleDbCommand(sql, con)
cmd.Parameters.Add(New OleDb.OleDbParameter([Ô]@qtdEstoque[Ô], intEntradaProduto)) [ô]Resultado
cmd.Parameters.Add(New OleDb.OleDbParameter([Ô]@codigo[Ô], dgvProdutos.Rows(j).Cells(18).Value.ToString())) [ô]COD.PRODUTO
cmd.ExecuteNonQuery()

Else


O problema foi o seguinte.
o cliente tava cadastrando uns itens por Kilo Exemplo: 2,5Kg de Carnê.....
daêh qnd fui olhar o estoque. nao tava salvando correto como Kilo. ficou [txt-color=#e80000] 25 [/txt-color]

ta salvando por inteiro. e nao por decimal..
vcs tem alguma ideia qual a maneira correta de salvar a [txt-color=#e80000] Quantidade do Estoque [/txt-color]
KERPLUNK 16/09/2016 20:12:08
#467037
Resposta escolhida
Estoque... é um dos conceitos mais difíceis de entender para muitos programadores, mesmo alguns já experientes. [Ô]Quantidade no estoque[Ô], não é um campo de produto. Quantidade, não é uma propriedade de produto. Estoque consiste em entradas e saídas. A soma das entradas, menos a soma das saídas é a quantidade. é assim que deve ser, se você não está fazendo assim, tenho péssimas notícias pra você...

Você já está estudando OOP, aplique-a.

Quanto ao seu problema, tenho quase certeza que é nesta linha:
intEntradaProduto = Format(CDec(Estoque_Baixa) + Format(CDec(dgvProdutos.Rows(j).Cells(20).Value.ToString())))

Depure o código e veja o valor de [Ô]intEntradaProduto[Ô].
JOHNSTEVE 16/09/2016 20:21:09
#467038
Citação:

:
Estoque... é um dos conceitos mais difíceis de entender para muitos programadores, mesmo alguns já experientes. [Ô]Quantidade no estoque[Ô], não é um campo de produto. Quantidade, não é uma propriedade de produto. Estoque consiste em entradas e saídas. A soma das entradas, menos a soma das saídas é a quantidade. é assim que deve ser, se você não está fazendo assim, tenho péssimas notícias pra você...

Você já está estudando OOP, aplique-a.

Quanto ao seu problema, tenho quase certeza que é nesta linha:
intEntradaProduto = Format(CDec(Estoque_Baixa) + Format(CDec(dgvProdutos.Rows(j).Cells(20).Value.ToString())))

Depure o código e veja o valor de [Ô]intEntradaProduto[Ô].



é nessa Linha Kerplunk

Debuguei. e esta ficando assim. no campos la no form
2,5 kg de carne. estoque atual 0

dae qnd chega nessa linha ta ficando a variavel
2.5 e qnd salva... ta salvando 25

tudo decimal.
KERPLUNK 16/09/2016 20:31:27
#467039
Faça o debug parando na linha onde executa a query. Verifique os valores dos parâmetros e seus tipos de dados.
JOHNSTEVE 16/09/2016 20:36:23
#467040
na quantidade ta 2,5 e no estoque 0.0

dae o resultado na variavel ficou 2.5

e qns salva.. no banco fica 25
KERPLUNK 16/09/2016 20:54:31
#467042
Você não fez como eu disse, pare o código onde a query é executada, depois de os parâmetros terem sido adicionadas nela. Verifique a lista de parâmetros do comando e seus respectivos valores.
MARCELOKROL 16/09/2016 20:57:33
#467043
deixa eu pegar um gancho nessa conversa ai. KERP creio que estou fazendo do método errado como diz você, mais analisando aqui alguns querys sql que uso, surgiu uma duvida:
Imagine um banco de dados com várias movimentações de entrada e saida do produto, como executar uma query que traga o estoque atualizado em uma listagem de produtos por grupo por exemplo, sem deixar essa pesquisa lenta?
JOHNSTEVE 16/09/2016 21:02:05
#467044
Kerplunk fiz uma gambiarra nem sei se é o certo, mais funcionou deu certo .
eu testei aqui tudo do Tipo String.. no banco de dados Mudei de [txt-color=#e80000] Decimal [/txt-color] para [txt-color=#e80000] String [/txt-color]
e na variavel tbm mudei .. dae. converteii apenas depois da soma. convertei para decimal... depois da soma e antes de gravar ..

funcionou.
veja

JOHNSTEVE 16/09/2016 21:14:04
#467045
Kerplunk, se eu tenho no estoque: 999 kilo e adiciono 2,5 kilos. = ficaria assim > 1.001,50 < ??? ta correto?
se tiver correto acabei de solucionar.
ou ficaria assim --------> 1.001,5 <--------------

KERPLUNK 16/09/2016 21:33:26
#467046
Citação:

:
Kerplunk fiz uma gambiarra nem sei se é o certo, mais funcionou deu certo .
eu testei aqui tudo do Tipo String.. no banco de dados Mudei de [txt-color=#e80000] Decimal [/txt-color] para [txt-color=#e80000] String [/txt-color]
e na variavel tbm mudei .. dae. converteii apenas depois da soma. convertei para decimal... depois da soma e antes de gravar ..

funcionou.
veja


Não, não funcionou, você apenas deixou seu campo de quantidade inútil para cálculos.
KERPLUNK 16/09/2016 21:43:08
#467047
Citação:

:
deixa eu pegar um gancho nessa conversa ai. KERP creio que estou fazendo do método errado como diz você, mais analisando aqui alguns querys sql que uso, surgiu uma duvida:
Imagine um banco de dados com várias movimentações de entrada e saida do produto, como executar uma query que traga o estoque atualizado em uma listagem de produtos por grupo por exemplo, sem deixar essa pesquisa lenta?


Pesquisas mais complexas, devem sempre ser transformadas em views, ainda mais quando o uso delas é frequente e desempenho é exigido. De preferência, views indexadas, cuja performance é de cair o queixo quando as tabelas estão estruturadas corretamente e a query bem feita. é muito raro ver um sistema profissional executando JOINS de dentro da aplicação, se tem mais de uma tabela envolvida, é praticamente certo que uma view será criada e geralmente, indexada. O problema é que nem todos os bancos de dados trabalham bem com isso ou mesmo sequer possuem esse recurso. Com o SQL Server, fica um foguete.
Página 1 de 2 [15 registro(s)]
Tópico encerrado , respostas não são mais permitidas