Bematech Software Partners

 
  • jan 02 2006

    Agilizando a busca no retorno de status da impressora fiscal Bematech

    Prezado parceiro, 

    Sabemos que as impressoras fiscais Bematech, interagem com sua aplicação enviando bytes de status a cada execução de comando – os famosos “ACK” ou “NACK”, “ST1″, “ST2″ e “ST3″ (“ST3″ para as impressoras do Convênio ICMS 85/01 – MP-25/50 FI e MP-2000/2100/3000/4000/6000/6100/7000 TH FI).  

    Analisar este retorno é fundamental, pois é através dele que sabemos se o comando enviado foi executado com sucesso ou não pela impressora. Antes de conhecermos a rotina que fará a busca e o tratamento deste retorno, vamos entender um pouco mais sobre estes bytes. 

    - “ACK” indica que o comando enviado foi recebido com sucesso pela impressora. O seu valor é 6 (seis), tanto decimal quanto hexadecimal.

    - “NACK” indica que o comando enviado não foi recebido com sucesso pela impressora, ou seja, o protocolo (seqüência de bytes do comando) não foi enviado corretamente. O seu valor é 21 (vinte e um) em decimal ou 15 (quinze) em hexadecimal.

    - “ST1″ informa o primeiro quadro de status da impressora, onde cada bit setado possui uma situação:

    bit 7 – “Fim de Papel” (128 é o valor deste bit).
    bit 6 – “Pouco Papel” (64 é o valor deste bit).
    bit 5 – “Erro no Relógio” (32 é o valor deste bit).
    bit 4 – “Impressora em Erro” (16 é o valor deste bit).
    bit 3 – “Comando não iniciado com ESC” (8 é o valor deste bit).
    bit 2 – “Comando Inexistente” (4 é o valor deste bit).
    bit 1 – “Cupom Aberto” (2 é o valor deste bit).
    bit 0 – “Número de Parâmetro(s) Inválido(s)” (1 é o valor deste bit).

    - “ST2″ informa o segundo quadro de status da impressora, onde cada bit setado possui uma situação:

    bit 7 – “Tipo de Parâmetro de Comando Inválido” (128 é o valor deste bit).
    bit 6 – “Memória Fiscal Lotada” (64 é o valor deste bit).
    bit 5 – “Erro na Memória RAM” (32 é o valor deste bit).
    bit 4 – “Alíquota Não Programada” (16 é o valor deste bit).
    bit 3 – “Capacidade de Alíquotas Lotada” (8 é o valor deste bit).
    bit 2 – “Cancelamento Não Permitido” (4 é o valor deste bit).
    bit 1 – “CNPJ/IE do Proprietário Não Programado” (2 é o valor deste bit).
    bit 0 – “Comando Não Executado” (1 é o valor deste bit).

    Nos bytes ST1 e ST2 as informações de retorno poderão vir somadas, ou seja, poderemos ter um ou mais retorno em um mesmo status. Por exemplo, se recebermos em ST1 o valor 66, significa que a impressora está com pouco papel e com o cupom fiscal aberto. Então teremos o bit 6 (valor 64) mais o bit 1 (valor 2) setados (64 + 2 = 66).

    - “ST3″ informa o terceiro quadro de status da impressora. Disponível apenas nas impressoras do Convênio ICMS 85/01 (modelos citados acima), este byte define com maior precisão o estado em que se encontra a impressora.

    Vamos visualizar como exemplo, alguns valores de retorno do byte ST3, pois teremos todos na rotina que iremos conhecer.

    0 – “Comando OK”.
    1 – “Comando Inválido”.
    2 – “Erro Desconhecido”.
    3 – “Número de Parâmetro Inválido”.
    4 – “Tipo de Parâmetro Inválido”.
    5 – “Todas as Alíquotas já Programadas”.
    6 – “Totalizador Não Fiscal já Programado”.
    7 – “Cupom Fiscal Aberto”.
    8 – “Cupom Fiscal Fechado”.
    9 – “ECF Ocupado 10 Impressora em Erro”.
    11 – “Impressora sem Papel”.
    12 – “Impressora com Cabeça Levantada”.
    13 – “Impressora OFF LINE”.
    14 – “Alíquota não Programada”.
    15 – “Terminador de String Faltando”.
    16 – “Acréscimo ou Desconto maior que o total do Cupom Fiscal”.
    17 – “Cupom Fiscal sem Item Vendido”.
    18 – “Comando não Efetivado”.
    19 – “Sem espaço para novas Formas de Pagamento”.
    20 – “Forma de Pagamento não Programada”.
     

    Pronto! Agora que conhecemos melhor o status da impressora fiscal, vamos iniciar o nosso desenvolvimento. 

    A idéia é agilizar a busca deste retorno, ou seja, obter o retorno apenas quando a impressora possuir informações de status para enviar, caso contrário, prosseguimos com as operações da aplicação. 

    Se a impressora não possuir informações de status, seu retorno será “ACK” = 6, “ST1″ = 0, “ST2″ = 0 e “ST3″ = 0. Neste caso, não precisamos analisar. 

    Se a impressora possuir informações de status, seu retorno será “ACK” = 6, “ST1″ <> 0, “ST2″ <> 0 e “ST3″ <> 0. Neste caso, precisamos analisar. 

    Observação: Caso deseje trabalhar com o byte ST3, será necessário habilitá-lo através da função Bematech_FI_HabilitaDesabilitaRetornoEstendidoMFD( ’1′ ), passando como parâmetro a string ’1′. Esta função poderá ser chamada na entrada da aplicação. Para ler este byte, use a função Bematech_FI_RetornoImpressoraMFD( iACK, iST1, iST2, iST3 ). 

    Para que nossa rotina tenha efeito, precisamos habilitar a chave “StatusFuncao” no arquivo “BemaFI32.ini” (arquivo de configuração da BemaFI32.dll). Para isso, abra o arquivo, localize esta chave e mude o seu valor para 1 (StatusFuncao=1). Esta chave tem como objetivo retornar o valor -27 (menos vinte e sete) a cada função chamada na dll, sempre que a impressora possuir alguma informação de status diferente de zero. 

    Clique no link para baixar a rotina de tratamento do retorno em Delphi ou Visual Basic, das funções VerificaRetornoFuncaoImpressora e VerificaRetornoFuncaoImpressoraMFD, citadas nos exemplos abaixo. 

    - Exemplo em Delphi 


    iRetorno := Bematech_FI_AbreCupom( ” );
    if ( iRetorno <> 1 ) or ( iRetorno = -27 ) then
       VerificaRetornoFuncaoImpressoraMFD( iRetorno );

    ou

    iRetorno := Bematech_FI_AbreCupom( ” );
    if ( iRetorno <> 1 ) or ( iRetorno = -27 ) then
       VerificaRetornoFuncaoImpressora( iRetorno );

     

    - Exemplo em Visual Basic 


    iRetorno = Bematech_FI_AbreCupom(“”)
    If (iRetorno <> 1) Or (iRetorno = -27) Then
       VerificaRetornoFuncaoImpressora (iRetorno)
    Else

     

     ou

     


    iRetorno = Bematech_FI_AbreCupom(“”)
    If (iRetorno <> 1) Or (iRetorno = -27) Then
       VerificaRetornoFuncaoImpressoraMFD (iRetorno)
    Else

    Forte abraço e boas implementações,

    André Luiz R. Munhoz
    Engenharia de Desenvolvimento – P&D
    Bematech S/A

     

Nenhum Comentário

Deixe um comentário