Jump to content


- - - - -

Faq Bematech - Impressoras Fiscais!










1 resposta a este tópico

#1 Suporte Técnico Bematech

    Membro

  • Membros
  • PipPip
  • 46 posts
  • Estado:Paraná

Adicionado 18 February 2005 - 12:05 PM

Prezados Parceiros Desenvolvedores, como havíamos prometido, estou postando aqui uma novidade antes mesmo de sair em nosso site, é a atualização de nossa FAQ sobre Software!!!

Como não queremos transformar o forum em uma FAQ, afinal a idéia do forum é que desenvolvedores possam tirar dúvidas e não simplesmente postar posr postar, colocarei aqui todas as perguntas e respostas, o link direto em nossa página, para em breve, amanhã ou depois, é o seguinte:

http://www.bematech....vedores/faq.asp

Espero que esta FAQ ajude muitos desenvolvedores, mas, se mesmo assim haver dúvidas que não estejam documentadas, não hesitem em entrar em contato com a gente, teremos prazer em ajudá-los!!

1 - Como instalar a impressora fiscal?

A instalação de uma ECF Bematech é bastante simples, da parte física, basta conectar a impressora a rede elétrica e, no caso de um micro, ligá-la a uma porta Serial RS-232 válida, já no caso de um SmartBox basta tê-la à rede elétrica e conectada ao SmartBox.

Do ponto de vista de software, ela dependerá do software de automação, sendo que existem as seguintes formas de comunicação:

Utilizando a DLL Bematech (BEMAFI32.DLL, para programas Windows 32 bits).
Utilizando Executável DOS (Bemafi.exe, para programas em DOS);
Utilizando Driver Remoto (Bematech Monitor - Para sistemas operacionais Windows em ambiente Terminal Server ou Frame Relay);
Utilizando as Bibliotecas para Unix (SCO, AIX e HP-UX);
Utilizando a Biblioteca ou Executável para Linux (lib300FI e Bemafilx);

Veja qual opção se encaixa melhor para o seu desenvolvimento e entre no site da Bematech (http://www.bematech.com.br) na área de Suporte, Manuais, Drivers e Downloads, Impressoras Fiscais.


2 - Como Adicionar / Programar Alíquotas Tributárias?

Para o ECF Bematech, o cadastramento é rápido e fácil, havendo 2 maneiras de fazê-lo:

1) Através de Software de Demonstração Fiscal da Bematech (DFI2.EXE ou DFI.EXE);
2) Através de Software de Automação;

Para o 1º Caso:

Acesse a opção DEMONSTRAÇÃO;

Após a opção COMANDOS DE INICIALIZAÇÃO;


Acesse a opção ADICIONA ALÍQUOTA TRIBUTÁRIA;

O programa irá solicitar o valor da alíquota (ex.:1700);


O programa irá Solicitar se a Alíquota é para ISSQN? Se for pressione a tecla "S" (para sim) ou "N" (para não); Caso seja selecionado "N" a impressora cadastrará uma alíquota de ICMS.



Para o 2º Caso:

Utilizando DLL BEMAFI32:

iRetorno = Bematech_FI_ProgramaAliquota("1700",1)


Utilizando o Bemafi.exe:

chr(27) + chr(251) + "07|" + valor da alíquota com 4 bytes + "|" + tipo (0 ou 1) com 1 byte + chr(27).

Utilizando Comunicação Direta Decimal:

sBuffer := chr( 2 ) + chr( 6 ) + chr( 0 ) + chr( 27 ) + chr( 1 ) + chr( 32 ) + chr( 82 ) + chr( 142 ) + chr( 0 )










3 - Como trabalhar com alíquotas de Isenção, Substituição Tributária e Não Incidência?

As alíquotas de Isenção, Substituição e Não incidência vêm como padrão nos ECFs Bematech, ou seja, não será usada para venda a alíquota de 00,00%.

Abaixo os índices destas alíquotas:

- II (Isenção ICMS)
- FF (Substituição Tributária ICMS)
- NN (Não Incidência ICMS)
- SI (Isenção ISSQN)
- SF (Substituição Tributária ISSQN)
- SN (Não Incidência ISSQN)


4 - Como imprimir um cupom (completo) na impressora fiscal?

Com a biblioteca Bemafi32.dll é muito fácil imprimir, um cupom e, para auxiliar no entendimento, na explicação abaixo serão suprimidos as chamadas de funções de retorno de Status, mesmo assim esta é uma função imprescindível a um software de automação:

Com a Dll Bemafi32.dll:

Abre Cupom:
Bematech_FI_AbreCupom("")

Vende Item:
Bematech_FI_VendeItem( sCodigo, sDescricao, sAliquota, sTPQtde, sQtde, sCasDec, sValUnit, sTPDesc, sValDesc)

Inicia Fechamento:
Bematech_FI_IniciaFechamentoCupom( sAcrDesc, sTPAcrDesc, sValAcrDesc)

Efetua forma de Pagamento:
Bematech_FI_EfetuaFormaPagamento( sForPgto , sValPgto)

Termina Fechamento:
Bematech_FI_TerminaFechamentoCupom( sMsgPro)

OBS1.: Os exemplos acima são não seguem uma padronização de linguagem, logo poderão haver divergências dependo da linguagem usada devido a sintaxe;
OBS2.: A variáveis acima são ilustrativas, podendo ter quaisquer nomes, porém seus tamanhos devem ser:

sCodigo: STRING até 13 caracteres;
sDescricao: STRING até 29 caracteres;
sAliquota: STRING com o valor ou o índice, se for o valor deve ser informado com o tamanho de 4 caracteres ou 5 com a vírgula. Se for o índice da alíquota deve ser 2 caracteres;
sTPQtde: 1 (um) caracter. I - Inteira e F – Fracionária;
sQtde: STRING com até 4 dígitos para quantidade inteira e 7 dígitos para quantidade fracionária;
sCasDec: INTEIRO indicando o número de casas decimais para o valor unitário (2 ou 3);
sValUnit: STRING até 8 dígitos;
sTPDesc: 1 (um) caracter indicando a forma do desconto. '$' desconto por valor e '%' desconto percentual;
sValDesc: STRING com até 8 dígitos para desconto por valor (2 casas decimais) e 4 dígitos para desconto percentual;
sAcrDesc: 1 (um) caracter indicando se Acréscimo ou Desconto. 'A' para acréscimo e 'D' para desconto;
sTPAcrDesc: 1 (um) caracter indicando a forma do Acréscimo ou desconto. '$' desconto por valor e '%' desconto percentual;
sValAcrDesc: STRING com no máximo 14 dígitos para acréscimo ou desconto por valor e 4 dígitos para acréscimo ou desconto por percentual;

sForPgto: STRING com no máximo 16 caracteres;
sValPgto: STRING com até 14 caracteres;

sMsgPro: STRING com até 384 caracteres (8 linhas X 48 colunas), para a impressora fiscal MP-20 FI II, e 320 caracteres (8 linhas X 40 colunas), para a impressora fiscal MP-40 FI II.

Com o Bemafi.exe:

Abre Cupom:
chr(27) + chr(251) + "00|" + chr(27)

Vende Item:
chr(27) + chr(251) + "09| sCodigo | sDescricao | sIndAliq | sQtde | sValUnit | sValDesc |" + chr(27)

Inicia Fechamento:
chr(27) + chr(251) + "32| sAcrDesc | sValAcrDesc |" + chr(27)

Efetua Forma de Pagamento:
chr(27) + chr(251) + "72| sIndForPgto | sValPgto |" + chr(27)

Termina Fechamento:
chr(27) + chr(251) + "34| sMsgPro |" + chr(27)

OBS1.: Os exemplos acima são não seguem uma padronização de linguagem, logo poderão haver divergências dependo da linguagem usada devido a sintaxe;
OBS2.: A variáveis acima são ilustrativas, podendo ter quaisquer nomes, porém seus tamanhos devem ser:

sCodigo: ASCII com 13 Bytes;
sDescricao: ASCII com 29 Bytes;
sIndAliq: ASCII, índice da Alíquota com 2 Bytes;
sQtde: ASCII com 4 Bytes para quantidade inteira e 7 Bytes para quantidade fracionária;
sValUnit: ASCII com 8 Bytes;
sValDesc: ASCII com 8 Bytes para desconto por valor (2 casas decimais) e 4 Bytes para desconto percentual;
sAcrDesc: 1 (um) Byte indicando se Acréscimo ou Desconto. 'A' para acréscimo e 'D' para desconto em percentual e ‘a’ para Acréscimo e ‘d’ para desconto em Valor;
sValAcrDesc: ASCII com 14 Bytes para acréscimo ou desconto por valor e 4 Bytes para acréscimo ou desconto por percentual;

sIndForPgto: ASCII com 16 Bytes;
sValPgto: ASCII com 14 Bytes;

sMsgPro: ASCII com até 384 Bytes (8 linhas X 48 colunas), para a impressora fiscal MP-20 FI II, e 320 caracteres (8 linhas X 40 colunas), para a impressora fiscal MP-40 FI II.

Com Comunicação Direta Decimal:

Abre Cupom:
sBuffer := chr( 2 ) + chr( 4 ) + chr( 0 ) + chr( 27 ) + chr( 0 ) + CSL + CSH

Vende Item:
sBuffer := chr( 27 ) + chr( 9 ) + sCodigo + sDescricao + sIndAliq + sQtde +
sValUnit + sValDesc + CSL + CSH

Inicia Fechamento:
sBuffer := chr( 27 ) + chr( 32 ) + sAcrDesc + sValAcrDesc + CSL + CSH

Efetua Forma de Pagamento:
sBuffer := chr( 27 ) + chr( 72 ) + sIndForPgto + sValPgto + CSL + CSH

Termina Fechamento:
sBuffer := chr( 27 ) + chr( 34 ) + sMsg + CSL + CSH

OBS1: Os exemplos acima são não seguem uma padronização de linguagem, logo poderão haver divergências dependo da linguagem usada devido a sintaxe;
OBS2: A variáveis acima são ilustrativas, podendo ter quaisquer nomes, porém seus tamanhos devem ser:
OBS3: As variáveis CSL e CSH representam o Check Sum Baixo e Check Sum Alto, maiores informações na dúvida sobre: Como trabalhar com Comunicação Direta;

sCodigo: ASCII com 13 Bytes;
sDescricao: ASCII com 29 Bytes;
sIndAliq: ASCII, índice da Alíquota com 2 Bytes;
sQtde: ASCII com 4 Bytes para quantidade inteira e 7 Bytes para quantidade fracionária;
sValUnit: ASCII com 8 Bytes;
sValDesc: ASCII com 8 Bytes para desconto por valor (2 casas decimais) e 4 Bytes para desconto percentual;

sAcrDesc: 1 (um) Byte indicando se Acréscimo ou Desconto. 'A' para acréscimo e 'D' para desconto em percentual e ‘a’ para Acréscimo e ‘d’ para desconto em Valor;
sValAcrDesc: ASCII com 14 Bytes para acréscimo ou desconto por valor e 4 Bytes para acréscimo ou desconto por percentual;

sIndForPgto: ASCII com 16 Bytes;
sValPgto: ASCII com 14 Bytes;

sMsgPro: ASCII com até 384 Bytes (8 linhas X 48 colunas), para a impressora fiscal MP-20 FI II, e 320 caracteres (8 linhas X 40 colunas), para a impressora fiscal MP-40 FI II.



5 - Como resolver problemas de comunicação com o driver dos (mp20drv.exe)?

Esse problema ocorre devido à “sujeira” que é enviada pelo sistema operacional para a porta serial da máquina. Um teste simples para verificar se é realmente este o problema é inicializar em DOS puro e tentar carregar o driver. Se não proceder provavelmente haja algum outro tipo de problema comunicação: conflito, cabo, etc.

Caso o problema exista, siga os seguintes passos:

Acesse o painel de controle do windows;
Acesse o ícone Sistemas;
Clique na aba, Gerenciador de Dispositivos;
Localize a porta que esta utilizando a impressora e remova do sistema;
Após, ainda na arvore de dispositivos, clique o botão direito em "computador" e depois clique em propriedades;
Na próxima tela clique na aba "reservar recursos";
Marque "Pedido de Interrupção (IRQ)”, depois clique em adicionar;
Irá pedir um valor. Esse valor se refere-se ao IRQ da porta. Se sua impressora for trabalhar na COM1 reserve o valor 04, se for trabalhar na COM2 reserve o valor 03.

OBS.: Não carregue o arquivo mp20drv no autoexec.bat. Crie um arquivo .BAT no desktop (por exemplo) chamando o arquivo mp20drv e depois a sua aplicação. O Driver DOS MP20DRV não é mais atualizado pela Bematech, sendo assim, deve-se atualizar o sistema para o uso do BEMAFI.EXE.



6 - Como substituir o driver dos MP20DRV.EXE pelo BEMAFI.EXE (Clipper), utilizando a Biblioteca Bemafi.LIB?

Para fazer a substituição do driver dos MP20DRV pelo BEMAFI é muito simples. O que você deve fazer é substituir no seu código fonte todas as funções FOPEN, FWRITE, FREAD e FCLOSE por FOPEN_BEMA, FWRITE_BEMA, FREAD_BEMA e FCLOSE_BEMA.

Depois de substituído você compila o código e linka com a Lib (bemafi.lib).

Esse procedimento fará com que o seu software pare de utilizar o MP20DRV e passe a utilizar o BEMAFI.

Como linkar:
rtlink file nome_do_arquivo lib nome_da_lib

OBS.: Os arquivo bemafi.exe e bemafi.ini (não esqueça de configurar a porta) devem estar junto no diretório da aplicação.


7 - Como utilizar o Bemafi.exe?

A utilização do Bemafi.exe é muito simples: A aplicação deverá gerar um arquivo (padrão "bemafi.cmd") com os comandos da impressora fiscal. Após esse arquivo gerado, deve ser chamado o arquivo Bemafi.exe. Por sua fez o Bemafi.exe irá enviar o conteúdo do arquivo para a impressora fiscal e em seguida gerar os arquivos de retorno (status.txt e retorno.txt).

OBS: Antes de utilizar você deve configurar o arquivo "Bemafi.ini" para selecionar em qual porta serial a impressora esta conectada, modo de escrita desejado etc.


8 - Como fazer a abertura da porta serial ignorando o arquivo .ini (Bemafi32.dll)?

Para fazer a abertura da porta serial sem que a dll pegue diretamente no arquivo.ini, declare a seguinte função:

Em Visual Basic:

Public Declare Function Bematech_FI_AbrePortaSerial Lib "BEMAFI32.DLL" () As Integer

Em Delphi:

function Bematech_FI_AbrePortaSerial: Integer; StdCall; External 'BEMAFI32.DLL';

Em Fox Pro:

DECLARE INTEGER Bematech_FI_AbrePortaSerial IN BemaFI32.DLL

Em C#:

public static extern int Bematech_FI_AbrePortaSerial();
[DllImport("BemaFi32.dll")]

Utilize o seguinte comando para fazer o acesso a porta:

iRetorno = Bematech_FI_AbrePortaSerial()




9 - Como fazer TEF com a impressora fiscal (bemafi32.dll)?

Para fazer TEF com a impressora fiscal Bematech é muito fácil. O que você tem a fazer é apenas implementar no seu sistema as funções de TEF. Abaixo um exemplo de Cupom Fiscal e após o mesmo cupom só que com TEF (Programação em VB):

Cupom Fiscal normal (sem TEF).

Retorno = Bematech_FI_AbreCupom("")
Retorno = Bematech_FI_VendeItem("01", "Produto Teste", "II", "I", "4", 2, "0,25", "$", "0")
Retorno = Bematech_FI_IniciaFechamentoCupom("A", "$", "0")
Retorno = Bematech_FI_EfetuaFormaPagamento("Dinheiro", "1,50")
Retorno = Bematech_FI_TerminaFechamentoCupom("Obrigado pela Preferencia!")

Cupom Fiscal com TEF.

Retorno = Bematech_FI_AbreCupom("")
Retorno = Bematech_FI_VendeItem("01", "Produto Teste", "II", "I", "4", 2, "7,50", "$", "0")
Retorno = Bematech_FI_IniciaFechamentoCupom("A", "$", "0")
Retorno = Bematech_FI_EfetuaFormaPagamento("Cartão", "30,00")
Retorno = Bematech_FI_TerminaFechamentoCupom("Obrigado pela Preferencia!")
Retorno = Bematech_FI_AbreComprovanteNaoFiscalVinculado("Cartão","","")
Retorno = Bematech_FI_UsaComprovanteNaoFiscalVinculado ( 'Digite o texto a ser impresso aqui em até 420 caracteres!!!' )
Retorno = Bematech_FI_FechaComprovanteNaoFiscalVinculado()


OBS: O software deverá efetuar a comunicação com o gerenciador padrão das bandeiras instalados na máquina, lembrando também, que após o fechamento do cupom fiscal, haverá 2 minutos para a impressão completa do Cupom Não Fiscal Vinculado, e que o comando de Bematech_FI_UsaComprovanteNaoFiscalVinculado pode ser usado várias vezes com tamanho máximo de 420 bytes no parâmetro, porém a recomendação é impressão linha a linha.

10 - Gostaria de obter um roteiro para fazer TEF.

Para fazer tef você deve utilizar comandos ou funções das dll´s e também a comunicação entre o Software de Automação e o Gerenciador Padrão. Abaixo uma breve descrição de um roteiro de comandos utilizando a dll de auto-nível (BEMAFI32.DLL):

Para transação OK na operadora:

Abre Cupom;
Vende Item;
Inicia Fechamento Cupom;
Efetua Forma Pagamento;
Termina Fechamento;
Abre Comprovante Não Fiscal Vinculado;
Usa Comprovante Não Fiscal Vinculado, passando como parâmetro o texto de retorno das administradoras em no máximo 420 bytes;
Fecha Comprovante Não Fiscal Vinculado;

Para erro na transação na operadora:

Abre Cupom;
Vende Item;
Inicia Fechamento Cupom;
Efetua Forma Pagamento;
Termina Fechamento;
Relatório Gerencial;
Imprime Relatório com as informações de cancelamento;

OBS: Para cancelamento do cupom fiscal, você deverá fazer uma nota fiscal de entrada, pois como não é mais o último cupom fiscal emitido (vinculado ja foi impresso após o cupom fiscal), não é possível fazer o cancelamento. na impressora.

Para cancelamento da venda na operadora:

Abre Cupom;
Vende Item;
Inicia Fechamento Cupom;
Efetua Forma Pagamento;
Termina Fechamento;
Abre Comprovante Não Fiscal Vinculado;
Usa Comprovante Não Fiscal Vinculado;
Fecha Comprovante Não Fiscal Vinculado;






O cliente voltou e quer devolver:

Relatório Gerencial;
Imprime Relatório com as informações de cancelamento;

OBS: Para cancelamento do cupom fiscal, você deverá fazer uma nota fiscal de entrada, pois como não é mais o último cupom fiscal emitido (vinculado já foi impresso após o cupom fiscal), não é possível fazer o cancelamento na impressora.


11 - A impressora fiscal funciona em plataforma Linux? Como?

Sim. A impressora fiscal Bematech funciona perfeitamente em ambiente Linux, desde que o software de automação seja compatível com tal sistema. Para auxiliar o desenvolvimento a Bematech criou 2 formas para trabalhar, além da comunicação direta como descrito no manual do ECF:

Utilizar a Biblioteca LIB300FI;
Utilizar o driver BEMAFILX.OUT;
Através de Comunicação Direta *;

1) Para o uso das funções de alto nível, não é necessário conhecer os comandos (seqüência de escapes) da impressora fiscal.

O fluxo para o envio dos comandos e trabalho com a impressora fiscal, deve seguir a seguinte lógica:

Abrir a porta serial no inicio do aplicativo;
Envio dos comandos para a impressora;
Fechar a porta somente no término da execução do aplicativo.

2) Funções de alto nível e descritivo

Para a chamada das funções de alto nível deve-se seguir os seguintes critérios:

Todas as funções devolvem um valor diferente de zero caso não tenha conseguido enviar o comando para a impressora fiscal;
Todas as funções possuem o parâmetro &Retorno que é uma array (string) inteira de 3 posições para receber o status da impressora (int Retorno[3];). Esse parâmetro não será representado na documentação das funções; Nesta variável será colocada o ACK, ST1, ST2. Este parâmetro deve ser passado por referência e não por valor, na linguagem “C” utilize o caracter “&” para indicar esta modalidade de passagem de parâmetro;
Todas as funções que devolvem informações da impressora possuem o parâmetro VAR, variável para receber a informação solicitada.

2) O Driver BEMAFILX.OUT funciona da mesma forma que o BEMAFI.EXE (Plataforma Windows). Você irá fazer a aplicação gerar o arquivo (BEMAFILX.CMD) com os comandos para a impressora e chamar o BEMAFILX.OUT. Quando for executado ele automaticamente irá ler o arquivo de comandos e enviar os dados para a impressora, gerando os arquivos de retorno.

3) Veja o item de: “É possível trabalhar com Comunicação Direta? Como?” para sanar maiores dúvidas.

12 - Como saber se o dia esta aberto ou não? Como saber se Redução Z ja foi emitida ou não?

Existem duas formas de ser emitida a redução Z.

Automática.
Manual.

1. A automática será emitida às 02:00 da manhã, ou ao menos “engatilhada” caso o equipamento esteja desligado, se não a tiver sido feita manualmente, ou seja, se chegar no final do dia e desligar a impressora sem a emissão da Redução Z e ligá-la somente no dia seguinte, automaticamente sairá a Redução Z do movimento do dia Anterior;

2. A manual será emitida a qualquer momento que o usuário solicite via software de automação;

Depois dessas operações quando você for pegar a data do movimento, a data virá zerada (000000). Isso quer dizer que, a impressora já emitiu a redução Z e o dia atual ainda não está aberto.
Se desejar abrir o dia, você deverá imprimir uma Leitura X e um suprimento de caixa. Isso fará com que a impressora faça movimento no caixa, assim quando pegar a data do movimento, ela será igual a data atual.

Se desejar saber se a redução Z já foi emitida, existe o comando de flags fiscais, cujo se o bit 3 (retorno = 8) vir setado, significa que a redução Z ja foi emitida para o dia corrente.

13 - Informações sobre Redução Z para o estado de Santa Catarina (Versão 3.25).

Para as impressoras fiscais em Santa Catarina a redução Z deixa de ser automática e passa a ser controlada pelo sistema, ou seja, agora toda a responsabilidade é do desenvolvedor para que o comando esteja implementado no sistema e após repassar o procedimento ao usuário.

Aconselhamos que a redução Z seja tirada sempre ao final do expediente, como já é comum nos estabelecimentos o fechamento do dia (emissão de relatórios diversos), recomendamos que a redução Z seja implementada dentro destas rotinas, o motivo é para que se tenha a data da redução Z igual a data do movimento evitando assim futuras complicações com os livros fiscais.

Estabelecimentos que funcionam 24hrs aconselhasse que a redução Z seja tirada de 5 e 3 minutos antes da virada do dia lembrando que a impressora ficará bloqueada neste curto período de tempo. Em caso de esquecimento do usuário aconselhamos a criação de um “flag” no sistema para verificar se a redução Z foi tirada no dia anterior ou não caso haja falha nos procedimentos acima citados.

No “flag” coloque a data da ultima redução para comparar com a data do ultimo movimento para saber se deve efetuar a emissão da redução Z ou não.


14 - Restrições do fisco de Santa Catarina. (Versão 3.25)

Para aqueles que possuírem aplicativos instalados com as impressoras fiscais no estado de Santa Catarina, preste muita atenção neste Informativo.

O Fisco de Santa Catarina proíbe o desconto na venda do Item com alíquota de ISSQN, por exemplo: Se vender, apenas um item dentro do Cupom Fiscal, com uma alíquota de ISSQN, são duas as condições que o Fisco proíbe:

1) Desconto no item;

- Para quem estiver usando o Bemafi.exe

chr(27) + chr(251) + "09|0000000000001|Teste de Vende de Item ISS |03|0001|00001000|1000|" + chr(27)


- Para quem estiver usando a DLL de Alto-nível BEMAFI32.DLL

iRetorno = Bematech_FI_VendeItem("123","Caneta","0500","I","10",2,"10,00","%","1000")

Onde: 1000, corresponde à um desconto de 10,00%. Deverá ser informado 0000 (00,00%)


2) Desconto no Subtotal do Cupom.

- Para quem estiver usando o Bemafi.exe

chr(27) + chr(251) + "32|D|1000|" + chr(27) ou chr(27) + chr(251) + "32|d|00000000000100|" + chr(27)

- Para quem estiver usando a DLL de Alto-nível BEMAFI32.DLL

iRetorno = Bematech_FI_IniciaFechamentoCupom("D","%","1000") ou Bematech_FI_IniciaFechamentoCupom("D","$","100")

Deve ser informado "A", para Acréscimo Percentual, com o valor "0000" ou "a" para Acréscimo por Valor, com o valor "00000000000000".

A impressora retornará "Tipo de Parâmetro Inválido", caso seja informado o parâmetro "D" ou "d" (Desconto), ao invés de "A" ou "a" (Acréscimo), independente de seu valor.

Agora, se você vender um item de ISSQN, entre outros itens de ICMS, as condições acima são aceitas sem restrições.

15 - É possível trabalhar com a impressora fiscal utilizando a linguagem ASP? Como?

Para quem utiliza ASP recomendamos o uso do componente BEMAFISC.OCX, abaixo maiores informações sobre ele:

WINDOWS 98/ME

Copie os arquivos, BemaFI32.ini, BemaFI32.Dll e BemaFisc.ocx para o diretório \dir.Windows\system\;
Execute a arquivo Registrar.bat para que o componente seja registrado;
O arquivo Exemplo.htm demonstra como utilizar algumas das funções do componente.

WINDOWS NT/2K/XP

Copie os arquivos, BemaFI32.ini, BemaFI32.Dll e BemaFisc.ocx para o diretório \dir.Windows \system32\;
Execute a arquivo Registrar.bat para que o componente seja registrado;
O arquivo Exemplo.htm demonstra como utilizar algumas das funções do componente.

Salve os arquivos:

-> BematechMFD.dll

-> DAO2535.tlb

-> DAO350.dll

-> MSJET32.dll

No diretório de sistema de seu Windows. Se for Windows 95, 98 ou ME salve em "\dir.Windows \System". Se for Windows 2000, NT ou XP salve em "\dir.Windows \System32"

Caso você utilize a função Bematech_FI_RelatorioSintegraMFD, que gera os registros do Sintegra nas impressoras fiscais MFD MP-2000 TH FI e MP-6000 TH FI (somente), é necessário que os arquivos DAO350.DLL e MSJET35.DLL sejam registrados.

Para isso, execute:

REGSVR32 /S DAO350.DLL
REGSVR32 /S MSJET35.DLL

O arquivo BEMAFI32.CHM é o arquivo de ajuda da BEMAFI32.DLL. Basta dar um duplo-clique para abri-lo. Neste arquivo encontrará todas as explicações referente as funções da DLL, além de exemplos em Visual Basic e Delphi.

16 - É possível trabalhar com Comunicação Direta? Como?

Toda comunicação direta com a impressora fiscal Bematech segue um protocolo de comandos formado pela seguinte seqüência de bytes obrigatoriamente. STX (Start of Text (Início de Texto)), NBL (Número de Byte Baixo), NBH(Número de Byte Alto), CMD (Comando), CSL (Check Sum Baixo), CSH (Check Sum Alto).

Abaixo o detalhe de cada um destes bytes:

STX -> este é o protocolo de início de comando, o STX sempre será 02 nunca mudará, portanto não há maiores detalhes sobre sua sintaxe.

NBL -> O NBL sempre começa com 3 bytes que são o CMD o CSL e o CSH mais o acréscimo do Comando e dos Bytes de seus parametros, por exemplo, se for usado o comando para aumentar a descrição do item e for passar uma descrição com 50 bytes o comando NBL ficaria assim:

NBL = 3 + (1 Comando) + 50 Bytes ... ou seja NBL estará valendo 54 bytes, se você passar 200 bytes na descrição o comando ficará assim:

NBL = 3 + (1 Comando) + 200 Bytes ... o NBL ficará valendo 204 bytes;

Ou seja, sempre somasse os 3 bytes que valem o NBL mais o COMANDO e o total de BYTES dos parâmetros.

NBH -> Caso o NBL ultrapasse o valor de 256 deve-se fazer o seguinte, dividir o valor total por 256 a parte inteira será o NBH e o resto da divisão será o NBL. Por exemplo, NBL possui o valor de 300, divida 300 por 256 que dará na parte inteira 1, para achar o resto, deve-se multiplicar 1 por 256 que dará 256 e diminuir 300 de 256 que resultará 44 que será o NBH.

CMD -> Aqui será passado o comando a ser enviado, mais os parâmetros. Em decimal, a sintaxe ficaria assim para abertura do cupom fiscal.

CMD = chr(27) + chr(0) + chr(57) + chr(57) + chr(57) + chr(46) + chr(57) + chr(57) + chr(57) + chr(46) + chr(57) + chr(57) + chr(57) + chr(45) + chr(57) + chr(57) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(0)

Será impressa a abertura do cupom, mais o CGC/CPF do consumidor com a seguinte descrição: 999.999.999.-99, ou seja, o decimal de 57 é o caractere 9 o decimal de 46 é o caractere e assim por diante, notamos que todo o caractere que queiramos mandar para a impressora terá que ser passado em decimal.

CSL -> É a soma de todos os decimais passados pelo CMD, ou seja, deve-se somar um à um ex.: 27 + 0 + 57 + 57 ... o valor total será o CSL .

CSH -> Caso o CSL ultrapasse o valor de 256, deve-se fazer o seguinte: Dividir o valor total por 256 a parte inteira será o CSH e o resto da divisão será o CSL. Obs.: TODOS OS PARAMETROS DEVEM SER PASSADOS EM DECIMAL. Abaixo um exemplo de como fazer a abertura do cupom fiscal imprimindo o CGC/CPF com a seguinte descrição 999.999.999-99.

comando:= chr(2) + chr(34) + chr(0) + chr(27) + chr(0) + chr(57) + chr(57) + chr(57) + chr(46) + chr(57) + chr(57) + chr(57) + chr(46) + chr(57) + chr(57) + chr(57) + chr(45) + chr(57) + chr(57) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(0) + chr(247) + chr(4)

Exemplos:

Abertura de Cupom -> para abertura cupom com impressão de CGC/CPF:

comando:= chr(2) + chr(34) + chr(0) + chr(27) + chr(0) + chr(57) + chr(57) + chr(57) + chr(46) + chr(57) + chr(57) + chr(57) + chr(46) + chr(57) + chr(57) + chr(57) + chr(45) + chr(57) + chr(57) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(32) + chr(0) + chr(247) + chr(4)

Para item curto (Até 29 caracteres na Descrição):

comando:= chr(2) + chr(64) + chr(0) + chr(27) + chr(09) + chr(48) + chr(48) + chr(48) + chr(48) + chr(48) + chr(48) + chr(48) + chr(48) + chr(48) + chr(48) + chr(48) + chr(48) + chr(49) + chr(73) + chr(109) + chr(112) + chr(114) + chr(101) + chr(115) + chr(115) + chr(111) + chr(114) + chr(97) + chr(32) + chr(70) + chr(105) + chr(115) + chr(99) + chr(97)+ chr(108) + chr(32) + chr(77) + chr(80) + chr(45) + chr(50) + chr(48) + chr(32) + chr(70) + chr(73) + chr(32) + chr(73) + chr(70) + chr(70) + chr(48) + chr(48) + chr(48) + chr(49) + chr(48) + chr(48) + chr(48) + chr(48) + chr(56) + chr(53) + chr(48) + chr(48) + chr(48) + chr(49) + chr(48) + chr(48) + chr(48) + chr(116) + chr(15)

Para item longo:

comando = chr(2) + chr(55) + chr(0) + chr(27) + chr(62) + chr(52) + chr(73) + chr(109) + chr(112) + chr(114) + chr(101) + chr(115) + chr(115) + chr(111) + chr(114) + chr(97) + chr(32) + chr(70) + chr(105) + chr(115) + chr(99) + chr(97) + chr(108) + chr(32) + chr(66) + chr(101) + chr(109) + chr(97) + chr(116) + chr(101) + chr(99) + chr(104) + chr(32) + chr(77) + chr(80) + chr(45) + chr(50) + chr(48) + chr(32) + chr(70) + chr(73) + chr(32) + chr(73) + chr(73) +chr(73) +chr(32) + chr(118) + chr(101) + chr(114) + chr(115) + chr(97) + chr(111) + chr(32) + chr(51) + chr(46) + chr(49) + chr(49) + chr(156) + chr(16)

comando:= chr(2) + chr(64) + chr(0) + chr(27) + chr(09) + chr(48) + chr(48) + chr(48) + chr(48) + chr(48) + chr(48) + chr(48) + chr(48) + chr(48) + chr(48) + chr(48) + chr(48) + chr(49) + chr(73) + chr(109) + chr(112) + chr(114) + chr(101) + chr(115) + chr(115) + chr(111) + chr(114) + chr(97) + chr(32) + chr(70) + chr(105) + chr(115) + chr(99) + chr(97)+ chr(108) + chr(32) + chr(77) + chr(80) + chr(45) + chr(50) + chr(48) + chr(32) + chr(70) + chr(73) + chr(32) + chr(73) + chr(70) + chr(70) + chr(48) + chr(48) + chr(48) + chr(49) + chr(48) + chr(48) + chr(48) + chr(48) + chr(56) + chr(53) + chr(48) + chr(48) + chr(48) + chr(49) + chr(48) + chr(48) + chr(48) + chr(116) + chr(15)

Para leitura X:

comando:= chr(02) + chr(04) + chr(00) + chr(27) + chr(06) + chr(33) + chr(00)

Para redução Z:

comando:= chr(02) + chr(04) + chr(00) + ch(27) + chr(05) + chr(32) + chr(00)


17 - Para que serve os Totalizadores Não Fiscais?

A impressora fiscal Bematech possui a opção de utilizar totalizadores não fiscais para efetuar Recebimentos Não Fiscais como: contas de água, luz etc. Para isso é necessário NOMEAR um totalizador não fiscal através do comando ESC 40 (Bematech_FI_NomeiaTotalizadorNaoSujeitoICMS) e utilizar o totalizador no comando ESC 25 (Bematech_FI_RecebimentoNaoFiscal), outra função do comando 25 é a entrada de dinheiro ou qualquer outra forma de pagamento em caixa (SUPRIMENTO) através do índice SU e a saída de dinheiro (SANGRIA) através do índice SA. Lembrando que todos os totalizadores da impressora não são zerados após a Redução Z, ou seja, só podem ser excluídos ou alterados via Modo de Intervenção Técnica.

Caso seja necessário efetuar um controle dos valores de totalizadores pode-se utilizar 35|33 onde recebe 1550 bytes divididos da seguinte forma:

2 bytes correspondentes ao Contador Não Fiscal

10 bytes para cada recebimento com o valor acumulador e com 4 casas decimais.

19 bytes para cada recebimento e sua descrição


Lembrando que são 50 Totalizadores que a impressora permite cadastrar.


Para a biblioteca de alto-nível, Bemafi32.dll, pode-se usar o comando

Bematech_FI_VerificaTotalizadoresParciais, que trará um retorno da seguinte maneira:

- São retornadas as seguintes informações separadas por vírgulas:

Totalizadores parciais tributados..........: 224 bytes
Isenção....................................: 14 bytes
Não insidência.............................: 14 bytes
Substitução................................: 14 bytes
Totalizadores parciais não sujeitos ao ICMS: 126 bytes
Sangria....................................: 14 bytes
Suprimento.................................: 14 bytes
Grande Total...............................: 18 bytes



18 - É possível trabalhar com base de cálculo reduzida? Como?

Vários estabelecimentos comerciais que possuem impressora fiscal necessitam trabalhar com Base de Cálculo reduzida, o que é isso? como funciona?

Para entendermos bem isso e aplicar nas vendas realizadas no ECF (Mp20FIII e MP40FIII), partimos do princípio que todo produto tem uma base de calculo ou um valor XX,XX que é vendido ao consumidor e encima deste valor é cobrado o ICMS. A Base de cálculo reduzida é nada mais que a venda deste mesmo produto, com o mesmo valor para o cliente final, mas o imposto será calculado não encima do valor XX,XX que foi vendido ao cliente e sim com um percentual reduzido, que é estabelecido pela legislação local. Muito bem...então vamos a prática:

Como é o ciclo de venda na Impressora Fiscal? Da seguinte maneira:

1) Você Abre o Cupom Fiscal

2) Você Vende o item e na venda do item indica a alíquota e o valor e aqui entra o problema. \

Se você esta vendendo um item de R$100,00 com a alíquota de 18%, seu cliente pagará R$100,00 pelo produto e você repassa ao fisco R$18,00. A base de Calculo Utilizada foi de R$100,00, valor que você informa para o ECF Bematech. Agora vamos imaginar que este mesmo produto, por beneficio de legislação, teve a sua base de calculo reduzida em 10%, ou seja, você continuará vendendo o produto a R$100,00 mas os 18% não serão incididos sobre os R$100,00 reais e sim sobre R$90,00 ( (-) 10% ou seja encima de R$100,00. O Calculo então passa a ser de 18% encima de R$90,00 = R$16,20. Seu cliente continuará pagando R$100,00 pelo produto mas você repassará ao fisco apenas R$16,20 e não os R$18,00 iniciais. Mas como indicar isso para a impressora? porque se você indicar que o preço do produto é R$90,00 o Total do cupom será de R$90,00 e não de R$100,00.

Sendo assim, como continuar enviando o preço de R$100,00 mas indicar para a impressora que efetue o calculo do imposto na base de calculo no valor de R$90,00?

Para este tipo de produto em especial, você deverá cadastrar uma alíquota, que encima do valor cheio (R$100,00) seja destacado o imposto de R$16,20(valor encontrado aplicando 18% encima da base de calculo reduzida). Desta maneira, no cupom fiscal, aparecerá R$100,00 de total a pagar, mas apenas R$16,20 de imposto a pagar, porque este produto em especial goza de Base de Cálculo Reduzida. Sendo assim você deverá adicionar uma Alíquota de 16,20% e toda vez que efetuar uma venda deste produto, indique para a impressora que a alíquota a trabalhar é de 16,20%, pois este produto tem o beneficio de base de cálculo reduzida.

Para adicionar uma alíquota Utilize o comando 07 com o parâmetro de 4 dígitos, que é a alíquota (1620,1800,0500,etc) e mais um parâmetro de um digito valendo 0(zero) se a alíquota é de ICMS ou 1(Um) se a Alíquota é de ISS, se este ultimo parâmetro não é informado o default será sempre ICMS. Ou apenas chame a Função " Bematech_FI_ProgramaAliquota ( char * cAliquota, int iVinculo )" de nossa Dll de Alto Nível (bemafi32.dll) e indique a alíquota e se ela é ICMS OU ISS.

OBS: Se você ainda não usa esta dll, Não perca Tempo!!! Baixe agora mesmo em nosso Site (http://www.bematech....te/dwn_fisc.asp).


19 - Como emitir relatórios do Tipo 60?

Segundo o novo convênio 50/00 surge a necessidade do software aplicativo gerar dois tipos de relatórios de Frente de caixa: Relatório Tipo60 Mestre e Relatório Tipo60 Analítico.

Ambos relatórios se fazem necessário cruzar informações de vendas do dia anterior com o fechamento do dia fiscal em curso (que será encerrado), sendo assim, implementamos em nossa dll de Alto-nivel (BemaFi32.dll) funções que com apenas uma chamada, você terá este relatório pronto para ser tratado por seu software aplicativo e entregue ao fisco.

Para a Utilização de ambos, no começo do dia, no "StartUp" de seu software chame a função: Bematech_FI_AberturaDoDia (string Vr_Suprimento, string FormaPagamento)

E no Fechamento, ou seja, para emissão da Red. Z se software deverá chamar a função:

Bematech_FI_FechamentoDoDia ()

Esta Função Gravará no Arquivo INI os dados necessários para no final do Dia Gerar o Relatório Acima Especificado. Os Parâmetros acima indicam o Valor do Suprimento de Caixa no Começo do Dia e em qual forma de pagamento este suprimento será contabilizado, caso não deseje efetuar o suprimento, passe "0" e "" como Parâmetro.

Exemplo:

iRet = Bematech_FI_AberturaDoDia("100,00", "Dinheiro") ou

iRet = Bematech_FI_AberturaDoDia("0", "");


Bematech_FI_RelatorioTipo60Mestre( )

Bematech_FI_RelatorioTipo60Analitico( ); - Ambos Sem Parâmetros

Bematech_FI_RegistrosTipo60( );

Ambas as funções geram um relatório com os dados solicitados pelo Convênio, estará disponível no Arquivo "Retorno.txt" no Path especificado no Arquivo Bemafi32.Ini, para a criação deste tipo de retorno. Ambas devem obrigatoriamente ser chamadas após uma redução Z;

Caso a impressora realize uma redução Z automática no Dia seguinte, você poderá chamar as funções acima e estes relatórios também serão gerados.

20 - Em um Relatório Gerencial, posso emitir caracteres expandidos? Como?

Para impressões de caracteres, usando os modos (Expandido, Condensado, etc), deve-se usar os comandos de alteração do modo de impressão, que são:









sCmd := chr(27) + chr(251) + "20|\" + chr(27) + chr(14) + "IMPRESSORA FISCAL" + chr(13) + chr(10) + "\" + chr(27) + chr(15) + "TESTE IMPRESSORA FISCAL CARACTER EXPANDIDO" + chr(13) + chr(10) + "\" + chr(27) + chr(18) + "|" + chr(13) + chr(10) + chr(27)


21 - Existe emulador de impressora fiscal?

O emulador de impressoras fiscais está disponível no link abaixo, seu nome é, EmulFITH:

http://www.bematech....te/dwn_fisc.asp

Seu uso é bastante simples, porém existem 2 possibilidades de uso:

Através de Comunicação Serial;
Através de Comunicação Interna;

1) Para Comunicação Serial, será necessário o uso de um cabo de comunicação padrão DB09-DB09, ou DB25-DB09, ou DB25-DB25, onde poderá ser ligado o emulador no mesmo computador ou em computador diferente do que está o Software de Automação:

Aplicativo e Emulador no mesmo Computador:

Nesse caso o computador deverá ter duas portas seriais disponíveis, uma para a sua aplicação e outra para o emulador, onde:

- Configura-se a sua aplicação para enviar comandos pela COM1 (por exemplo) e o emulador para receber comando pela COM2 (por exemplo);

- Conecta-se o cabo serial, confeccionado de acordo com o tópico "Confeccionando o Cabo Serial", da COM1 para a COM2 (seguindo esse exemplo) e;

Observação: O emulador EmulFITH roda, somente, em ambiente Windows (conforme citado na Introdução).

Aplicativo e Emulador em Computadores diferentes:

Nesse caso os computadores podem ter disponível uma porta serial apenas. Em um computador deverá ser instalado o emulador EmulFITH e em outro computador a sua aplicação. Deve-se configurar corretamente as portas seriais dos dois softwares e conectar nas devidas portas seriais o cabo serial. Esse deve ser confeccionado de acordo com o tópico "Confeccionando o Cabo Serial".

Confeccionando o Cabo Serial:

O cabo de comunicação serial para o emulador deve possuir a seguinte configuração, conforme os conectores disponíveis no computador:





Se os dois conectores seriais forem do tipo DB9:



Se houver um conector serial do tipo DB9 e outro do tipo DB25:



Se os dois conectores seriais forem do tipo DB25:



OBS: O emulador persiste de algumas diferenças entre a impressora fiscal:

A velocidade de impressão do emulador é normalmente maior do que a da impressora;
Os comandos para impressão de códigos de barra e a impressão do PDF-417 da Redução Z não estão disponíveis no emulador e;
O tempo de retorno dos dados pela serial pode ser diferente da impressora;
Os comandos de Truncamento e Arredondamento e, Programação de Unidade de Medida não funcionarão, ou seja, será similar aos equipamentos do convênio de ICMS 85/2001 (MP2000TH FI, MP6000TH FI, MP25FI e MP50FI).

22 - Como colocar e remover a impressora do Horário de Verão?

O comando padrão para a entrada / saída do horário de verão é: ESC 18.

Quando se Ativa o horário de verão a impressora adianta 1 hora e quando retira a impressora atrasa 1 hora.

Envie os comandos abaixo para Ativar / Desativar.

Utilizando a BEMAFI32.DLL

Bematech_FI_ProgramaHorarioVerao()

Utilizando Bemafi.exe.

chr(27) + chr(251) + "18|" + chr(27)

OBS: Os comandos só serão executados após a Redução Z ou caso não tenha havido movimento no dia.
Para fazer a retirada do horário de verão, deve-se executar a redução Z e aguardar 1 hora (sem qualquer tipo de operação) para poder enviar o comandos de Horário de Verão.


23 - Como fazer para efetuar venda a prazo (fiado, parcelas)?

Cadastra-se um totalizador por ex.: RECEBIMENTO. PRAZO etc. (comando ESC 40).
Após cadastra-se uma forma de pagamento por ex. FIADO, VENDA A PRAZO etc. (comando ESC 71 ou ESC 73) .
Emite-se um cupom fiscal normalmente, sendo que o valor pago deve ser igual ao total do cupom, só que com o detalhe que a forma de pagamento informada para o valor a ser pago a prazo, deve ser diferente de dinheiro ou seja aquela escolhida na hora do cadastro da forma de pagamento (item 02). (comando ESC 72).
Em seguida à emissão do cupom deve-se emitir um comprovante não fiscal vinculado e no seu corpo deve-se emitir o texto das parcelas e o valor pendente solicitando a assinatura do cliente para confirmação da divida a ser quitada. (comando ESC 66).
Ao recebimento da conta pode-se emitir um comprovante não fiscal não vinculado como recibo de pagamento ao cliente. (comando ESC 25).


24 - Tem como saber se um Cupom Não Fiscal está aberto?

Não existe uma função ou comando que retorne se o cupom não fiscal esta aberto ou fechado.
O que você poderia fazer é colocar um flag no seu sistema, assim que abrir o comprovante não fiscal vinculado você seta para 1 o flag. Se for desligada a maquina e ligada novamente, ao iniciar a aplicação você irá verificar o flag, se estiver 1 é que o seu cupom não foi fechado corretamente, então você manda o comando para fechar o cupom e ignora o erro.

OBS: Por que ignorar o erro? Na verdade quando você emite um comprovante não fiscal vinculado, você tem 2 minutos para impressão. Se o seu sistema cair e demorar mais de 2 minutos para voltar a impressora irá fechar sozinha. Nesse momento se sua aplicação verificar que o flag está um e mandar fechar o cupom, o comando voltará como não executado, pois a impressora ja fechou sozinha.


25 - Como trabalhar com a impressora MP20 FI I Versão 2.12?

Foram criadas duas funções, para a versão 2.12:

Bematech_FI_EfetuaFormaPagamentoImpAntiga
Bematech_FI_ReducaoZImpAntiga

Elas possuem a mesma função das anteriores, com a condição de efetuar a forma de pagamento e imprimir o relatório gerencial, na versão 2.12. Estas foram as duas funções identificadas como "críticas", nas operações de cupom. Elas estão disponíveis na DLL que está no Site.

Abaixo está uma lista de funções que são incompatíveis com a impressora fiscal versão 2.12. Estas funções são, realmente incompatíveis pelo motivo do comando não existir na 2.12, são elas:

Bematech_FI_EspacoEntreLinhas
Bematech_FI_ForcaImpactoAgulhas
Bematech_FI_LinhasEntreCupons
Bematech_FI_NomeiaDepartamento
Bematech_FI_AumentaDescricaoItem
Bematech_FI_UsaUnidadeMedida
Bematech_FI_VendeItemDepartamento
Bematech_FI_EfetuaFormaPagamento
Bematech_FI_EfetuaFormaPagamentoDescricaoForma
Bematech_FI_FechaCupom
Bematech_FI_FechaCupomResumido
Bematech_FI_EstornoFormasPagamento
Bematech_FI_LeituraXSerial
Bematech_FI_AbreComprovanteNaoFiscalVinculado
Bematech_FI_UsaComprovanteNaoFiscalVinculado
Bematech_FI_FechaComprovanteNaoFiscalVinculado
Bematech_FI_ProgramaCaracterAutenticacao
Bematech_FI_DadosUltimaReducao
Bematech_FI_MonitoramentoPapel
Bematech_FI_VerificaDepartamentos
Bematech_FI_DadosSintegra
Bematech_FI_ImprimeDepartamentos
Bematech_FI_MapaResumo
Bematech_FI_RegistrosTipo60
Bematech_FI_RelatorioTipo60Analitico
Bematech_FI_RelatorioTipo60Mestre


26 – Como efetuar salto de linha na MP25FI e MP50FI quanto a Mensagem promocional e Comprovante Não Fiscal Vinculado?

Para os novos modelos de Impressoras fiscais, houve uma pequena alteração quanto ao envio de caracteres de controles de salto de linha, CR (Carriage Return: Caractere 13) e LF (Line Feed: Caracter 10), neste novos equipamentos não é aceito o envio de uma linha nula, ou seja, sem caractere algum e no seu final o 10 + 13, porém se houver um caractere mesmo que de espaço (Caractere 255), o problema não ocorrerá.

No intuito de facilitar o desenvolvimento, a biblioteca Bemafi32.dll a partir da versão 3.6.2.0 já irá compatibilizar o envio destes dados, evitando assim alterações nos softwares de automação.


27 - Como trabalhar com os retornos de uma ECF Bematech?

Antes de explicar como entender os retornos, vamos saber o porquê de sua necessidade:
Os ECFs Bematech se comunicam com o software de automação através de retornos previamente definidos em 3 Bytes denominados: ACK, ST1 e ST2 (mais abaixo a explicação para retorno estendido), aonde ACK é o Byte indicativo de recebimento Correto e ST1 e ST2 sendo Bytes de Estado da Impressora Fiscal.
Agora que sabemos o que cada byte significa, vamos descobrir como transformar estes retornos numéricos em algo mais significativo.
Primeiramente o ACK, este byte devolve se houve uma comunicação correta entre micro e impressora e deverá ser igual a 06, qualquer retorno diferente deste número indicará um recebimento errado, onde será necessário verificar a sua comunicação.
Para o ST1 e ST2, teremos uma pequena lista de retornos que segue abaixo, os retornos serão cumulativos, ou seja, pode-se receber um valor que necessite ser decomposto para saber todos os “status” da impressora (ex.: houve o Retorno 005 em ST2, o qual significará o Retorno 004 + 001, respectivamente Cancelamento Não Permitido e Comando Não Executado).




// Verificando o ST1

IF ST1 >= 128
MOSTRA ST1_BIT_7
ST1 = ST1 - 128
EndIf
If ST1 >= 64
MOSTRA ST1_BIT_6
ST1 = ST1 - 64
EndIf
If ST1 >= 32
MOSTRA ST1_BIT_5
ST1 = ST1 - 32
EndIf
If ST1 >= 16
MOSTRA ST1_BIT_4
ST1 = ST1 - 16
EndIf
If ST1 >= 8
MOSTRA ST1_BIT_3
ST1 = ST1 - 8
EndIf
If ST1 >= 4
MOSTRA ST1_BIT_2
ST1 = ST1 - 4
EndIf
If ST1 >= 2
MOSTRA ST1_BIT_1
ST1 = ST1 - 2
EndIf
If ST1 >= 1
MOSTRA ST1_BIT_0
ST1 = ST1 - 1
EndIf

// Verificando o ST2

IF ST2 >= 128
MOSTRA ST2_BIT_7
ST2 = ST2 - 128
EndIf
If ST2 >= 64
MOSTRA ST2_BIT_6
ST2 = ST2 - 64
EndIf
If ST2 >= 32
MOSTRA ST2_BIT_5
ST2 = ST2 - 32
EndIf
If ST2 >= 16
MOSTRA ST2_BIT_4
ST2 = ST2 - 16
EndIf
If ST2 >= 8
MOSTRA ST2_BIT_3
ST2 = ST2 - 8
EndIf
If ST2 >= 4
MOSTRA ST2_BIT_2
ST2 = ST2 - 4
EndIf
If ST2 >= 2
MOSTRA ST2_BIT_1
ST2 = ST2 - 2
EndIf
If ST2 >= 1
MOSTRA ST2_BIT_0
ST2 = ST2 - 1
EndIf
28 - Como trabalhar com os retornos ESTENDIDOS de uma ECF Bematech?

Para os equipamentos homologados no convênio de ICMS 85/2001 (MP2000TH FI, MP6000TH FI, MP25FI e MP50 FI) a Bematech implementou um novo SET de retornos que auxiliará muito aos desenvolvedores:

Agora, além de ACK, ST1 e ST2, a impressora retornará mais o STL e STH, que somando os seus valores chamaremos de ST3. Devido a lista de retornos em ST3 ser bastante extensa (atualmente 208 Retornos) a não postaremos na FAQ, mesmo assim, encontra-se disponível em respectivo manual disponível no link abaixo:

http://www.bematech....te/dwn_fisc.asp

Para receber os retornos estendidos deverá seguir algumas considerações:

· Utilizando a Biblioteca Bemafi32.DLL:

Deverá ser Habilitado o retorno estendido pelo comando Bematech_FI_HabilitaDesabilitaRetornoEstendidoMFD, passando um único parâmetro, onde 1 Habilita e 0 Desabilita.
Com o retorno Estendido Habilitado deve-se solicitar os retornos pelo comando Bematech_FI_ RetornoImpressoraMFD, passando 4 parâmetros – o ACK, ST1, ST2 e ST3.

iRetorno = Bematech_FI_HabilitaDesabilitaRetornoEstendidoMFD("1")

iRetorno = Bematech_FI_RetornoImpressoraMFD( ACK, ST1, ST2, ST3 )

OBS: Não esqueça que estes retornos só terão efeito caso a chave Impressora, da seção MFD, estiver ligada (Impressora=1). Isso define que a sua aplicação está utilizando uma impressora do novo convênio.

· Utilizando Comunicação Direta ou o Bemafi.exe:

Nesta situação deve apenas ser passado a impressora os comandos precedidos de 1C (Caractere 28) e não mais de 1B (Caractere 27), fazendo assim com que a ECF devolva o STL e STH.

COMUNICAÇÃO DIRETA:
sBuffer := chr( 2 ) + chr( 4 ) + chr( 0 ) + chr( 28 ) + chr( 0 ) + CSL + CSH

BEMAFI.EXE:
chr(28) + chr(251) + "00|" + chr(28)


29 - Como Agilizar o processo de análise do retorno da impressora (ACK, ST1 e ST2)?

Sabemos que é fundamental analisar o retorno de status da impressora fiscal para termos a certeza se a função, que foi utilizada pela aplicação, foi executada com sucesso ou não e para verificarmos em qual estado a impressora se encontra no exato momento desta execução. Ou seja, a cada função executada, como por exemplo, na abertura do cupom fiscal, venda dos itens, emissão de relatórios e etc, é importantíssimo ler o retorno da impressora, além de analisar o retorno da função que foi utilizada.

Mas para que você tenha uma maior velocidade nesta análise, existe um retorno de função chamado -27 (menos vinte e sete), informando que a impressora possui um status diferente de "OK" (ACK=6, ST1=0 e ST2=0), fazendo com que a aplicação entre na função que busca o retorno da impressora, somente quando a impressora realmente tiver algo para ser analisado. Por exemplo: se a impressora fiscal, ao executar a função enviada, retornar o seu status igual a 6,0,0, não será necessário utilizar a função de leitura deste status, mas se o retorno de seu status for diferente de 6,0,0, a função utilizada apresentará o retorno -27, avisando que a impressora possui alguma informação que deve ser analisada, fazendo-se assim a busca desta informação.

Exemplo:

.
.
.
iRetorno = Bematech_FI_AbreCupom("")
.
.
.
if iRetorno = -27
iRetorno = Bematech_FI_RetornoImpressora(ACK, ST1, ST2)
.
. (analisa o ACK, ST1 e ST2)
.
endif
.
.
.


OBS: Para ativar o retorno -27, nas funções da BemaFI32.dll, você deverá habilitá-lo no arquivo BemaFI32.ini. Neste arquivo existe uma chave chamada "StatusFuncao" que está configurada com 0 (zero), basta trocar este valor para 1 (um).

#2 cdnsolution

    Membro - Novato

  • Membros
  • Pip
  • 4 posts
  • Sexo:Masculino
  • Estado:Pará

Adicionado 12 June 2009 - 12:48 PM

nuuuuuuuuuuuss! era td q qria pra cmecar dsenvolver meu sistema :thumbsup:





1 usuário(s) esta(ão) lendo este tópico

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)