SELECT

JOTAPB 26/02/2010 23:35:07
#335526
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
DANIKULL 27/02/2010 00:00:27
#335527
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[Ô].
JOTAPB 27/02/2010 12:29:43
#335542
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.
DANIKULL 27/02/2010 15:03:03
#335550
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.
JOTAPB 28/02/2010 08:57:49
#335594
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.
DANIKULL 28/02/2010 12:13:17
#335605
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??

DAVERSON 28/02/2010 20:46:35
#335621
Resposta escolhida
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
JOTAPB 01/03/2010 10:13:34
#335637
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
DAVERSON 01/03/2010 12:13:03
#335648
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.




JOTAPB 02/03/2010 09:13:24
#335743
Daverson Valeu
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