CONTAR QUANT BASEADO NA TABELA E GRID

WEBIER 21/03/2015 12:25:32
#445402
Boa tarde Galera,

Tenho um PDV onde passo os produtos pelo leito e aparecer no grid... até ai normal...
Se eu passar o produto uma vez, ele criar uma linha no grid com [Ô]Sabao x..... quant= 1[Ô]... se eu passar o produto novamente, ele não criar outra linha nao, ele só muda a quantidade, ou seja, [Ô]Sabao x..... quant= 2[Ô]....e assim sucessivamente...

Caso eu tenha que passar 200 produtos do mesmo e não queira perder tempo, posso dar um duplo clique na linha do produto no grid, ai o txtQuant aparece a quantidade... ai digito [Ô]200[Ô] e dou enter e ele edita para 200... até ai normal...

Porem, tive que criar uma rotina para verificar a quantidade de produto no estoque, para não vender com estoque negativo.

Ai fiz assim

  Private Sub Verifica_QuantEstoque()
[ô]descobrir o codigo do produto
Dim sSQL As String
Dim r As ADODB.Recordset
Dim vCodProduto As Long

If txtCodBarra.Text = [Ô][Ô] Then Exit Sub

sSQL = [Ô]SELECT produtos.codigo AS var_codprod, produtos.cod_barra, produtos.ativo, [Ô] & _
[Ô]produtos_entrada_itens.codigo FROM produtos INNER JOIN produtos_entrada_itens ON produtos.codigo = produtos_entrada_itens.codigo_produto [Ô] & _
[Ô]WHERE (produtos.cod_barra = [ô][Ô] & txtCodBarra.Text & [Ô][ô]) AND (produtos.ativo = 1) ORDER BY produtos_entrada_itens.codigo DESC;[Ô]

Set r = dbData.OpenRecordset(sSQL)

If r.BOF Then
ShowMsg [Ô]Produto Inexistente![Ô], vbCritical
LimparObjetos_Produto
txtCodBarra.SetFocus
Exit Sub
End If

vCodProduto = r([Ô]var_codprod[Ô])

[ô]verificar quantidade
Dim vQtde As Double

[ô]Consulta os saldos
sSQL = [Ô]SELECT quant_estoque FROM produtos WHERE (codigo = [Ô] & vCodProduto & [Ô]);[Ô]
Set r = dbData.OpenRecordset(sSQL)

If Not r.BOF Then vQtde = ValidateNull(r([Ô]quant_estoque[Ô]))
If r.State <> 0 Then r.Close
Set r = Nothing

[ô]Calcula o saldo atual em estoque
[ô]vQtde = EstoqueVendas(vCodProduto)

If vQtde <= 0 Then
Dim oCfg As ConfigItem
Dim bEstNeg As Boolean

[ô]Recupera a configuração do estoque
Set oCfg = sysConfig([Ô]ESTOQUE_NEGATIVO[Ô]) [ô]verifica se pode vender com estoque negativo
bEstNeg = CBool(oCfg.Value)
Set oCfg = Nothing

If Not bEstNeg Then
ShowMsg [Ô]A quantidade em estoque é insuficiente.[Ô], vbExclamation
LimparObjetos_Produto
Exit Sub
End If
End If
End Sub


chamo ela assim:

  Private Sub txtQuant_KeyPress(KeyAscii As Integer)
Dim lNovoCod As Long

If txtCodProduto.Text = [Ô][Ô] Then txtQuant.Locked = True Else txtQuant.Locked = False
KeyAscii = aNumeros(KeyAscii, True)

[ô]ADICIONAR O PRODUTO
If txtQuant.Text = [Ô][Ô] Then txtQuant.Text = 1

If KeyAscii = 13 Then
If cmdAlterar.Enabled = False Then
Verifica_QuantEstoque
If VERIFICAR_QUANTIDADE = True Then txtCodBarra.SetFocus: Exit Sub
lNovoCod = AutoNumeracao_Itens
dbData.Execute [Ô]INSERT INTO pedidos_itens VALUES ([Ô] & lNovoCod & [Ô],[Ô] & txtCodPedido.Text & [Ô], 0, [Ô] & txtCodProduto.Text & [Ô], [ô][Ô] & lblDesc.Caption & [Ô][ô], [Ô] & Replace(CCur(txtValor.Text), [Ô],[Ô], [Ô].[Ô]) & [Ô], [Ô] & Replace(CCur(txtQuant.Text), [Ô],[Ô], [Ô].[Ô]) & [Ô], [Ô] & Replace(CCur(txtTotal.Text), [Ô],[Ô], [Ô].[Ô]) & [Ô], [ô]R[ô], 0, CONVERT(DATETIME, [ô][Ô] & Format(Date, ocDATA) & [Ô][ô], 103), [ô][Ô] & IIf(StatusBar1.Panels(2).Text = [Ô][Ô], [Ô]CAIXA01[Ô], StatusBar1.Panels(2).Text) & [Ô][ô], [ô]BALCAO[ô]);[Ô]
Else
Verifica_QuantEstoque
If VERIFICAR_QUANTIDADE = True Then txtCodBarra.SetFocus: Exit Sub
dbData.Execute [Ô]UPDATE pedidos_itens SET quantidade = [Ô] & Replace(txtQuant.Text, [Ô],[Ô], [Ô].[Ô]) & [Ô], preco = [Ô] & Replace(CCur(txtValor.Text), [Ô],[Ô], [Ô].[Ô]) & [Ô] WHERE (codigo = [Ô] & txtCodItem.Text & [Ô]);[Ô]
cmdAlterar.Enabled = False
End If

[ô]MOSTRAR NA GRADE
MostrarGrid_Produtos
txtCodBarra.Text = [Ô][Ô]
txtCodBarraPeso.Text = [Ô][Ô]
txtQuant.Text = [Ô][Ô]
txtValor.Text = [Ô][Ô]
txtTotal.Text = [Ô][Ô]
txtCodBarra.SetFocus
txtCodProduto.Text = [Ô][Ô]
txtCodItem.Text = [Ô][Ô]
txtUnidMed.Text = [Ô][Ô]
End If
End Sub


Meu problema é que preciso cruzar as informações da tabela com do grid, ou seja,

Meu estoque tem 5, no meu grid já possui 5... queria que ele cruzasse as informações e bloqueasse quando chegasse no limite

OBG: a linha da quantidade no grid é a 5
KERPLUNK 22/03/2015 17:12:26
#445410
Resposta escolhida
Primeiro de tudo, se está no caixa, quer dizer que esteve no expositor e portanto tem estoque. Como vai comprar uma barra de sabão que não existe? E para fazer o que você quer, basta adicionar a contagem do produto na sua query de contagem de estoque. Uma alternativa é usar um parâmetro opcional na rotina [Ô]Verifica_Estoque[Ô].
Tópico encerrado , respostas não são mais permitidas