PDV - PRODUTOS DE 1 CAIXA APARECE EM OUTRO

WEBIER 05/12/2011 20:36:54
#390654
trabalho com VB6 e base de dados ACCESS

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?






NETMANIA 05/12/2011 22:11:30
#390656
Por que você não coloca uma um campo nesta tabela para você saber de qual caixa o item foi adicionado? Com isso, você zera a chance de ocorrer este erro.
WEBIER 05/12/2011 23:51:27
#390659
Netmania... fiz justamente isso hoje a tarde... cada produto adiciona fica registrado o caixa (caixa01, caixa02) no produto... mas mesmo assim deu o mesmo na mesma circustancia...

se os 02 caixas passaram muito rapido varios produtos sempre 1 ou 2 produtos aparece na lista...
CHARLESTON10 06/12/2011 07:43:14
#390667
Não sei a maneira que você trabalha no seu visual basic.
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
FOXMAN 06/12/2011 09:58:04
#390673
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.

WEBIER 06/12/2011 15:59:36
#390712
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



MARCELOKROL 06/12/2011 19:00:53
#390734
A idéia do MACYSZYN, é boa ja pensou em mudar de banco, bom mais se essa hipotese estiver descartada vc pode tentar fazer uma compactação do banco. Outra opçao é usar transaçao com o servidor, tipo assim:

coneccao.begintrans
coneccae.execute SeuComantoSql
coneccao.committrans

isso resolveu um problema meu, quando eu usava access (a muito, mais muito tempo atras).
FOXMAN 06/12/2011 19:04:20
#390736
Resposta escolhida
Tente altera a tabela para a seguinte estrutura :

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



CHARLESTON10 06/12/2011 22:03:39
#390749
WEBIER
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...

Tópico encerrado , respostas não são mais permitidas