Business - Automação Comercial

Explorando a MFD nas impressoras fiscais Bematech

Muitos nos questionam sobre a usabilidade das impressoras fiscais com tecnologia MFD, de como capturar um determinado cupom emitido há dias na impressora, sendo que neste modelo de impressora não há segunda via impressa, ou em atender as legislações vigentes de software aproveitando os recursos da impressora e etc.

por André Luiz R. Munhoz



Muitos nos questionam sobre a usabilidade das impressoras fiscais com tecnologia MFD, de como capturar um determinado cupom emitido há dias na impressora, sendo que neste modelo de impressora não há segunda via impressa, ou em atender as legislações vigentes de software aproveitando os recursos da impressora e etc.

Então, estamos preparando uma série de Flash Tips, aonde iremos conhecer as principais vantagens e recursos de se utilizar uma impressora fiscal com tecnologia MFD da Bematech, e de como tudo isso pode nos ajudar em nosso dia a dia no desenvolvimento.

Vamos lá!

Recuperando cupons

Todos nós sabemos que as impressoras com MFD (Memória de Fita-Detalhe) não possuem segunda via, referente aos cupons, impressa (aquela cópia da primeira via que ficava rebobinada nas impressoras fiscais matriciais, lembra?). Com isso se tornou difícil conferir ou confrontar os cupons emitidos no dia com as informações armazenadas em banco, certo? Por exemplo, na RZ impressa no final do dia aparece um valor de cancelamento que não está no banco de dados, então você desenrolava a segunda via rebobinada e examinava cada cupom impresso para saber se ocorreu um erro no sistema ou se o "bendito" cancelamento foi realizado fora do sistema (não era mais ou menos isso que você fazia?). Isso sim, era um procedimento chato e demorado de fazer. ;)

Com a tecnologia MFD você consegue capturar facilmente um determinado cupom, o movimento do dia inteiro, do mês inteiro ou até mesmo todo o movimento contido na impressora desde quando ela foi colocada em produção.

Nas impressoras fiscais térmicas MFD Bematech todo este processo é muito simples, fácil e rápido, através da BemaFI32.dll Windows, utilitários em Linux ou via protocolo direto.

Vamos conhecer cada ferramenta e como utilizá-las na aplicação.

BemaFI32.dll

Através da dll de altonível BemaFI32.dll precisamos de apenas duas funções: a Bematech_FI_DownloadMFD para realizar o download da MFD e a Bematech_FI_FormatoDadosMFD para transformar o download em texto.

Veja como usá-las:

  • em VB 6

(...)
iRetorno = Bematech_FI_DownloadMFD("C:\DOWNLOAD.MFD", "2", "000010", "000100", "1")
(...)

  • em Delphi

(...)
cArquivo := "C:\DOWNLOAD.MFD";
cTipoDownload := "2";
cCOOInicial := "000010";
cCOOFinal := "000100";
cUsuario := "1";
iRetorno := Bematech_FI_DownloadMFD( pchar( cArquivo ), pchar( cTipoDownload ), pchar( cCOOInicial ), pchar( cCOOFinal ), pchar( cUsuario ) );
(...)

Nestes exemplos, usamos como parâmetros: um nome de arquivo MFD, o tipo de download por COO, o COO inicial, o COO final e o número do usuário da impressora. Estamos fazendo um download do intervalo de cupons compreendido entre o cupom 10 e o cupom 100. Se precisássemos de apenas um cupom, bastaria informar o número dele no COO inicial e final.

Depois do download da MFD realizado, podemos facilmente convertê-lo para o formato texto e visualizar os documentos emitidos naquele intervalo, através da função Bematech_FI_FormatoDadosMFD, veja:

  • em VB 6

(...)
iRetorno = Bematech_FI_FormatoDadosMFD("C:\DOWNLOAD.MFD", "C:\IMAGEM.TXT", "0", "2", "000010", "000100", "1")
(...)

  • em Delphi

(...)
cArquivoOrigem := "C:\DOWNLOAD.MFD";
cArquivoDestino := "C:\IMAGEM.TXT";
cTipoFormato := "0";
cTipoDownload := "2";
cCOOInicial := "000010";
cCOOFinal := "000100";
cUsuario := "1";

iRetorno := Bematech_FI_FormatoDadosMFD( pchar( cArquivoOrigem ), pchar( cArquivoDestino ), pchar( cTipoFormato ), pchar( cTipoDownload ), pchar( cCOOInicial ), pchar( cCOOFinal ), pchar( cUsuario ) );
(...)

Repare que os parâmetros são basicamente os mesmos usados na função de download da MFD, apenas com o acréscimo dos parâmetros "cArquivoDestino" e "cTipoFormato" que correspondem ao caminho+nome do arquivo de saída e o formato para texto, respectivamente.

Este procedimento de conversão é necessário, devido ao fato da MFD da impressora estar compactada e criptografada, assim assegurando os dados contidos nela.

O fantástico de tudo isso, é que esta pequena rotina pode ser aplicada à geração do arquivo "Espelho MFD", atendendo a um dos requisitos do PAF-ECF!

LinuxMFD e BemaMFD / BemaMFD2

Em ambiente Linux, temos dois aplicativos que nos auxiliam no processo de download e conversão para texto da MFD da impressora.

Utilizando o LinuxMFD, fazemos o download da MFD da impressora, assim:

./linuxmfd /dev/ttyS0 download.mfd 2 000010 000100 1

E, após ter capturada a MFD, podemos convertê-la para texto, assim:

./bemamfd2 imagem.txt download.mfd 2 000010 000100 1

No aplicativo LinuxMFD, temos os seguintes parâmetros:

a) Porta serial onde a impressora esta conectada. Ex: /dev/ttyS0
b) Arquivo a ser gerado. Ex: download.mfd
c) Tipo de download:
0 - download MFD total
1 - download MFD por data
2 - download MFD por COO
3 - download MF
d) Parametro Inicial: Data inicial (DDMMAA) ou COO inicial (com ate 6 digitos).
e) Parametro Final : Data final (DDMMAA) ou COO final (com ate 6 digitos).
f) Número de ordem do proprietário do ECF com ate 3 digitos. (obrigatório se o tipo de download for por
COO).

No aplicativo BemaMFD2, temos estes parâmetros:

a) Nome do arquivo texto de saída.
b) Nome do arquivo contendo o download da MFD da impressora.
c) Tipo de processamento a ser feito:
0 - Total
1 - Por Datas
2 - Por COO
3 - AC17/04 - MF Total
4 - AC17/04 - MF Por Datas
5 - AC17/04 - MF Por COO
6 - AC17/04 - MFD Total
7 - AC17/04 - MFD Por Datas
8 - AC17/04 - MFD Por COO
9 - AC17/04 - TDM Total
10 - AC17/04 - TDM Por Datas
11 - AC17/04 - TDM Por COO
d) Data (DDMMAA) ou COO inicial (máximo 6 dígitos).
e) Data (DDMMAA) ou COO final (máximo 6 dígitos)
f) Número de ordem do proprietário do ECF com ate 3 dígitos. (obrigatório se o tipo de download for por
COO).

Repare que podemos gerar também o "Arquivo MFD" no formato do Ato Cotepe 17/04 (MF, MFD ou TDM), conforme exigido no PAF-ECF.

Protocolo Direto

A impressora fiscal térmica MFD Bematech possui também um comando para a geração do espelho MFD direto da impressora. Neste caso, não necessitamos realizar a captura da MFD para posteriormente efetuar a conversão para texto, o próprio comando já processa estas duas tarefas. Vamos ver como fica:

O comando é 1Bh + 3Eh + 45h ou chr(27) + chr(62) + chr(69) para o formato decimal e seus parâmetros são:

Par1 no tamanho de 1 byte: "D"para intervalo de data ou qualquer outro caracter para intervalo de COO;

Se o Par1 for "D":

Par2 no tamanho de 2 bytes com o dia inicial;
Par3 no tamanho de 2 bytes com o mês inicial;
Par4 no tamanho de 2 bytes com o ano inicial;
Par5 no tamanho de 2 bytes com o dia final;
Par6 no tamanho de 2 bytes com o mês final e;
Par7 no tamanho de 2 bytes com o ano final.

Se o Par1 for diferente de "D":

Par2 no tamanho de 6 bytes com o COO inicial;
Par3 no tamanho de 6 bytes com o COO final e;
Par4 no tamanho de 3 bytes com o número do usuário.

O retorno do espelho da MFD virá assim:

3 ou 5 bytes com o status da impressora (ACK, ST1, ST2 e ST3 (dois bytes)), seguidos da imagem dos documentos no formato ASCII e terminando com ETX (03h). Neste caso, a dica é ficar em um loop até que receba o byte ETX que corresponde ao final da transmissão, tendo assim todos os documentos emitidos no intervalo solicitado.

Sintegra a partir da MFD

Outro recurso interessante, é a geração dos registros do Sintegra diretamente da MFD da impressora. Através de uma única função da BemaFI32.dll, é possível gerar os registros do Sintegra pertinentes ao ECF, como os registros 60M (Mestre), 60A (Analítico), 60D (Diário), 60I (Item), 60R (Resumo Mensal) e 75, além dos registros 10, 11 e 90. Basicamente, o Sintegra completo!

Vejamos a simplicidade que é:

  • em VB 6

(...)
iRetorno = Bematech_FI_RelatorioSintegraMFD(63, "SINTEGRA.TXT", "10", "2009", "Empresa S/A", "Rua Sem Nome", "123", "Complemento", "Bairro", "Cidade", "12345678", "99 9999-9999", "11 1111-1111", "Fulano de Tal" )
(...)

  • em Delphi

(...)
cArquivo := "SINTEGRA.TXT";
cMes := "10";
cAno := "2009";
cRazaoSocial := "Empresa S/A";
cEndereco := "Rua Sem Nome";
cNumero := "123";
cComplemento := "Complemento";
cBairro := "Bairro";
cCidade := "Cidade";
cCEP := "12345678";
cTelefone := "99 9999-9999";
cFax := "11 1111-1111";
cContato := "Fulano de Tal";

iRetorno := Bematech_FI_RelatorioSintegraMFD( 63, pchar( cArquivo ), pchar( cMes ), pchar( cAno ), pchar( cRazaoSocial ), pchar( cEndereco ), pchar( cNumero ), pchar( cComplemento ), pchar( cBairro ), pchar( cCidade ), pchar( cCEP ), pchar( cTelefone ), pchar( cFax ), pchar( cContato ) );
(...)

E, os parâmetros que temos, são:

Par1 no tamanho de 1 byte com a somatória dos registros que se deseja gerar, onde:
1: gera o relatório tipo 60M (Mestre);
2: gera o relatório tipo 60A (Analítico);
4: gera o relatório tipo 60D (Diário);
8: gera o relatório tipo 60I (Item);
16: gera o relatório tipo 60R (Resumo Mensal) e;
32: gera o relatório tipo 75.

Exemplo: Se desejarmos gerar somente os registros tipo 60M, 60A e 75, o Par1 deve possuir o valor 35.

Par2 com o caminho+nome do arquivo de destino no formato TXT. Exemplo: "C:\SINTEGRA.TXT";
Par3 no tamanho de 2 bytes com o mês, no formato "MM";
Par4 no tamanho de 4 bytes com o ano, no formato "AAAA";
Par5 no tamanho de 35 bytes com a razão social do cliente;
Par6 no tamanho de 34 bytes com o endereço do cliente;
Par7 no tamanho de 5 bytes com o número do endereço do cliente;
Par8 no tamanho de 22 bytes com o complemento;
Par9 no tamanho de 15 bytes com o bairro;
Par10 no tamanho de 30 bytes com a cidade;
Par11 no tamanho de 8 bytes com o CEP;
Par12 no tamanho de 12 bytes com o telefone;
Par13 no tamanho de 10 bytes com o número do FAX e;
Par14 no tamanho de 18 bytes com o nome de contato do cliente.

Abaixo temos a imagem de um arquivo do Sintegra gerado pela função Bematech_FI_RelatorioSintegraMFD:

André Luiz R. Munhoz

André Luiz R. Munhoz - Bematech: DSP - Desenvolvimento de Software e Parcerias.
Visite o site: http://www.bematech.com.br.