AJUDA COM ESTOQUE
Olá boa tarde a todos;
Conforme as telas acima estou tentando implementar um controle de estoque , simplificado para um cliente.
Ao carregar a nfe com os produtos em um flexgrid, queria comparar com o que já esta cadastrado em um txt , caso exista o mesmo produto soma-se a quantidade que já existe.
Caso não exista no txt , faço a inclusão como um novo item.
Estou importando para um recordset , temporário , dai ao fazer as atualizações gero o novo txt a partir do recordset.
Gostaria de opiniões e criticas , pois estou aprendendo e gostaria de fazer algo simples e eficiente.
Estou com dificuldade na parte de inclusão , em vez de atualizar esta incluindo como novo.
Conforme as telas acima estou tentando implementar um controle de estoque , simplificado para um cliente.
Ao carregar a nfe com os produtos em um flexgrid, queria comparar com o que já esta cadastrado em um txt , caso exista o mesmo produto soma-se a quantidade que já existe.
Caso não exista no txt , faço a inclusão como um novo item.
Estou importando para um recordset , temporário , dai ao fazer as atualizações gero o novo txt a partir do recordset.
Gostaria de opiniões e criticas , pois estou aprendendo e gostaria de fazer algo simples e eficiente.
Estou com dificuldade na parte de inclusão , em vez de atualizar esta incluindo como novo.
A outra Tela
Private Sub Atualizar_estoque()
Abre_Tabela
tb_estoque.CursorLocation = adUseClient
tb_estoque.Open [Ô]Select * FROM estoque.txt[Ô], BD_ESTOQUE, adOpenStatic, adLockBatchOptimistic
While Not tb_estoque.EOF
Dim i As Integer
Dim quantprod As Integer
Grade.Col = 1
For i = 1 To Grade.Rows - 1
If tb_estoque(1) = Grade.TextMatrix(i, 1) And tb_estoque(2) = Grade.TextMatrix(i, 2) Then
quantprod = Val(tb_estoque(6)) + Val(Grade.TextMatrix(i, 6))
tb_estoque(6) = quantprod
tb_estoque.Update
Else
tb_estoque.AddNew
tb_estoque(0) = Grade.TextMatrix(i, 0)
tb_estoque(1) = Grade.TextMatrix(i, 1)
tb_estoque(2) = Grade.TextMatrix(i, 2)
tb_estoque(3) = Grade.TextMatrix(i, 3)
tb_estoque(4) = Grade.TextMatrix(i, 4)
tb_estoque(5) = Grade.TextMatrix(i, 5)
tb_estoque(6) = Grade.TextMatrix(i, 6)
tb_estoque(7) = Val(Grade.TextMatrix(i, 7))
tb_estoque.Update
End If
tb_estoque.MoveNext
Next i
Wend
tb_estoque.MoveFirst
Open App.Path & [Ô]\Estoque\estoque.txt[Ô] For Output As #1
Do Until tb_estoque.EOF
Print #1, tb_estoque(0) & [Ô],[Ô] & tb_estoque(1) & [Ô],[Ô] & tb_estoque(2) & [Ô],[Ô] & tb_estoque(3) & [Ô],[Ô] & tb_estoque(4) & [Ô],[Ô] & tb_estoque(5) & [Ô],[Ô] & tb_estoque(6) & [Ô],[Ô] & tb_estoque(7)
tb_estoque.MoveNext
Loop
Close #1
MsgBox [Ô]Banco de Dados - Estoque.txt - Atualizada com sucesso !![Ô]
Fecha_Tabela
End Sub
Private Sub Atualizar_estoque()
Abre_Tabela
tb_estoque.CursorLocation = adUseClient
tb_estoque.Open [Ô]Select * FROM estoque.txt[Ô], BD_ESTOQUE, adOpenStatic, adLockBatchOptimistic
While Not tb_estoque.EOF
Dim i As Integer
Dim quantprod As Integer
Grade.Col = 1
For i = 1 To Grade.Rows - 1
If tb_estoque(1) = Grade.TextMatrix(i, 1) And tb_estoque(2) = Grade.TextMatrix(i, 2) Then
quantprod = Val(tb_estoque(6)) + Val(Grade.TextMatrix(i, 6))
tb_estoque(6) = quantprod
tb_estoque.Update
Else
tb_estoque.AddNew
tb_estoque(0) = Grade.TextMatrix(i, 0)
tb_estoque(1) = Grade.TextMatrix(i, 1)
tb_estoque(2) = Grade.TextMatrix(i, 2)
tb_estoque(3) = Grade.TextMatrix(i, 3)
tb_estoque(4) = Grade.TextMatrix(i, 4)
tb_estoque(5) = Grade.TextMatrix(i, 5)
tb_estoque(6) = Grade.TextMatrix(i, 6)
tb_estoque(7) = Val(Grade.TextMatrix(i, 7))
tb_estoque.Update
End If
tb_estoque.MoveNext
Next i
Wend
tb_estoque.MoveFirst
Open App.Path & [Ô]\Estoque\estoque.txt[Ô] For Output As #1
Do Until tb_estoque.EOF
Print #1, tb_estoque(0) & [Ô],[Ô] & tb_estoque(1) & [Ô],[Ô] & tb_estoque(2) & [Ô],[Ô] & tb_estoque(3) & [Ô],[Ô] & tb_estoque(4) & [Ô],[Ô] & tb_estoque(5) & [Ô],[Ô] & tb_estoque(6) & [Ô],[Ô] & tb_estoque(7)
tb_estoque.MoveNext
Loop
Close #1
MsgBox [Ô]Banco de Dados - Estoque.txt - Atualizada com sucesso !![Ô]
Fecha_Tabela
End Sub
Você sabe que da mesma maneira que você usa [Ô]Select xxxx[Ô] em arquivo CSV, você pode também usar os outros comandos SQL, como INSERT, UPDATE e DELETE, certo?
Sim , mais to quebrando a cabeça pra bolar um insert e update , em sql.
E sei que fica até mais confiável e rápido também.
E sei que fica até mais confiável e rápido também.
Esta dando erro:
Erro : A atualização de dados em uma tabela vinculada não é suportada por este ISAN
While Not tb_estoque.EOF
Dim i As Integer
Dim quantprod As Integer
Grade.Col = 1
For i = 1 To Grade.Rows - 1
sql = [Ô]update estoque.txt set quantidade= [ô][Ô] & Grade.TextMatrix(i, 7) & [Ô][ô][Ô] _
& [Ô] where cnpj=[ô][Ô] & Grade.TextMatrix(i, 2) & [Ô][ô] and codproduto = [ô][Ô] & Grade.TextMatrix(i, 3) & [Ô][ô][Ô]
BD_ESTOQUE.Execute sql
Next i
Wend
Erro : A atualização de dados em uma tabela vinculada não é suportada por este ISAN
While Not tb_estoque.EOF
Dim i As Integer
Dim quantprod As Integer
Grade.Col = 1
For i = 1 To Grade.Rows - 1
sql = [Ô]update estoque.txt set quantidade= [ô][Ô] & Grade.TextMatrix(i, 7) & [Ô][ô][Ô] _
& [Ô] where cnpj=[ô][Ô] & Grade.TextMatrix(i, 2) & [Ô][ô] and codproduto = [ô][Ô] & Grade.TextMatrix(i, 3) & [Ô][ô][Ô]
BD_ESTOQUE.Execute sql
Next i
Wend
O que ainda não entendi:
- Você quer fazer algo simples, e escolhe algo complexo para se trabalhar, como arquivos Texto
- Começa um projeto do zero e prefere usar VB6 ao invés de .NET
Use a tecnologia à seu favor.
- Você quer fazer algo simples, e escolhe algo complexo para se trabalhar, como arquivos Texto
- Começa um projeto do zero e prefere usar VB6 ao invés de .NET
Use a tecnologia à seu favor.
Concordo com voce, Mais agora o que preciso no momento e algo que functione assim em vb6 e que complemente um emissor de nota fiscal de consumidor , que e usado por alguns clientes.
nao Tenho tempo e agora seria muito deficil pra comecar com .net.
nao Tenho tempo e agora seria muito deficil pra comecar com .net.
Não é possÃvel identificar um item de nfe através do código do produto, ele nunca é e não deve ser o mesmo do seu banco de dados, a comparação só pode ser feita através do código de barras, e olhe la.
Estou fazendo um carregamento de Nfe também só para satisfazer os pedidos dessa ilusão pura que é carregar itens da Nfe(Acham que terão inúmeras facilidades com isso, e não é bem assim). Existem milhares de distribuidores que nem sequer o código de barras colocam no xml.
Estou fazendo um carregamento de Nfe também só para satisfazer os pedidos dessa ilusão pura que é carregar itens da Nfe(Acham que terão inúmeras facilidades com isso, e não é bem assim). Existem milhares de distribuidores que nem sequer o código de barras colocam no xml.
Como não consegui com SQL estou tentando pelo modelo antigo com adnew e update.
O que pode estar errado nesta logica:
While Not tb_estoque.EOF
Dim i As Integer
Dim quantprod As Integer
Grade.Col = 1
For i = 1 To Grade.Rows - 1
If tb_estoque(2) = Grade.TextMatrix(i, 3) Then
quantprod = Val(tb_estoque(6)) + Val(Grade.TextMatrix(i, 7))
tb_estoque(6) = quantprod
tb_estoque.Update
Else
tb_estoque.AddNew
tb_estoque(0) = Grade.TextMatrix(i, 1)
tb_estoque(1) = Grade.TextMatrix(i, 2)
tb_estoque(2) = Grade.TextMatrix(i, 3)
tb_estoque(3) = Grade.TextMatrix(i, 4)
tb_estoque(4) = Grade.TextMatrix(i, 5)
tb_estoque(5) = Grade.TextMatrix(i, 6)
tb_estoque(6) = Grade.TextMatrix(i, 7)
tb_estoque(7) = Val(Grade.TextMatrix(i, 8))
tb_estoque.Update
End If
tb_estoque.MoveNext
Next i
Wend
Por exemplo estou tentando comparar o que tem no flexgrid com o que tem no banco de dados,
caso existir codproduto igual ,somo e atualizo a quantidade, beleza isso esta funcionando, caso seja um produto novo com codigo novo inclui na ultima posição.
So que ele esta somando e incluindo , ou seja duplicando.
O que pode estar errado nesta logica:
While Not tb_estoque.EOF
Dim i As Integer
Dim quantprod As Integer
Grade.Col = 1
For i = 1 To Grade.Rows - 1
If tb_estoque(2) = Grade.TextMatrix(i, 3) Then
quantprod = Val(tb_estoque(6)) + Val(Grade.TextMatrix(i, 7))
tb_estoque(6) = quantprod
tb_estoque.Update
Else
tb_estoque.AddNew
tb_estoque(0) = Grade.TextMatrix(i, 1)
tb_estoque(1) = Grade.TextMatrix(i, 2)
tb_estoque(2) = Grade.TextMatrix(i, 3)
tb_estoque(3) = Grade.TextMatrix(i, 4)
tb_estoque(4) = Grade.TextMatrix(i, 5)
tb_estoque(5) = Grade.TextMatrix(i, 6)
tb_estoque(6) = Grade.TextMatrix(i, 7)
tb_estoque(7) = Val(Grade.TextMatrix(i, 8))
tb_estoque.Update
End If
tb_estoque.MoveNext
Next i
Wend
Por exemplo estou tentando comparar o que tem no flexgrid com o que tem no banco de dados,
caso existir codproduto igual ,somo e atualizo a quantidade, beleza isso esta funcionando, caso seja um produto novo com codigo novo inclui na ultima posição.
So que ele esta somando e incluindo , ou seja duplicando.
Citação::
Não é possÃvel identificar um item de nfe através do código do produto, ele nunca é e não deve ser o mesmo do seu banco de dados, a comparação só pode ser feita através do código de barras, e olhe la.
Estou fazendo um carregamento de Nfe também só para satisfazer os pedidos dessa ilusão pura que é carregar itens da Nfe(Acham que terão inúmeras facilidades com isso, e não é bem assim). Existem milhares de distribuidores que nem sequer o código de barras colocam no xml.
Nilson, desenvolvi um processo que vincula em um campo na tabela de produtos todos os possÃveis códigos dos fornecedores, dessa forma consigo em mais de 95% a importação dos produtos. No entanto se recebo produtos de um novo fornecedor cujo produto já existe no meu cadastro, basta apenas adicionar o código do fornecedor e pronto(nem saio da tela). Este processo é bem prático e agilizou a importação das minhas NFes.
Deixe-me ver se entendi. Este forum é de VB-VBA? Ou é VB.Net?
Tópico encerrado , respostas não são mais permitidas