Business - Automação Comercial
Agilizando a busca no retorno de status da Impressora Fiscal Bematech
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)...
por André Luiz R. MunhozSabemos 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).
Analisar este retorno é
fundamental, pois é através dele que sabemos se o comando enviado foi executado
com sucesso ou não.
Antes do desenvolvimento da rotina que fará a busca
deste retorno, vamos entender um pouco mais sobre estes bytes.
-
"ACK" indica que o comando enviado à impressora foi recebido com sucesso
e que irá processá-lo. O seu valor é 6 (seis), tanto decimal quanto
hexadecimal.
- "NACK" indica que o comando enviado à impressora
não foi recebido com sucesso, que seu protocolo (seqüência de bytes do comando)
não está correto. 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, como:
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, como:
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).
- "ST3" informa o
terceiro quadro de status da impressora. Disponível apenas nas
impressoras do Convênio ICMS 85/01 (MP-25 FI, MP-50 FI, MP-2000 TH FI e MP-6000
TH FI), este byte define com maior precisão o status da impressora.
Vamos
visualizar alguns valores de retorno deste byte, pois teremos todos na rotina
que iremos desenvolver:
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, iremos continuar com as operações normalmente.
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 estaremos
analisando.
Se a impressora possuir informações de status, seu
retorno será "ACK" = 6, "ST1" <> 0, "ST2" <> 0 e "ST3" <> 0.
Neste caso, estaremos analisando.
Observação: Caso deseje
trabalhar com o retorno do byte ST3 nas impressoras MP-25 FI, MP-50 FI, MP-2000
TH FI e MP-6000 TH FI, 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.
Veremos a rotina
em Delphi e Visual Basic. Em anexo, a função
VerificaRetornoFuncaoImpressora e
VerificaRetornoFuncaoImpressoraMFD.
- Exemplo em Delphi
... |
- Exemplo em Visual Basic
... |
Boas implementações!
- DarumaFramework.SO no LinuxAutomação Comercial
- Palavra de status da impressora na DarumaFrameworkAutomação Comercial
- TEF – Comprovante de Crédito ou DébitoAutomação Comercial
- Comunicar com equipamentos Daruma em linguagens 16bits e DOSAutomação Comercial
- Verificando Redução Z nas Impressoras DarumaAutomação Comercial