PDV - PRODUTOS DE 1 CAIXA APARECE EM OUTRO
Tenho instalador num mini-mercado com 2 caixas...
quando passo o codigo de barra ele ler o codigo e adiciona o produto na tabela PEDIDOS_ITENS
Private Sub Adicionar_Produto()
If txtCodProduto.Text = [Ô][Ô] Then Exit Sub
If txtValor.Text = [Ô][Ô] Then Exit Sub
Autonumeracao_Itens
execSQL [Ô]INSERT INTO PEDIDOS_ITENS VALUES([Ô] & txtCodItem & [Ô],[Ô] & txtCodPedido.Text & [Ô], 0 , [Ô] & txtCodProduto.Text & [Ô],[ô][Ô] & lblDesc.Caption & [Ô][ô],[ô][Ô] & txtValor.Text & [Ô][ô],[Ô] & Replace(txtQuant.Text, [Ô],[Ô], [Ô].[Ô]) & [Ô], [ô][Ô] & txtTotal.Text & [Ô][ô], [ô]R[ô], 0, #[Ô] & Format(Date, [Ô]MM/DD/YYYY[Ô]) & [Ô]#, [ô]BALCÃO[ô][ô])[Ô]
LimparObjetos_Produto
End Sub
Apos adiciona-lo na tabela, uso esse outro codigo para exibir no grid.
Private Sub MostrarGrid_Produtos()
If txtCodPedido.Text = [Ô][Ô] Then Exit Sub
Call Abrir_BancodeDados
SQL = [Ô]SELECT PEDIDOS_ITENS.CODIGO, PEDIDOS_ITENS.COD_PRODUTO, PEDIDOS_ITENS.DESCRICAO, PEDIDOS_ITENS.Preco, PEDIDOS_ITENS.QUANTIDADE, PEDIDOS_ITENS.Total, PEDIDOS_ITENS.PDV FROM PRODUTOS INNER JOIN PEDIDOS_ITENS ON PRODUTOS.CODIGO = PEDIDOS_ITENS.COD_PRODUTO WHERE PEDIDOS_ITENS.COD_PEDIDO = [Ô] & txtCodPedido.Text & [Ô] ORDER BY PEDIDOS_ITENS.CODIGO DESC[Ô]
Set RS = BD.OpenRecordset(SQL, dbOpenSnapshot)
FormatarGrid_Produtos
End Sub
Então ele pega todos os registro da tabela PEDIDOS.ITENS que possuo o COD_PEDIDO = txtCodPedido.Text e exibi no grid
[txt-color=#e80000]
ATé AQUI TUDO FUNCIONANDO PERFEITAMENTE![/txt-color]
agora o erro acontece quando passo varios produtos rapidamente nos t2 terminais ao mesmo tempo...
ERRO = Sempre 1 ou 2 produtos de um caixa aparece no outro caixa...
Se eu passar nos 2 caixas... não sendo rapido.. registrando numa velocidade moderada... não dar esse erro nao. só quando os 2 estão passando produtos nos leitores rapidamente...
Alguem sabe me dizer o pq disso e como corrigir?
se os 02 caixas passaram muito rapido varios produtos sempre 1 ou 2 produtos aparece na lista...
Eu uso da seguinte maneira via POO, através de classes.
Em meu PDV tenho apenas três pois é uma aplicação simples.
Classe de Conexao.
Classe de Tabelas.
Classe para o Terminal.
Okey até aà o programador que tem suas maneiras de ultilizar.
No meu terminal eu uso o seguinte crio vários Caixas
Esses caixas é como se fosse uma tabela temporária que vai servir somente para guardar os produtos adicionados. (Somente isso)
Ficará assim, quando um vendedor for abrir o Terminal ele vai escolher o caixa, exemplo [Ô]Caixa1[Ô], então todos os produtos adicionados ficará gravado nessa tabela, e para finalizar a venda, é simples eu faço um Loop nessa tabela passando para a tabela de [Ô]Produtos vendidos[Ô] que vai ficar o código da venda; Ok[ô]
Eu salvo os dados assim:
[ô]-> A Variavel [Ô]ICaixa[Ô] guarda o número do caixa escolhido pelo vendedor - Exemplo escolheu o [Ô]Caixa1[Ô] -> ICaixa = 1
[ô]Comando para adicionar
sSQL = [Ô]INSERT INTO CAIXA[Ô] & ICaixa & _
[Ô](CODIGO_PRODUTO,PRODUTO,QUANTIDADE,VALOR,TOTAL)[Ô] & _
[Ô]VALUES([ô][Ô] & pCodigo & _
[Ô][ô],[ô][Ô] & pProduto & _
[Ô][ô],[ô][Ô] & pQuantidade & _
[Ô][ô],[ô][Ô] & pValor & _
[Ô][ô],[ô][Ô] & pTotal & [Ô][ô])[Ô]
[ô]Executa comando
DataBase.Banco.Execute (sSQL)
O Terminal é mais lógica do que programação, assim eu posso abrir vários terminais em minha rede sem se preocupar com congestionamento de informações, até agora não tive problemas quanto a isso, já usei Firebird e Access, funfou beleza.
Espero ter ajudado
Alguns requerimentos se faz necessário quando trabalhamos com PDV.
1 º - Tabela de venda com informações da venda apenas.(cod cliente, numero da venda, data da venda, codigo da abertura do caixa, codigo do caixa,data da venda, etc...etc...)
2 º - Tabela de Itens da venda com informações da venda e do produto(cod do cliente/venda, cod do caixa,cod do produto,descricao,qtd, impostos(ipi,icms,etc), etc...etc...)
O que aparentemente está acontecendo é que você não está colocando algum campo que identifique de qual venda é o produto passado e de qual caixa é a venda.
Isso tem que ser bem explÃcito, pois é necessário que cada venda tenha um id distinto e cada item tenha uma venda distina.
OK.
Citação::
Webier, seguinte :
Alguns requerimentos se faz necessário quando trabalhamos com PDV.
1 º - Tabela de venda com informações da venda apenas.(cod cliente, numero da venda, data da venda, codigo da abertura do caixa, codigo do caixa,data da venda, etc...etc...)
2 º - Tabela de Itens da venda com informações da venda e do produto(cod do cliente/venda, cod do caixa,cod do produto,descricao,qtd, impostos(ipi,icms,etc), etc...etc...)
O que aparentemente está acontecendo é que você não está colocando algum campo que identifique de qual venda é o produto passado e de qual caixa é a venda.
Isso tem que ser bem explÃcito, pois é necessário que cada venda tenha um id distinto e cada item tenha uma venda distina.
OK.
Estrutura da tabela PEDIDOS
[txt-color=#e80000]COD_PEDIDO[/txt-color]
DATA_COMPRA
COD_CLIENTE
FORMA_PGTO
SUBTOTAL
DESC
TOTAL
STATUS
Estrutura da tabela PEDIDOS_ITENS
CODIGO (autonumeração)
[txt-color=#e80000]COD_PEDIDO[/txt-color]
COD_PRODUTO
VALOR_BRUTO
DESC
VALOR_LIQ
Trajetoria:
1. Ao abrir o pdv ele criar um pedido em branco só com o COD_PEDIDO
2. adiciono os produtos na tabela PEDIDOS_ITENS... todos com o COD_PEDIDO que está exibido no txtcodpedido.text
3. finalizo o pedido... essa hora é preenchido os campos da tabela PEDIDOS que estava em branco... cod_cliente, data_compra e etc
Tudo funcionando perfeitamente.
O Erro só acontece quando vou passar nos 2 terminais ao mesmo tempo numa velocidade rapida... se nos 2 terminais passarem produtos devegar ou moderado... não dar problema... o problema está na inserção dos dados na tabela que requer uma certa velocidade do BD... ai como o BD nao tem essa velocidade... ele acaba adicionando um produto de uma caixa no outro
coneccao.begintrans
coneccae.execute SeuComantoSql
coneccao.committrans
isso resolveu um problema meu, quando eu usava access (a muito, mais muito tempo atras).
Estrutura da tabela PEDIDOS
Citação:
COD_PEDIDO
DATA_COMPRA
COD_CLIENTE
FORMA_PGTO
SUBTOTAL
DESC
TOTAL
STATUS
IDPDV Onde idpdv irá identificar em qual caixa a venda foi realizada.
Estrutura da tabela PEDIDOS_ITENS
CODIGO (autonumeração)
COD_PEDIDO
COD_PRODUTO
VALOR_BRUTO
DESC
VALOR_LIQ
IDPDV Onde idpdv irá identificar em qual caixa a venda foi realizada.
Na rotina onde vc exibe os produtos no grid, na select deverá ter na Clausula WHERE a seguinte condição IDPDV = XXX
Já pensou em usar apenas os campos básicos para uma Lista Temporária ?
CAIXA1
CODIGO_PRODUTO
PRODUTO
QUANTIDADE
VALOR
TOTAL
CAIXA2
CODIGO_PRODUTO
PRODUTO
QUANTIDADE
VALOR
TOTAL
Ao entrar no Terminal de vendas você escolhe qual caixa você vai usar ex.: 2
Quando você adicionar o produto na lista, você vai adicionar todos os produtos na tabela Caixa2
Para finalizar a venda você tem outras duas tabelas
VENDAS
CODIGO_VENDA
CODIGO_CLIENTE
DATA
HORARIO
TOTAL_PRODUTOS
SUB_TOTAL
PRODUTOS_VENDIDOS
CODIGO_VENDA
CODIGO_PRODUTO
QUANTIDADE
TOTAL
Para adicionar os produtos da lista temporária Caixa1 eu faço um Loop
Do while not Caixa1.EOF
tabelaProdutosVendidos.codigo_produto=1
loop
Quando eu for consultar os produtos vendidos numa venda eu faço o select normalmente
SQL = SELECT * FROM PRODUTOS_VENDIDOS WHERE CODIGO_VENDA = N
Com isso não vai ter problemas na inserção de um produto rapidamente pois você esta apenas usando uma tabela, sem relacionar com pedidos, só no final da venda voce finalizar e grava os dados nas outras tabelas...
Um ponto positivo quanto a essa maneira de usar, é que se o computador desligar, ou cair a energia, todos os produtos comprados vão estar na tabela, quando voltar ao programa, os produtos vão estar lá, até que seja finalizada a venda...