Página 1 de 1

Abrir Cupom e sequencia de itens

Enviado: 13 Dez 2005 17:18
por Hstadler
BOA TARDE AMIGOS

É A PRIMEIRA VEZ Q DESENVOLVEMOS UM SOFTWARE DE FRENTE DE CAIXA, POIS BEM, TEMOS UMA IMPRESSORA BEMATECH MP 25 FI.

PROBLEMA:

1. ABRE O CUPOM COM A TECLA "F2"
2. ENQUANTO O CUPOM ESTA ABRINDO, O OPERADOR DE CAIXA VAI LENDO OS CODIGO DE BARRAS, POREM , SE NÃO ESPERAR ABRIR O CUPOM FISCAL, VAI DAR ERRO NA LEITURA DOS CODIGOS.
3. PARA ABRIR O CUPOM FISCAL NÃO DEMORA MAIS QUE 3 SEGUNDOS, POREM O DONO DO MERCADO NÃO ACEITA POIS ELE VÊ EM OUTRAS REDES GRANDES, QUE NÃO PRECISA ESPERAR ABRIR O CUPOM.

NÃO SEI MAIS O QUE FAZER, JA TENTEI COLOCAR ESSES ITENS LIDOS EM ARQUIVO TEMPORARIO MAS NÃO ESTOU TENDO SUCESSO.

SE ALGUEM JA PASSOU POR ESSA DIFICULDADE E PODER AJUDAR AGRADEÇO, POIS É CAPAZ DE O CLIENTE ANO QUE VEM TROCAR MEU SISTEMA POR OUTRO.

OBRIGADO

HENRIQUE

Enviado: 13 Dez 2005 17:45
por josenilson
Prezado amigo,

A impressora que vc está usando é térmica?

Qual o meio de acesso que vc usa ( bematech monitor, bemafi.exe, mp20drv.exe) ?

Acho estranho essa demora para abrir o cupom.

Como sugestão, ao invés de teclar F2 para abrir o cupom, faz o seguinte:

Na hora em que o usuário passar o 1o código de barras, então o sistema abre automaticamente o cupom fiscal.

Também, vc pode colocar uma mensagem na tela avisando ao usuario que aguarde enquanto a impressora processa o comando enviado a ela.

É importante que vc informe o seu meio de acesso e se possível, os comandos que vc está utilizando. talvez o problema esteja aí, e naum na impressora fiscal. ok?

Enviado: 13 Dez 2005 18:43
por Hstadler
OI AMIGO

A IMPRESSORA É MATRICIAL, USO O BEMAFI.EXE, O F2 É SÓ PARA ABRIR O CUPOM FISCAL E DEPOIS VAI LER OS PRODUTOS COM O LEITOR DE CODIGO DE BARRAS.


HENRIQUE

Enviado: 13 Dez 2005 19:01
por Hstadler
OI JOSENILSON

TEM OUTRA COISA, EU FIZ O TESTE SEM O F2, O PROBLEMA ESTA NA SEQUENCIA DE ENVIO DE COMANDOS, POR EX.: SE EU LER 1º ITEM, VAI ABRIR O ECF E LANÇAR O ITEM SEGUIDAMENTE, MAS SE EU LER 3 OU 4 ITENS SEGUIDOS (O 1º +3 OU 4), DA UM ERRO, ACONTECENDO O QUE, VAI CONSEGUIR REGISTRAR NO ECF SOMENTE OS 2 PRIMEIROS ITENS E PERDE O RESTANTE TENDO QUE LER NOVAMENTE OS OUTROS.

POR CURIOSIDADE FIZ UM TESTE IMPRIMINDO O CUPOM COM 10 ITENS SOMENTE NO FINAL (EU SEI Q POR LEI NÃO PODE FOI SÓ UM TESTE), E VAI Q É UMA BLZ, AGORA NA CONCOMITANCIA, AÍ VAI O PROBLEMA ANTERIOR

OBRIGADO

HENRIQUE

Enviado: 13 Dez 2005 19:03
por Hstadler
OI JOSENILSON

TEM OUTRA COISA, EU FIZ O TESTE SEM O F2, O PROBLEMA ESTA NA SEQUENCIA DE ENVIO DE COMANDOS, POR EX.: SE EU LER 1º ITEM, VAI ABRIR O ECF E LANÇAR O ITEM SEGUIDAMENTE, MAS SE EU LER 3 OU 4 ITENS SEGUIDOS (O 1º +3 OU 4), DA UM ERRO, ACONTECENDO O QUE, VAI CONSEGUIR REGISTRAR NO ECF SOMENTE OS 2 PRIMEIROS ITENS E PERDE O RESTANTE TENDO QUE LER NOVAMENTE OS OUTROS.

POR CURIOSIDADE FIZ UM TESTE IMPRIMINDO O CUPOM COM 10 ITENS SOMENTE NO FINAL (EU SEI Q POR LEI NÃO PODE FOI SÓ UM TESTE), E VAI Q É UMA BLZ, AGORA NA CONCOMITANCIA, AÍ VAI O PROBLEMA ANTERIOR

OBRIGADO

HENRIQUE

Enviado: 14 Dez 2005 14:10
por jpalma
Colega

Já desenvolvi programas para a bematech fiscal e não tive este problema relatado.
Já com a sweda tive problema iguais ao seu e a solução foi colocar um LOOP aguardando o retorno da impressora.
Concordo tambem com Josenilson quanto a coloção de uma mensagem ao usuário.


sds

Enviado: 14 Dez 2005 17:49
por josenilson
Prezado henrique,


Ao meu ver, a unica saida pro teu problema seria fazer o seguinte:


Sempre que for enviado um comando pra impressora fiscal, o teu sistema deverar tratar o retorno da mesma, antes de enviar o proximo comando.

Um exemplo passo a passo:

1) Ler codigo de barras
2) Envia o produto para a impressora fiscal
3) Aguarda retorno da impressora
4) Se nao houve erros, vai para o passo 1
5) Se houve erro, mostra o erro ao usuario e vai para o passo 1


Lembre-se, sempre que enviar um comando para impressora, aguarde a resposta da impressora. E se a resposta for um pouco demorada, mostre uma mensagem para que o usuario aguarde.


Se por acaso vc não souber como tratar os retornos da impressora, me mande um e-mail que eu posso te dar uma ajuda.

josenilson@wcompany.com.br




:xau

Enviado: 15 Dez 2005 01:06
por rochinha
Amiguinho

O seu programa é homologado para ECF?

Se não esqueça o problema da comcomitancia, ja que seu cliente não entende, e grave todos os dados num .DBF e no final mande para a impressora.

@braços :?)

Enviado: 15 Dez 2005 01:26
por vagucs
Amigos,

Não tenho sistema de ECF mas ja migrei alguns e já até desenvolvi um do 0 para uma empresa.

Bom, primeiramente, evite uso de drives residentes que facilitam esta comunicação, melhor fazer a programação do protocolo assim vc pode fazer todo o processo de verificação de erros da impressora.

As impressoras bematech são as mais fáceis de serem programadas, alguns modelos de impressora SWEDA (Bematech tambem), vc tem que fazer a leitura da linha CTS para saber quando a impressora está preparada para a leitura do próximo comando, impressoras Sweda mais novas tem um buffer de 4k que salvam a vida neste ponto.

No sistema de ECF que desenvolvi, fiz o seguinte, ao passar o primeiro item ele ja abre o cupom, sem precisar de pressionar tecla especifica para isto. Outra coisa, todos os itens que estão sendo digitados ou lidos pelo leitor serial, são acumulados em um array que é como um acumulador de tarefas, isso em uma rotina rodando em background capturando as entradas de dados, e o programa processando os comandos deste array na impressora assim que ela estiver disponivel, foi a melhor forma e não perde vendas em hipotese nenhuma.

Enviado: 15 Dez 2005 04:43
por evaldo
Caro Hstadler.
A Rotina que você precisa é esta, outra coisa usa o bemafi.lib, com ele você vai eliminar muitos problema principalmente se você estiver usando o mp20drv.exe.

Como você esta comecando o seu sistema no ramo de supermercado, coloque no sistema o cartão gerencial, para desconto, cancelamento e autorização de crédito, no cartão você coloca um código de barra, assim você tem controle de quando o fiscal de caixa passa o cartão no leitor, se ele digitar o código de barra no teclado o sistema não aceita.

Código: Selecionar todos

*******************************
FUNCTION ImprimeCupom(lRetorno)
*******************************
   //
   LOCAL cSituacao   := ""
   LOCAL cStringI    := ""
   LOCAL cCQtd       := ""
   LOCAL nCQtd       := 0   
   LOCAL cCVlunit    := ""   
   LOCAL cCDesc      := SPACE(29)
   LOCAL lAber       := .F.
   //
   ps    := ""                    //prepara string
   inip  := chr(27) + chr(251)    //abertura   protocolo 
   fimp  := "|"+ chr(27)          //fechamento do protocolo
   vcbuf := chr(27) + chr(251)
   tmret := 0                     //tamanho do retorno
   //verifica se o cupom fiscal esta aberto
   tmret      := 6
   ps         := inip + "19" + fimp
   cmc(ps,tmret,@lRetorno,@lAber)
   //
   IF !lAber
      //      
      lAberto := .T.
      ps := inip + "00" + fimp
      cmc(ps,tmret,@lRetorno) 
      //
      //numero do cupom fiscal
      tmret      := 6
      ps         := inip + "30" + fimp
      nNroCupom  := cmc(ps,tmret,@lRetorno)
      tmret      := 0   
      //            
   ENDIF       
   //
   IF cSt     == "F"
      cSituacao := "FF"
   ELSEIF cSt == "T" 
      IF  nICMS = Parametro->t1
          cSituacao := "01"    
      ELSEIF nICMS = Parametro->t2   
          cSituacao := "02"                
      ELSEIF nICMS = Parametro->t3   
          cSituacao := "03"                               
      ELSEIF nICMS = Parametro->t4   
          cSituacao := "04"                               
      ELSEIF nICMS = Parametro->t5   
          cSituacao := "05"                               
      ELSEIF nICMS = Parametro->t6   
          cSituacao := "06"                               
      ELSEIF nICMS = Parametro->t7   
          cSituacao := "07"                               
      ELSEIF nICMS = Parametro->t8   
          cSituacao := "08"                
      ELSEIF nICMS = Parametro->t9   
          cSituacao := "09"                               
      ELSEIF nICMS = Parametro->t10   
          cSituacao := "10"                               
      ENDIF                  
   ELSEIF cSt == "I"
      cSituacao := "II"
   ELSEIF cSt == "N"
      cSituacao := "NN"
   ENDIF
   //   
   cQtd       := STRTRAN(STRZERO(nQtd*1000,7),".","")         
   cVlunit    := STRTRAN(STR(nVrUni),".","") 
   cVlunit    := STRZERO(VAL(cVlunit),8)
   cDesc      := ProdECF->reduzida
   //
   cStringI := "56"+"|"+cCodBar+"|"+cDesc+"|"+cSituacao+"|"+cQtd+"|"+cVlunit+"|"+"0000" 
   ps       := inip + cStringI + fimp
   cmc(ps,tmret,@lRetorno)            
   //
   RETURN(lRetorno)

Enviado: 15 Dez 2005 10:07
por Hstadler
MUITO OBRIGADO PESSOAL PELA AJUDA

JA ESTOU TENDO RESULTADOS MELHORES.


OBRIGADO


HENRIQUE