good guy 12/7/2013, 22:51
Olá Matheus,
Crie uma tabela auxiliar(tblSelecao) que receberá os produtos escolhidos pelo cliente com campos do tipo CodCliente, CodProduto,Produto,Preco,Quantidade.
Veja este exemplo:
Public Sub CalculaEstoque()
'Código de Eduardo Machado (Good Guy) Por favor respeite os direitos autorais
On Error Resume Next
Dim strSQL As String
Dim TotalQuant As Integer
Dim sQuant As Integer
Dim nCodigo As Integer
Dim sCodigo As String
Dim nQuant As Integer
sCodigo = Me.cboCodigoCliente.Column(0)
nCodigo = CInt(DLast("CodigoProduto", "qrytblSelecao", "CodigoCliente = '" & sCodigo & "'"))
nQuant = CInt(DLookup("Quantidade", "Produtos", "CodigoProd = '" & nCodigo & "'"))
DoCmd.SetWarnings False
If nQuant > 5 Then
sQuant = CInt(Forms!PDV!txtQuant)
MsgBox "BAIXA NO ESTOQUE PARA ESTE PRODUTO: " & sQuant, vbInformation, "PDV"
TotalQuant = Abs(nQuant - sQuant)
strSQL = "UPDATE Produtos SET Quantidade = '" & TotalQuant & "'WHERE CodigoProd = '" & nCodigo & "'"
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True
DoCmd.RunCommand acCmdRefresh
Else
MsgBox "ESTE PRODUTO ESTÁ NO ESTOQUE MÍNIMO !!!", vbCritical, "ALERTA"
Beep
sQuant = CInt(Forms!PDV!txtQuant)
MsgBox "BAIXA NO ESTOQUE PARA ESTE PRODUTO: " & sQuant, vbInformation, "PDV"
TotalQuant = Abs(nQuant - sQuant)
strSQL = "UPDATE Produtos SET Quantidade = '" & TotalQuant & "'WHERE CodigoProd = '" & nCodigo & "'"
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True
DoCmd.RunCommand acCmdRefresh
End If
End Sub
Public Sub CalculaReposicao()
'Código de Eduardo Machado (Good Guy) Por favor respeite os direitos autorais
On Error Resume Next
Dim strSQL As String
Dim TotalQuant As Integer
Dim sQuant As Integer
Dim nCodigo As Integer
Dim sCodigo As String
Dim nQuant As Integer
sCodigo = Me.cboCodigoCliente.Column(0)
nCodigo = CInt(DLast("CodigoProduto", "qrytblSelecao", "CodigoCliente = '" & sCodigo & "'"))
nQuant = CInt(DLookup("Quantidade", "Produtos", "CodigoProd = '" & nCodigo & "'"))
DoCmd.SetWarnings False
sQuant = CInt(Forms!PDV!txtQuant)
MsgBox "REPOSIÇÃO DE ESTOQUE PARA ESTE PRODUTO: " & sQuant, vbInformation, "PDV"
TotalQuant = nQuant + sQuant
strSQL = "UPDATE Produtos SET Quantidade = '" & TotalQuant & "'WHERE CodigoProd = '" & nCodigo & "'"
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True
DoCmd.RunCommand acCmdRefresh
End Sub
Na saída do campo Quantidade :
Private Sub txtQuant_LostFocus()
'Código de Eduardo Machado (Good Guy) Por favor respeite os direitos autorais
On Error Resume Next
Dim Tipo As Currency
Dim Tipo2 As String
Dim Tipo3 As String
Dim Tipo4 As String
Dim strSQL As String
Dim sTipo As String
Dim nTipo As String
Dim rTipo As String
Dim sSenha As String
Dim sCodigo As String
Dim strSQL2 As String
Dim mDate As String
sCodigo = Me.cboCodigoCliente.Column(0)
sSenha = DLookup("Senha", "Clientes", "Codigo = '" & sCodigo & "'")
mDate = Format(Date, "dd/mm/yyyy")
Me.DataVenda = mDate
Tipo = txtSaldo
Tipo2 = txtProduto
Tipo3 = cboCodProduto.Column(0)
Tipo4 = DataVenda
sTipo = txtValor
nTipo = txtQuant
rTipo = txtTotal
'tblSelecao é uma tabela criada para receber temporiamente os dados de produtos do cliente.
If Not IsNull(txtSenha) And txtSenha = sSenha Then
DoCmd.SetWarnings False
strSQL = "INSERT INTO tblSelecao(CodigoCliente,CodigoProduto,Produto,Quantidade, ValordeVenda,Total, Saldo, DataVenda)VALUES('" & sCodigo & "','" & Tipo3 & "', '" & Tipo2 & "','" & nTipo & _
"', '" & sTipo & "', '" & rTipo & "','" & Tipo & "','" & Tipo4 & "')"
DoCmd.RunSQL strSQL
DoCmd.RunCommand acCmdRefresh
DoCmd.SetWarnings True
If Me.txtSaldo < 0 Or txtSaldo < txtTotal Then
MsgBox "DESCULPE SEU LIMITE FOI EXCEDIDO!!!", vbExclamation, "PDV"
On Error Resume Next
Dim nCodigo As Integer
Dim pCodigo As String
Dim nQuant As Integer
Dim strMsg As String
Dim strTitle As String
Dim intRetVal As Integer
pCodigo = Me.cboCodProduto.Column(0)
nCodigo = CInt(DLast("CodigoProduto", "tblSelecao", "CodigoProduto = '" & pCodigo & "'"))
DoCmd.SetWarnings False
strSQL = "DELETE * FROM tblSelecao WHERE CodigoProduto = '" & nCodigo & "'"
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True
DoCmd.RunCommand acCmdRefresh
Else
strMsg = UCase("Atualiza o estoque deste produto?")
strTitle = "Atualização de Estoque"
intRetVal = MsgBox(strMsg, vbQuestion + vbYesNo, strTitle)
Select Case intRetVal
Case vbYes
Call CalculaEstoque
Case vbNo
DoCmd.CancelEvent
End Select
With Me
.cboCodProduto = ""
.txtProduto = ""
.txtValor = 0
.txtQuant = 1
End With
Me.Refresh
Me.cboCodProduto.SetFocus
End If
Else
MsgBox UCase("Senha Não Confere. Não foi possível inserir o produto !!!"), vbCritical, "PDV"
End If
End Sub