SELECT
Boa noite amigos
estou com esse código mas esta dando o seguinte erro na hora de atualizar ex. se o produto não foi vendido grava a venda se ele já foi vendido no mesmo dia então atualiza a quantidade.
o problema é quando é para atualizar se foi vendido mais de um produto ele atualiza a quantidade só no primeiro item vendido
vai ai uma parte do código se alguém poder me ajudar.
Public Function Escolha()
If Txt_codigoC.Text = [Ô]0000[Ô] Then
If ProdutoVendido(Txt_Codigo.Text, Date) = True Then
AtualizaVenda [ô]essa funçao escolhe se a venda é a vista ou aprazo
MsgBox [Ô]Atualização de quantidade[Ô]
Else [ô]se é venda de um produto q ainda nao foi vendido
VendaAvista [ô]ou se ja foi vendido no mesmo dia
MsgBox [Ô]Venda gravada[Ô]
End If [ô]se foi vendido atualiza a quantidade ou grava se aindo nao foi vendido
Else
If Produto(Txt_codigoC.Text, Txt_Codigo.Text, Date) = True Then
AtualizavAprazo
MsgBox [Ô]Atualização de quantidade[Ô]
Else
VendaAprazo
MsgBox [Ô]VENDA APRAZO GRAVADO[Ô]
End If
End If
End Function
[ô]esse é o código
Function Produto(Codigoc As String, Codigo As String, data As Date) As Boolean
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset [ô]essa função verifica se o produto já foi vendido no mesmo dia ou nao[ô]
rs.Open [Ô]SELECT CODIGO_CL CODIGO_PR [Ô] & _
[Ô]FROM tb_vendas_apr [Ô] & _
[Ô]WHERE CODIGO_CL = [ô][Ô] & Codigoc & [Ô][ô] [Ô] & _
[Ô] AND codigo_pr = [ô][Ô] & Codigo & [Ô][ô] [Ô] & _
[Ô]AND data = [ô][Ô] & Format(data, [Ô]dd.mm.yyyy[Ô]) & [Ô][ô];[Ô], cn, adOpenForwardOnly, adLockReadOnly
If rs.EOF Then
Produto = False
Else
Produto = True
End If
rs.Close
Set rs = Nothing
End Function
Function AtualizavAprazo()
Dim valor As Currency, Quant As Integer
valor = Mk_Valor.Text
Quant = Txt_quantidade.Text [ô]Essa funçao atualiza as vendas[ô]
VendasAp!valor = VendasAp!valor + valor
VendasAp!quantidade = VendasAp!quantidade + Quant
VendasAp.Update
VendasAp.Requery
estou com esse código mas esta dando o seguinte erro na hora de atualizar ex. se o produto não foi vendido grava a venda se ele já foi vendido no mesmo dia então atualiza a quantidade.
o problema é quando é para atualizar se foi vendido mais de um produto ele atualiza a quantidade só no primeiro item vendido
vai ai uma parte do código se alguém poder me ajudar.
Public Function Escolha()
If Txt_codigoC.Text = [Ô]0000[Ô] Then
If ProdutoVendido(Txt_Codigo.Text, Date) = True Then
AtualizaVenda [ô]essa funçao escolhe se a venda é a vista ou aprazo
MsgBox [Ô]Atualização de quantidade[Ô]
Else [ô]se é venda de um produto q ainda nao foi vendido
VendaAvista [ô]ou se ja foi vendido no mesmo dia
MsgBox [Ô]Venda gravada[Ô]
End If [ô]se foi vendido atualiza a quantidade ou grava se aindo nao foi vendido
Else
If Produto(Txt_codigoC.Text, Txt_Codigo.Text, Date) = True Then
AtualizavAprazo
MsgBox [Ô]Atualização de quantidade[Ô]
Else
VendaAprazo
MsgBox [Ô]VENDA APRAZO GRAVADO[Ô]
End If
End If
End Function
[ô]esse é o código
Function Produto(Codigoc As String, Codigo As String, data As Date) As Boolean
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset [ô]essa função verifica se o produto já foi vendido no mesmo dia ou nao[ô]
rs.Open [Ô]SELECT CODIGO_CL CODIGO_PR [Ô] & _
[Ô]FROM tb_vendas_apr [Ô] & _
[Ô]WHERE CODIGO_CL = [ô][Ô] & Codigoc & [Ô][ô] [Ô] & _
[Ô] AND codigo_pr = [ô][Ô] & Codigo & [Ô][ô] [Ô] & _
[Ô]AND data = [ô][Ô] & Format(data, [Ô]dd.mm.yyyy[Ô]) & [Ô][ô];[Ô], cn, adOpenForwardOnly, adLockReadOnly
If rs.EOF Then
Produto = False
Else
Produto = True
End If
rs.Close
Set rs = Nothing
End Function
Function AtualizavAprazo()
Dim valor As Currency, Quant As Integer
valor = Mk_Valor.Text
Quant = Txt_quantidade.Text [ô]Essa funçao atualiza as vendas[ô]
VendasAp!valor = VendasAp!valor + valor
VendasAp!quantidade = VendasAp!quantidade + Quant
VendasAp.Update
VendasAp.Requery
JOTAPB, boa noite.
Está meio confuso para entender. Se o produto não foi vendio, ele grava, ok. Se já foi vendido ele atualiza o gravado em pimeira intância somando as quantidades, certo? Se ja foi vendido de novo faz o que??? Deve haver somente um registro do produto po dia ou podem haver vários registro do mesmo produto por dia??
Se der coloque toda a rotina que você está usando, inlcusive as [Ô]funções[Ô].
Está meio confuso para entender. Se o produto não foi vendio, ele grava, ok. Se já foi vendido ele atualiza o gravado em pimeira intância somando as quantidades, certo? Se ja foi vendido de novo faz o que??? Deve haver somente um registro do produto po dia ou podem haver vários registro do mesmo produto por dia??
Se der coloque toda a rotina que você está usando, inlcusive as [Ô]funções[Ô].
se o produto foi vendido ele será gravado, se ele já foi vendido no mesmo dia ai ele tem que atualizar ou seja somar a quantidade que já foi vendida com a que está sendo vendido Ex: cliente a compra 2 feijão o cliente b compra 3 feijão, o que tem que ficar gravado é 5 feijão
até tudo bem só que se eu vender 2 feijão e 2 pct café, depois vim outro cliente e comprar 2 pct feijão e 2pct café ele atualiza só em cima do feijão que ficaria com total de 6 pct feijão sendo que deveria fica com 4 feijão e 4 pct de café.
só pode ter um registro do produto por dia.
Public Function VendaAvista()
Dim valor As Currency
valor = Txt_Soma.Text
Vendas.AddNew
Vendas!codigo_cl = Txt_codigoC.Text
Vendas!codigo_pr = Txt_Codigo.Text [ô]venda a vista
Vendas!Datac = Mk_data.Text
Vendas!valor = valor
Vendas!quantidade = Txt_quantidade.Text
Vendas.Update
Vendas.Requery
End Function
Public Function VendaAprazo()
Dim valor As Currency
valor = Txt_Soma.Text
VendasAp.AddNew [ô]venda a prazo
VendasAp!codigo_cl = Txt_codigoC.Text
VendasAp!codigo_pr = Txt_Codigo.Text
VendasAp!data = Mk_data.Text
VendasAp!valor = valor
VendasAp!quantidade = Txt_quantidade.Text
VendasAp.Update
VendasAp.Requery
End Function
Public Function Escolha()
If Txt_codigoC.Text = [Ô]0000[Ô] Then
If ProdutoVendido(Txt_Codigo.Text, Date) = True Then
AtualizaVenda [ô]essa funçao escolhe se a venda é a vista ou aprazo
MsgBox [Ô]Atualização de quantidade[Ô]
Else [ô]se é venda de um produto q ainda nao foi vendido
VendaAvista [ô]ou se ja foi vendido no mesmo dia
MsgBox [Ô]Venda gravada[Ô]
End If [ô]se foi vendido atualiza a quantidade ou grava se aindo nao foi vendido
Else
If Produto(Txt_codigoC.Text, Txt_Codigo.Text, Date) = True Then
AtualizavAprazo
MsgBox [Ô]Atualização de quantidade[Ô]
Else
VendaAprazo
MsgBox [Ô]VENDA APRAZO GRAVADO[Ô]
End If
End If
End Function
Function Produto(Codigoc As String, Codigo As String, data As Date) As Boolean
Dim rs As ADODB.Recordset
Function ProdutoVendido(Codigo As String, data As Date) As Boolean
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset [ô]essa função verifica se o produto já foi vendido no mesmo dia ou nao[ô]
rs.Open [Ô]SELECT CODIGO_PR [Ô] & _
[Ô]FROM tb_vendas [Ô] & _
[Ô]WHERE CODIGO_PR = [ô][Ô] & Codigo & [Ô][ô] [Ô] & _
[Ô]AND datac = [ô][Ô] & Format(data, [Ô]dd.mm.yyyy[Ô]) & [Ô][ô];[Ô], cn, adOpenForwardOnly, adLockReadOnly
If rs.EOF Then
ProdutoVendido = False
Else
ProdutoVendido = True
End If
rs.Close
Set rs = Nothing
End Function
Public Function AtualizaVenda()
Dim valor As Currency, Quant As Integer
valor = Mk_Valor.Text
Quant = Txt_quantidade.Text [ô]Essa funçao atualiza as vendas[ô]
Vendas!valor = Vendas!valor + valor
Vendas!quantidade = Vendas!quantidade + Quant
Vendas.Update
Vendas.Requery
End Function
desde já eu agradeço a sua atenção que Deus te abençoá cada vez mais.
até tudo bem só que se eu vender 2 feijão e 2 pct café, depois vim outro cliente e comprar 2 pct feijão e 2pct café ele atualiza só em cima do feijão que ficaria com total de 6 pct feijão sendo que deveria fica com 4 feijão e 4 pct de café.
só pode ter um registro do produto por dia.
Public Function VendaAvista()
Dim valor As Currency
valor = Txt_Soma.Text
Vendas.AddNew
Vendas!codigo_cl = Txt_codigoC.Text
Vendas!codigo_pr = Txt_Codigo.Text [ô]venda a vista
Vendas!Datac = Mk_data.Text
Vendas!valor = valor
Vendas!quantidade = Txt_quantidade.Text
Vendas.Update
Vendas.Requery
End Function
Public Function VendaAprazo()
Dim valor As Currency
valor = Txt_Soma.Text
VendasAp.AddNew [ô]venda a prazo
VendasAp!codigo_cl = Txt_codigoC.Text
VendasAp!codigo_pr = Txt_Codigo.Text
VendasAp!data = Mk_data.Text
VendasAp!valor = valor
VendasAp!quantidade = Txt_quantidade.Text
VendasAp.Update
VendasAp.Requery
End Function
Public Function Escolha()
If Txt_codigoC.Text = [Ô]0000[Ô] Then
If ProdutoVendido(Txt_Codigo.Text, Date) = True Then
AtualizaVenda [ô]essa funçao escolhe se a venda é a vista ou aprazo
MsgBox [Ô]Atualização de quantidade[Ô]
Else [ô]se é venda de um produto q ainda nao foi vendido
VendaAvista [ô]ou se ja foi vendido no mesmo dia
MsgBox [Ô]Venda gravada[Ô]
End If [ô]se foi vendido atualiza a quantidade ou grava se aindo nao foi vendido
Else
If Produto(Txt_codigoC.Text, Txt_Codigo.Text, Date) = True Then
AtualizavAprazo
MsgBox [Ô]Atualização de quantidade[Ô]
Else
VendaAprazo
MsgBox [Ô]VENDA APRAZO GRAVADO[Ô]
End If
End If
End Function
Function Produto(Codigoc As String, Codigo As String, data As Date) As Boolean
Dim rs As ADODB.Recordset
Function ProdutoVendido(Codigo As String, data As Date) As Boolean
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset [ô]essa função verifica se o produto já foi vendido no mesmo dia ou nao[ô]
rs.Open [Ô]SELECT CODIGO_PR [Ô] & _
[Ô]FROM tb_vendas [Ô] & _
[Ô]WHERE CODIGO_PR = [ô][Ô] & Codigo & [Ô][ô] [Ô] & _
[Ô]AND datac = [ô][Ô] & Format(data, [Ô]dd.mm.yyyy[Ô]) & [Ô][ô];[Ô], cn, adOpenForwardOnly, adLockReadOnly
If rs.EOF Then
ProdutoVendido = False
Else
ProdutoVendido = True
End If
rs.Close
Set rs = Nothing
End Function
Public Function AtualizaVenda()
Dim valor As Currency, Quant As Integer
valor = Mk_Valor.Text
Quant = Txt_quantidade.Text [ô]Essa funçao atualiza as vendas[ô]
Vendas!valor = Vendas!valor + valor
Vendas!quantidade = Vendas!quantidade + Quant
Vendas.Update
Vendas.Requery
End Function
desde já eu agradeço a sua atenção que Deus te abençoá cada vez mais.
JOTAPB, boa tarde.
Você usa algum grid, ou algum objeto que armazena os códigos dos produtos na hora que vai registrar a venda??
Pois a lógica seria a seguinte na hora de gravar as informações no Banco:
Inicia-se com: {Rotinas de Cabeçalho: tipo de venda, cod. cliente, etc...}
1º. Deve ser gravado item a item na tabela das vendas;
2º. Faz um select com o produto para ver se já foi gravado anteriormente:
Se [Ô]Sim[Ô]
Faz um update somando as quantidades, a anterior gravada com a atual
Se [Ô]Não[Ô]
Faz um insert
Esta lógica deve ser executada com um Loop para pegar item a item dos produtos vendidos, ok???
Fico no aguardo então de saber como estão montados os produtos vendido antes de clicar no botão finaliza venda.
Você usa algum grid, ou algum objeto que armazena os códigos dos produtos na hora que vai registrar a venda??
Pois a lógica seria a seguinte na hora de gravar as informações no Banco:
Inicia-se com: {Rotinas de Cabeçalho: tipo de venda, cod. cliente, etc...}
1º. Deve ser gravado item a item na tabela das vendas;
2º. Faz um select com o produto para ver se já foi gravado anteriormente:
Se [Ô]Sim[Ô]
Faz um update somando as quantidades, a anterior gravada com a atual
Se [Ô]Não[Ô]
Faz um insert
Esta lógica deve ser executada com um Loop para pegar item a item dos produtos vendidos, ok???
Fico no aguardo então de saber como estão montados os produtos vendido antes de clicar no botão finaliza venda.
Sim é isso mesmo, é gravado item a item na tabela de vendas. O problema é o select que faz o update de todos os produtos em cima do primeiro item
o que não entendo é que o select verifica se já houve a venda ou não.
o que não entendo é que o select verifica se já houve a venda ou não.
JOTAPB, bom dia.
Vamos fazer o seguinte, coloca aqui a estrutura das tabelas que estão relacionadas com o venda: Tabela de Produtos; Tabela das Vendas; etc... A forma de conexão com o Banco de Dados, se DAO ou ADO e qual o Banco de Dados.
Você usa um Grid certo?? Qual???
- DBGrid??
- MSFlexGrid??
- ListView, em modo grid??
Vamos fazer o seguinte, coloca aqui a estrutura das tabelas que estão relacionadas com o venda: Tabela de Produtos; Tabela das Vendas; etc... A forma de conexão com o Banco de Dados, se DAO ou ADO e qual o Banco de Dados.
Você usa um Grid certo?? Qual???
- DBGrid??
- MSFlexGrid??
- ListView, em modo grid??
pra matar esta cobra pra vc... veja
serao duas partes
Private Sub cmdOrder_Click() [ô]este seria o botao pra adicionar o produto ao carrinho(caixa)
Dim ilan As Double
txtDiscount.Text = [Ô]0.00[Ô]
If Val(txtQtyOrder.Text) > Val(txtQtyHand.Text) Then
MsgBox [Ô]O estoque do produto [Ô] + vbCrLf + [Ô] não é suficiente [Ô] + vbCrLf + [Ô] para a quantidade do pedido[Ô], vbOKOnly + vbInformation, [Ô]Estoque Insuficiente[Ô]
SendKeys [Ô]{home}[Ô] + [Ô]{end}[Ô]
Exit Sub
Else
If txtID.Text = Empty Or txtQtyOrder.Text = Empty Then
Exit Sub
Else
If Val(txtQtyHand.Text) <= 0 Then
MsgBox [Ô]Não há estoque para o produto [Ô] + vbCrLf + [Ô] favor refazer o pedido para continuar a venda [Ô], vbOKOnly + vbInformation, [Ô]Estoque vazio[Ô]
Exit Sub
Else
[ô] ans = MsgBox([Ô]Confirma este pedido?[Ô], vbQuestion + vbYesNo, [Ô]Pedido?[Ô])
[ô] If ans = vbYes Then
ilan = CDbl(TxtPrice) * CDbl(txtQtyOrder)
txtAmount.Text = CStr(Format(ilan, [Ô]##,###.#0[Ô]))
Call orderItem [ô] veja que aqui ocorre o complemento do lançamemto
Call Cleartext
End If
End If
End If
txtSearch.Text = [Ô][Ô]
txtSearch.SetFocus
End Sub
a continuação onde e feita a verificação se o item ja se encontra na lista e se estiver e feita apenas a atualização de qtde
Private Sub orderItem()
Qty = Val(txtQtyOrder.Text)
Set lst = lvprod.FindItem(txtID.Text, , , lvwPartial)
If lst Is Nothing Then
Set lst = lvprod.ListItems.Add(, , txtID.Text, , 0)
With lst
.SubItems(1) = getquantity
.SubItems(2) = txtName.Text
.SubItems(3) = Format(TxtPrice.Text, [Ô]###,##0.00[Ô])
.SubItems(4) = Format(getquantity * TxtPrice.Text, [Ô]###,##0.00[Ô])
txtAmount.Text = CStr(Format(ComputeAmount, [Ô]########0.00[Ô]))
txtDiscount.Text = [Ô]0,00[Ô]
End With
Else
With lst
.SubItems(1) = getquantity + .SubItems(1)
.SubItems(2) = txtName.Text
.SubItems(3) = Format(TxtPrice.Text, [Ô]###,##0.00[Ô])
.SubItems(4) = Format(.SubItems(1) * TxtPrice.Text, [Ô]###,##0.00[Ô])
txtAmount.Text = CStr(Format(ComputeAmount, [Ô]###,##0.00[Ô]))
txtDiscount.Text = [Ô]0,00[Ô]
End With
End If
End Sub
serao duas partes
Private Sub cmdOrder_Click() [ô]este seria o botao pra adicionar o produto ao carrinho(caixa)
Dim ilan As Double
txtDiscount.Text = [Ô]0.00[Ô]
If Val(txtQtyOrder.Text) > Val(txtQtyHand.Text) Then
MsgBox [Ô]O estoque do produto [Ô] + vbCrLf + [Ô] não é suficiente [Ô] + vbCrLf + [Ô] para a quantidade do pedido[Ô], vbOKOnly + vbInformation, [Ô]Estoque Insuficiente[Ô]
SendKeys [Ô]{home}[Ô] + [Ô]{end}[Ô]
Exit Sub
Else
If txtID.Text = Empty Or txtQtyOrder.Text = Empty Then
Exit Sub
Else
If Val(txtQtyHand.Text) <= 0 Then
MsgBox [Ô]Não há estoque para o produto [Ô] + vbCrLf + [Ô] favor refazer o pedido para continuar a venda [Ô], vbOKOnly + vbInformation, [Ô]Estoque vazio[Ô]
Exit Sub
Else
[ô] ans = MsgBox([Ô]Confirma este pedido?[Ô], vbQuestion + vbYesNo, [Ô]Pedido?[Ô])
[ô] If ans = vbYes Then
ilan = CDbl(TxtPrice) * CDbl(txtQtyOrder)
txtAmount.Text = CStr(Format(ilan, [Ô]##,###.#0[Ô]))
Call orderItem [ô] veja que aqui ocorre o complemento do lançamemto
Call Cleartext
End If
End If
End If
txtSearch.Text = [Ô][Ô]
txtSearch.SetFocus
End Sub
a continuação onde e feita a verificação se o item ja se encontra na lista e se estiver e feita apenas a atualização de qtde
Private Sub orderItem()
Qty = Val(txtQtyOrder.Text)
Set lst = lvprod.FindItem(txtID.Text, , , lvwPartial)
If lst Is Nothing Then
Set lst = lvprod.ListItems.Add(, , txtID.Text, , 0)
With lst
.SubItems(1) = getquantity
.SubItems(2) = txtName.Text
.SubItems(3) = Format(TxtPrice.Text, [Ô]###,##0.00[Ô])
.SubItems(4) = Format(getquantity * TxtPrice.Text, [Ô]###,##0.00[Ô])
txtAmount.Text = CStr(Format(ComputeAmount, [Ô]########0.00[Ô]))
txtDiscount.Text = [Ô]0,00[Ô]
End With
Else
With lst
.SubItems(1) = getquantity + .SubItems(1)
.SubItems(2) = txtName.Text
.SubItems(3) = Format(TxtPrice.Text, [Ô]###,##0.00[Ô])
.SubItems(4) = Format(.SubItems(1) * TxtPrice.Text, [Ô]###,##0.00[Ô])
txtAmount.Text = CStr(Format(ComputeAmount, [Ô]###,##0.00[Ô]))
txtDiscount.Text = [Ô]0,00[Ô]
End With
End If
End Sub
Bom dia tentei mas não conseguir ainda há a minha demora em postar é porque só posso acessar de manhã ou na minha folga.
vou adicionar meu projeto se puder dar uma olhada fico muito grato ah é bem rústico e é o meu 1º projeto por isso estou apanhando tanto
vou adicionar meu projeto se puder dar uma olhada fico muito grato ah é bem rústico e é o meu 1º projeto por isso estou apanhando tanto
Citação::
Bom dia tentei mas não conseguir ainda há a minha demora em postar é porque só posso acessar de manhã ou na minha folga.
vou adicionar meu projeto se puder dar uma olhada fico muito grato ah é bem rústico e é o meu 1º projeto por isso estou apanhando tanto
este PDV seu esta muito longe do que prescisa... veja este exemplo do macoratti que esta mais proximo do que vc deseja
http://www.macoratti.net/pdv.zip
este e o mesmo projeto do macoratti, apenas dei uma atualizada nele.
Daverson Valeu
vou estudar este projeto da macoratti e tentar adapta-lo qualquer dúvida torno a postar
muito Obrigado a você e DANIKULL
vou estudar este projeto da macoratti e tentar adapta-lo qualquer dúvida torno a postar
muito Obrigado a você e DANIKULL
Tópico encerrado , respostas não são mais permitidas