Caso não consiga ver as imagens deste e-mail, clique aqui.

Olá escovadores de bits, o tema de hoje será a interpretação do Status da Impressora Fiscal Daruma. Quem nunca precisou do status da impressora fiscal para verificar se o papel acabou ou não? Ou então para verificar se a Redução Z está pendente ou se já foi emitida hoje? Quem nunca passou por isso na hora do desenvolvimento? Todos nós já passamos por isso. Um PDV sem o status da impressora é como um mágico sem baralho, ou seja, não existe.

Para muitos parceiros, interpretar o status é coisa de outro mundo, um processo difícil e trabalhoso. O objetivo principal deste escovando bits é mostrar que não tem nada difícil e como SUPER bônus, vamos conhecer uma maneira alternativa de obter o status da impressora. Vamos lá developers!!

“...Daruma Social Developer, o que é o status da impressora fiscal?”

  • É uma maneira simples de você “perguntar” para a impressora fiscal o que está acontecendo com ela. Você pergunta com um comando e ela te devolve 14 caracteres de resposta. Estes 14 caracteres podem nos dizer mais de 80 status diferentes. Exemplos de status: Em MIT ( ligado com o jumper aberto ), MF presente, MFDE ausente, MF esgotada ou em erro irrecuperável, MF não inicializada, Já emitiu RZ não pendente hoje, entre vários outros.
  • Viram só como é importante saber interpretar o status da impressora?! Desta maneira, vocês vão conseguir controlar e informar tudo que acontece na ECF.
  • Clique aqui para visualizar o esquema de Status da Máquina

“...Como obter o Status da impressora fiscal Daruma?”

  • Vamos à prática!
  • Usaremos o executável em Delphi para mostrar como obter o status da impressora fiscal. Clique aqui para download do Delphi.
  • Após o download, extraia o pacote e abra a pasta “DarumaFramework_Delphi7exe”.
  • Execute o “DarumaFramework_Delphi.exe”.
  • Uma janela foi aberta, clique em “Impressoras Fiscal”.
    Veja o exemplo:
  • Clique no menu “Retornos e Status do ECF”.
    Veja o exemplo:
  • Uma nova janela foi aberta, clique no menu “Métodos Status” -> submenu “Método rStatusImpressora_ECF_Daruma”.
    Veja o exemplo:
  • O método foi executado! O status será mostrado na tela.
    Veja o exemplo:
  • O status retornado foi: 0020B08000C100. Grave esta sequência, pois vamos usá-la.
    Observação: Se o status que você receber for diferente, não se preocupe a ideia do escovando bits é fazer com que qualquer status seja interpretado. Então use o seu status mesmo!
  • Clique em “OK” e uma nova mensagem de retorno será mostrada na tela.
    Veja o exemplo:
  • Status recebido, etapa concluída!

“...Como codifico o status do ECF em meu sistema?”

  • Simples! Apenas um comando irá nos retornar o status da impressora fiscal. Acompanhem:

Delphi

//Declarações

function rStatusImpressora_ECF_Daruma(pszStatus:string): Integer; StdCall; External 'DarumaFramework.dll';

//Chamada de Método

Str_Status := StringOfChar(#0,14); <esquerda>iRetorno := rStatusImpressora_ECF_Daruma(Str_Status);

C#

//Declarações

[DllImport("DarumaFrameWork.dll")]

public static extern int rStatusImpressora_ECF_Daruma(StringBuilder pszStatus);

//Chamada de Método

StringBuilder Str_Status = new StringBuilder();

iRetorno = rStatusImpressora_ECF_Daruma(Str_Status);

Visual Basic 6

//Declarações

Public Declare Function rStatusImpressora_ECF_Daruma Lib "DarumaFrameWork.dll" (ByVal pszStatus As String) As Integer

//Chamada de Método

Str_Status = Space(14)

iRetorno = rStatusImpressora_ECF_Daruma(Str_Status)

VB.Net

//Declarações

<DllImport("DarumaFrameWork.dll")> _

Public Shared Function rStatusImpressora_ECF_Daruma(ByVal pszStatus As StringBuilder) As Integer

End Function

//Chamada de Método Retornar Valor Imposto

Dim Str_Status As New StringBuilder(14)

iRetorno = rStatusImpressora_ECF_Daruma(Str_Status)

Java

//Importações

import br.com.daruma.jna.ECF;

//Chamada de Método

char[] Str_Status = new char[14];

iRetorno = ECF.rStatusImpressora(Str_Status);

PHP

//Declarações

function rStatusImpressora_ECF_Daruma($status){};

//Chamada de Método

$retorno = rStatusImpressora_ECF_Daruma($status);

“...Já sei obter e codificar o status. Agora me explica como interpretar o status?”

  • Claro, vamos começar agora a interpretar o status.
  • Nós já temos um status de teste obtido na primeira etapa, lembram?! O status obtido foi 0020B08000C100.
  • O primeiro passo é saber que todo status obtido terá 14 caracteres, vamos apelidar cada posição retornada. Sendo S1 para posição 1, S2 para posição 2, S3 para posição 3 e assim por diante.
    Vejam como ficou:
    S1 = 0
    S2 = 0
    S3 = 2
    S4 = 0
    S5 = B
    S6 = 0
    S7 = 8
    S8 = 0
    S9 = 0
    S10 = 0
    S11 = C
    S12 = 1
    S13 = 0
    S14 = 0A etapa seguinte é vocês terem em mãos a tabela com todos os status da ECF. A tabela está disponível aqui.
  • A etapa seguinte é vocês terem em mãos a tabela com todos os status da ECF.
    Clique aqui para visualizar a tabela
  • Notem que a tabela tem os mesmos 14 “S”( S1, S2, S3, etc) que nosso status tem. Outro ponto importante que devemos observar é que cada S tem 4 B’s. Isso mesmo, 4 B’s, sendo B0, B1, B2 e B3.
    Vejam um exemplo:

  • Isso significa que o S1 vai me dizer 4 informações diferentes.
  • Vamos interpretar o S1! O valor de S1 foi 0 certo?! Então considere todos os valores de “B” como 0.
    S1 = 0 ficou desta maneira:
            B1 = Modo Fiscal
            B2 = Jumper Fechado
            B3 = MF presente
            B4 = MFDE presente

  • Pronto! Status interpretado. Muito simples.
  • S2 também teve o valor 0, adotem a mesma regra de usar todos os valores de “B” como 0.
    S2 = 0 ficou desta maneira:
            B1 = MF disponível
            B2 = MFDE disponível
            B3 = MF inicializada
            B4 = MFDE inicializada

  • Agora a interpretação vai mudar um pouco, pois o valor de S3 é 2. Adote os valores para “B”:
            B3 = 8
            B2 = 4
            B1 = 2
            B0 = 1

  • O status S3 é igual a 2 certo?! Então procurem na tabela de “B’s” qual tem o valor = 2. O resultado é B1, pois B1 tem o valor 2.
  • Como o valor do status foi 2 e o valor de B1 é 2, nós não precisamos mais de outro “B”, pois o valor do status já foi “preenchido”.
  • Abaixo está a tabela de status da posição 3, ou seja, tabela do S3.
    Vejam:

  • Apenas B1 terá o status 1, pois só usamos ele para “preencher” o status. Isso quer dizer que adotamos 0 para B0, B2 e B3.
  • Já podemos interpretar o status S3.
    S3 = 2 ficou desta maneira:
            B3 =Usuário programado
            B2 = Tabela de decodificação de GT programada
            B1 = Algum documento emitido após a última RZ.
            B0 = Dia fiscal não aberto.

  • S4 tem o valor 0, então é mais simples de interpretar. Adote todos os valores 0 para “B”.
    S4 = 0 ficou desta maneira:
            B3 = Ainda não emitiu RZ hoje( com dia fiscal aberto)
            B2 = Não há RZ pendente
            B1 = Near End não detectado
            B0 = Bobina de papel presente

    Veja a tabela do status S4:

  • S5 teve o status “B”. O status “B” significa que o valor retornado foi 11, B em hexadecimal é 11. Não confunda este B com a tabela de B(B0, B1, B2 e B3).
    Importante: todo vez que você receber um status com letra, transforme-o para hexadecimal e continue com a interpretação.
    HexaDecimal Decimal
    A 10
    B 11
    C 12
    D 13
    E 14
    F 15
  • Já sabemos que S5 tem o valor 12. Então devemos somar os “B’s” até chegar no valor 12, ou seja, vamos usar B3 e B2( 8 + 4) para que este status seja “preenchido”. Desta forma B3 e B2 assumem o status 1.
    Veja a tabela de Status S5:
  • Agora vamos interpretar S5.

    S5 = 12 ficou desta maneira:
            B3 = Gaveta aberta
            B2 = Formulário Selecionado
            B1 = cheque presente
            B0 = Documento presente

  • Agora vocês já sabem todas as situações que poderão pegar em uma interpretação de status. A interpretação de S6 até S14 será mostrada abaixo.            
    Veja como ficou:
    Valor retornado Interpretação de Status
    S6 0 B3 = Algum caracter presente no buffer de comunicação B2 = Porta serial do Fisco livre B1 = ECF On Line B0 = Fim de impressão
    S7 8 B3 = Guilhotina obstruída B2 = Em operação B1 = Nenhum documento aberto B0 = Energia OK
    S8 0 B3 = Papel carregado(bobina) B2 = Documento posicionado B1 = Cheque posicionado B0 = Não há cheque/documento obstruido
    S9 0 B3 = ECF Operacional B2 = ECF ativo B1 = Sem impendimento para entrar em MIT B0 = Tampa fechada
    S10 0 Sem status pois o valor retornado é zero
    S11 C B2 = Módulo Impressor OK
    S12 1 B0 = Iniciação concluída
    S13 0 Sem status pois o valor retornado é zero
    S14 0 Sem status pois o valor retornado é zero
  • Notem que alguns “S” não tem status interpretados. Isso acontece pois a impressora não tem um status quando é retornado o valor 0. Fiquem tranquilos quanto a isso.
  • Interpretação concluída!!! Agora nós sabemos como interpretar todos os status da impressora fiscal.

“...Daruma Social Developer, existe outra maneira de ter os status da impressora fiscal?”

  • Existe sim, o método chama-se rStatusImpressoraBinario_ECF_Daruma. Vamos conhecê-lo melhor agora.
  • Execute novamente o “DarumaFramework_Delphi.exe”.
  • Uma janela foi aberta, clique em “Impressoras Fiscal”.
    Veja o exemplo:
  • Clique no menu “Retornos e Status do ECF”.
    Veja o exemplo:
  • Uma nova janela foi aberta, clique no menu “Métodos Status” -> submenu “Método rStatusImpressoraBinario_ECF_Daruma”.
    Veja o exemplo:
  • Após a execução do método, você receberá uma mensagem de retorno com o status da ECF em binário.
    Veja o exemplo:
  • Clique em “OK” na resposta do comando. Você receberá uma nova mensagem, desta vez é o retorno do método.
    Veja o exemplo:
  • Método executado, status obtido. O status que recebemos foi: 000000101100000000.
    Observação: Se o status binário que você receber for diferente, não se preocupe a ideia do escovando bits é fazer com que qualquer status seja interpretado. Então use o seu status binário mesmo!

“...Qual a diferença do status impressora com o status impressora binário?”

  • O status ECF retorna 14 caracteres e pode-se obter mais de 80 status. Você precisa interpretar o status impressora, como já fizemos acima.
  • O status ECF Binário retorna 18 caracteres e pode-se obter 36 status. A interpretação do status binário já foi feita pela DarumaFramework(internamente), você só precisa usar esta interpretação.

“...Como interpreto o status impressora binário?”

  • A interpretação do status impressora binário é mais simples que o status impressora, porém é limitada, pois você não vai conseguir obter os mais de 80 status que o status ECF permite. Uma vantagem do status binário é que os principais status estão nele.
  • O primeiro passo é conhecer tudo que se pode obter com os 18 caracteres que nós temos em “mãos”.
    Veja:
  • Agora vamos interpretar! O status binário que nós recebemos da ECF foi este 000000101100000000. -
  • A primeira posição tem o valor 0 isso significa que temos que olhar no “Indice 1” -> coluna “Retono 0” para sabermos o que ele quer dizer.
    Indice 1 -> Retorno 0 = Modo Fiscal - Simples certo?!
  • A segunda posição também retornou 0. Olhem no “Indice 2” -> coluna “Retorno 0” e interprete.
    Indice 2 -> Retono 0 = MF disponíve
  • Faça isso para as 18 posições e interprete o status completo. Lembre-se que nosso status binário foi 000000101100000000.
    Veja a interpretação completa do status binário 000000101100000000:
    Retornos
    Índice 1 0 = Modo Fiscal
    Índice 2 0 = MF Disponivel
    Índice 3 0 = MFDE Disponivel
    Índice 4 0 = Dia fiscal não aberto
    Índice 5 0 = Ainda não emitiu RZ hoje
    Índice 6 0 = Não há RZ pendente
    Índice 7 1 = Near End detectado
    Índice 8 0 = Bobina de papel presente
    Índice 9 1 = Gaveta aberta
    Índice 10 1 = Não há cheque posicionado
    Índice 11 0 = ECF On Line
    Índice 12 0 = Nenhum documento aberto
    Índice 13 0 = Papel carregado
    Índice 14 0 = Documento posicionado
    Índice 15 0 = Cheque posicionado
    Índice 16 0 = Não há cheque/documento obstruido
    Índice 17 0 = Tampa fechada
    Índice 18 0 = Tampa de cabeça térmica fechada
  • Viram só como é simples interpretar o status?! Esse método será de grande ajuda para sua aplicação, use-o bastante.

“...Jóia!!! A última dúvida é: como codifico isso na minha aplicação?”

Acompanhem:

Delphi

//Declarações

function rStatusImpressoraBinario_ECF_Daruma(pszStatus:string): Integer; StdCall; External 'DarumaFramework.dll';

//Chamada de Método

Str_StatusBinario := StringOfChar(#0,18);

iRetorno := rStatusImpressoraBinario_ECF_Daruma(Str_StatusBinario);

C#

//Declarações

[DllImport("DarumaFrameWork.dll")]

public static extern int rStatusImpressoraBinario_ECF_Daruma(StringBuilder pszStatus);

//Chamada de Método

StringBuilder Str_StatusBinario = new StringBuilder();

iRetorno = rStatusImpressoraBinario_ECF_Daruma(Str_StatusBinario);

Visual Basic 6

//Declarações

Public Declare Function rStatusImpressoraBinario_ECF_Daruma Lib "DarumaFrameWork.dll" (ByVal pszStatus As String) As Integer

//Chamada de Método

Str_StatusBinario = Space(18)

iRetorno = rStatusImpressora_ECF_Daruma(Str_StatusBinario)

VB.Net

//Declarações

<DllImport("DarumaFrameWork.dll")> _

Public Shared Function rStatusImpressoraBinario_ECF_Daruma(ByVal pszStatus As StringBuilder) As Integer

End Function

//Chamada de Método Retornar Valor Imposto

Dim Str_StatusBinario As New StringBuilder(18)

iRetorno = rStatusImpressoraBinario_ECF_Daruma(Str_StatusBinario)

Java

//Importações

import br.com.daruma.jna.ECF;

//Chamada de Método

char[] Str_StatusBinario = new char[18];

iRetorno = ECF.rStatusImpressoraBinario(Str_StatusBinario);

PHP

//Declarações

function rStatusImpressoraBinario_ECF_Daruma($status){};

//Chamada de Método

$retorno = rStatusImpressoraBinario_ECF_Daruma($StatusBinario);

  • Etapas concluídas!! Espero que vocês façam um bom proveito deste escovando bits e que usem bastante o status ECF e status ECF binário.

Assistam nosso vídeo mostrando passo a passo como funciona o rStatusImpressora e rStatusImpressoraBinario.

Channel9

Se tiver alguma dúvida e/ou dificuldade, entre em contato com a nossa equipe de suporte ao desenvolvedor.

E-mails:
daruma.desenvolvedores@daruma.com.br
ddc.suporte@daruma.com.br

suporte.ddc@daruma.com.br
desenvolvedores.suporte@daruma.com.br
suporte.desenvolvedores@daruma.com.br
desenvolvedores.daruma@daruma.com.br
suporte@daruma.com.br
suporte.alexandre@daruma.com.br
claudenir@daruma.com.br
Skypes:
daruma.desenvolvedores
ddc_suporte_daruma
suporte_ddc_daruma
desenvolvedores_suporte_daruma
suporte_desenvolvedores_daruma
desenvolvedores_daruma
suporte_daruma
suporte_alexandre_daruma
claudenir_andrade
Desenvolvedores Daruma Twitter facebook Linkedln Youtube Google+