nao da pra voce colocar um timer e fazer o usuario esperar um pouco
para passar os produtos?


2008/10/30 sergio cavalcante <[EMAIL PROTECTED]>

>   Pessoal,
> Desculpe o texto grande, mas é pra que tudo seja explicado de forma muito
> sucinta de modo que possamos chegar à resolução rapidamente. O texto,
> dependendo da perspectiva pode ser off-topic ou não, mas acho que interessa
> até certo grau às 3 listas que estou enviando, delphi-br, NDDV e Automação
> Total. Perdoem-me se estiver equivocado.
>
> Estou com um probleminha aqui que tá me deixando maluco. Instalei um
> componente de comunicação com impressoras fiscais chamado ACBr. Muito bom,
> oferece opções para muitas marcas de impressoras, o que é importante pra
> quem é do ramo de Automação Comercial, como eu.
>
> Utilizo Delphi 6 no Windows XP e SGBD Firebird 2.0.
>
> Com esse componente, posso mandar os comandos mais comuns utilzados por uma
> aplicação frente de loja, como Abrir Cupom, VenderItem, etc. Instalei,
> configurei, testei e funciona mesmo, com diversas marcas, como prometido.
>
> Tudo ia bem até que começaram os problemas quando, por exemplo, o caixa
> passa os itens muito rápido. Quando o caixa passa o primeiro item, o Cupom
> Fiscal ainda não está aberto. Então o que a aplicação te que fazer é, ao
> verificar isso, primeiro ela abre o cupom, e depois começa a mandar os
> comandos para vender os itens.
>
> Mas às vezes, a velocidade que o caixa passa os itens é tão grande, que,
> enquanto a impressora está abrindo o cupom, ao término do processo de
> abertura do cupom pela impressora, já foram passados 8 a 9 itens! E o que
> acontece? enquanto a impressora está processando, se você mandar o comando
> de venda, o componente afirma que a impressora está ocupada, e fica
> mandando
> caixinhas afirmando isso pro caixa. Bom, o caixa não tem nada a ver com
> isso, ele quer somente passar os itens e pronto, a aplicação que se vire.
>
> Então, pra resolver essa questão, implementei duas threads na minha
> aplicação, utilizando jvThread, da JEDI vcl. Uma que abre o cupom, e outra
> que faz loop pra vender os itens. tbm implementei uma lista que vai
> acumulando os itens do cupom, à medida que são passados pelo caixa, e a
> thread de venda vai consumindo esses itens e deletando à medida que eles
> são
> vendidos.
>
> Em suma é assim:
>
> 1 - A Aplicação tem um forma chamado frmCupom, que tem um edit que é
> preenchido pelo leitor de código de barras(LCB), ligado no teclado.
> 2 - A Aplicação encontra-se no estado inicial, Cupom ainda não aberto.
> 3 - O Caixa passa o produto. O Edit é preenchido pelo LCB que no final
> simula um Enter.
> 4 - O Edit enfileira o item na lista de itens. Já que o cupom não está
> aberto, antes de enfileirar o item, ele ativa a thread que abre o cupom.
> Quando essa Thread morre, ela inicia a Thread de venda.
> 5 - A Thread de venda fica fazendo loop, verificando o Count da Lista de
> Itens(que é um TObjectList). Se o count for maior que um, ele vai vendendo
> toda vez que a lista é preenchida e deletando o Item depois que vende.
> 6 - Existem flags dizendo que a impressora está trabalhando, se o cupom
> está
> aberto ou se está abrindo o cupom.
>
> Com isso resolveu perfeitamente os problemas de "Impressora não está
> respondendo". Aí encontrei outro.
>
> Ainda nesse form, o que acontece é o seguinte. Quando o caixa entra naquela
> velocidade "frenética", ela começa a passar os produtos no LCB. digamos o
> produto com o código de barras 123000000033. Como já afirmei, quando a
> caixa
> passa um produto no Leitor, o Edit começa ser preenchido, da esquerda pra
> direita, e no final, o Leitor simula um "enter". o que muitas vezes
> acontece
> é o seguinte, após 5 passadas:
>
> 1 - primeiro produto é passado. Enfileira e começa a abrir o cupom.
> 12300000003
> 2 - ele é passado mais vezes
> 12300000003
> 12300000003
> 3 - no exato momento que o cupom de abertura começa a ser impresso, de
> alguma forma o enter do leitor é chamado no meio do preenchimento do edit,
> e
> o que é lido é o seguinte
> 123000
> 4 - repare que o CodBarra do produto foi cortado. como esse produto não
> existe, o sistema dá um erro de produto não encontrado. Mas como os
> codbarras são enfileirados, quando dá esse erro, o caixa já está no sexto,
> sétimo produto. Essa parada faz com que o mesmo tenha que ver onde parou, o
> que ele já passou, e o que tem que passar de novo, o que é uma coisa
> realmente chata pro cliente.
>
> Imaginei que isso estivesse acontecendo pelo processamento simultâneo entre
> o aplicativo Delphi - Tela de Cupom e a Impressora, dividindo
> processamento.
> Então resolvi criar uma DLL que encapsulasse o ACBr(já até disponibilizei
> pro Daniel). Fiz isso, coloquei as threads de venda e abertura de cupom com
> prioridade Lowest, justamente pra desafogar ao máximo o processamento da
> tela de cupom e não ocorresse esse "freeze" momentâneo. Melhorou, mas não
> resolveu ainda assim.
>
> E o problema realmente é o procedimento de preenchimento do edit mesmo, pq
> quando eu não dou um clear no edit, e dou vários enters sem repreenchê-lo,
> funciona normalmente. E a impressora tem sua parcela de culpa tbm, pq
> quando
> uso o aplicativo em versão demo, sem impressora e com o leitor, funciona
> normalmente tbm. E quando utilizo a Dll da Bematech ou Sweda, tbm funciona.
>
> Então, companheiros de lista, preciso de uma luz, pra resolver esse
> problema. Muita luz mesmo ehhehe. Obrigado desde já a quem ajudar.
>
> Atenciosamente,
> ------------------------------
> Sérgio Cavalcante
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>



-- 
Felipe Govoni
---------------------
Programador
Fone 8472-8718


[As partes desta mensagem que não continham texto foram removidas]

Responder a