Implementação de impressora fiscal [Resolvido]

6 respostas
J

Sou iniciante em Java, e estou desenvolvendo um sistema para uma instituição de caridade.

Este sistema precisa fazer o cadastro de contribuintes (o que ja consegui fazer), e imprimir um recibo (não fiscal) simples, apenas com os dados do contribuinte e o valor que ele contribuiu. Temos aqui uma impressora fiscal “Bematech MP-4000 TH”.

Busquei no site da Bematech e la tem as ‘libs’ para conexao com a impressora, adicionei as dll´s na pasta do windows (system32), adicionei o JAR (Bematech.jar) no projeto utilizando o NetBeans, e crei a classe principal utilizando o exemplo do site da Bematech.

http://partners.bematech.com.br/suporte/bemafi32/java.htm

http://www.bematech.com.br/suporte/bemafi32/index.html?configuracao.htm

Porem, como disse, sou iniciante em java e não intendi muito bem, esse codigo sempre da o mesmo retorno, não importa o que eu faça ele não muda. Se impressora esta ligada ou desligada, em uso ou não, ele sempre retorna o seguinte:

run:
Retorno Impressora MFD:
ACK: 0
ST1: 0
ST2: 0
ST3: 0
CONSTRUÍDO COM SUCESSO (tempo total: 2 segundos)

Lembrando que essa impressora é ligada em rede, ela não possui conexao usb. o IP dela é 192.168.1.240 e a porta: 9100

package bematech;
import bemajava.*;


public class Principal {

public static void main(String[] args)
  {      

     int iRetorno;
     bemajava.BemaInteger ACK, ST1, ST2, ST3;
     ACK = new bemajava.BemaInteger();
     ST1 = new bemajava.BemaInteger();
     ST2 = new bemajava.BemaInteger();
     ST3 = new bemajava.BemaInteger();
               
     // Habilitando o retorno estendido da impressora MFD
     iRetorno = bemajava.Bematech.HabilitaDesabilitaRetornoEstendidoMFD( "1" );
 
     // Emitindo uma Leitura X
     iRetorno = bemajava.Bematech.LeituraX();
 
     // Pegando o retorno da impressora MFD
     iRetorno = bemajava.Bematech.RetornoImpressoraMFD( ACK, ST1, ST2, ST3 );

     String retorno = "ACK: " + ACK.number;
     retorno += "\nST1: " + ST1.number;
     retorno += "\nST2: " + ST2.number;
     retorno += "\nST3: " + ST3.number;
     System.out.println( "Retorno Impressora MFD: \n" + retorno );       
        

  } 

}

Sera que alguem poderia me dar uma luz?

Como obter um retorno desta impressora, se esta ligada, se esta em uso, etc… Vi que ela possui estes retornos, porem não faço a minima ideia de como utiliza-los.

Desde já agradeço.

João Borges

6 Respostas

R

João,

Mostre a cada passo o valor de iRetorno pra gente ver…

J

Roselito Fávero da Silva:
João,

Mostre a cada passo o valor de iRetorno pra gente ver…

Desde ja quero agradecer a ajuda.

Coloquei dessa forma agora:

package bematech;

public class Principal {

public static void main(String[] args)
  {
     int iRetorno;
     bemajava.BemaInteger ACK, ST1, ST2, ST3;

     ACK = new bemajava.BemaInteger();
     ST1 = new bemajava.BemaInteger();
     ST2 = new bemajava.BemaInteger();
     ST3 = new bemajava.BemaInteger();
     
     // Habilitando o retorno estendido da impressora MFD
     iRetorno = bemajava.Bematech.HabilitaDesabilitaRetornoEstendidoMFD( "1" );
     System.out.println( "Retorno linha 17: " + iRetorno );
     
     // Emitindo uma Leitura X
     iRetorno = bemajava.Bematech.LeituraX();
     System.out.println( "Retorno linha 21: " + iRetorno );
     
     // Pegando o retorno da impressora MFD
     iRetorno = bemajava.Bematech.RetornoImpressoraMFD( ACK, ST1, ST2, ST3 );
     System.out.println( "Retorno linha 25: " + iRetorno );
     
     String retorno = "ACK: " + ACK.number;
     retorno += "\nST1: " + ST1.number;
     retorno += "\nST2: " + ST2.number;
     retorno += "\nST3: " + ST3.number;
     System.out.println( "Retorno Impressora MFD: \n" + retorno );       
  }
}

O retorno foi:

run:
Retorno linha 17: 1
Retorno linha 21: 0
Retorno linha 25: 1
Retorno Impressora MFD:
ACK: 0
ST1: 0
ST2: 0
ST3: 0
CONSTRUÍDO COM SUCESSO (tempo total: 2 segundos)

Se alguem ja trabalhou com impressoras Bematech, existe algum comando para eu saber se o programa esta localizando ela mesmo? Porque ela esta em rede… dai não faço a minima ideia se o java achou ela, se esta se comunicando com ela, etc…

No arquivo BameFI32.ini que esta na pasta System32 esta configurando assim:

[Sistema]
Porta=DEFAULT
Path=C:
Status=0
Retorno=0
StatusFuncao=1
ControlePorta=1
ModeloImp=BEMATECH
ConfigRede=4
ModoGaveta=0
Log=0
LogDiario=0
CrLfVinculado=0
CrLfGerencial=0
TimeOutGerencial=40
EmulMFD=0
StatusCheque=
CalculoIcmsCupom=0
ForceWTSClient=1
RetriesWTSCmd=3
HabilitaRFDImpMFD=0
GerarRFD=0

[ModoRemoto]
IP=192.168.1.240
Porta=9100

R

E o Bematech monitor está rodando nessa sua máquina cliente?

J

Eu até tenho o Bematech monitor aqui, mas não estou rodando ele. Pelo que intendi o Bematech monitor serve para que eu envie os comandos para o arquivo Bemafi32.cmd e ele joga para impressora, o que eu preciso é saber como fazer para enviar os comandos direto para a impressora, porque aqui na empresa tem um programa em Delphi que faz isso diretamente.

é possivel atraves do Java ?

R

Parece que precisa do monitor para a sua configuração (4):

ConfigRede=
Identifica que modo será utilizada a DLL, onde o valor igual a:
0 (zero) - modo de utilização normal.

1 (um) - modo de utilização pelo servidor (Server), com uso do Bematech Monitor por troca de arquivo de comando BemaFI32.cmd.

2 (dois) - modo de utilização pelo terminal (Client), com uso do Bematech Monitor por troca de arquivo de comando BemaFI32.cmd.

4 (quatro) - modo de utilização pelo terminal (Client), com uso do Bematech Monitor por TCP/IP.

5 (cinco) - modo de utilização pelo servidor (Server), com uso do Bematech Monitor por TCP/IP.

J

Roselito Fávero da Silva:
Parece que precisa do monitor para a sua configuração (4):

ConfigRede=
Identifica que modo será utilizada a DLL, onde o valor igual a:
0 (zero) - modo de utilização normal.

1 (um) - modo de utilização pelo servidor (Server), com uso do Bematech Monitor por troca de arquivo de comando BemaFI32.cmd.

2 (dois) - modo de utilização pelo terminal (Client), com uso do Bematech Monitor por troca de arquivo de comando BemaFI32.cmd.

4 (quatro) - modo de utilização pelo terminal (Client), com uso do Bematech Monitor por TCP/IP.

5 (cinco) - modo de utilização pelo servidor (Server), com uso do Bematech Monitor por TCP/IP.

A todos os amigos do Forum que me ajudaram, quero agradecer.
Depois de MUITA luta, finalmente consegui conectar meu programa a impressora;

Instalei o “Bematech Virtual Serial Port” atraves do link abaixo:

Driver para porta serial virtual - MP-4000 TH.
http://partners.bematech.com.br/suporte-recursos/downloads/?did=144

Ele instalou uma porta COM5, nas configurações da porta em “Target Port Settings” coloquei como “Ethernet” e ai foi so colocar o IP e a Porta da impressora.

Utilizei o material do link abaixo. Utlizei a DLL MP2032.DLL.

Ai foi só colocar a porta COM5 na classe e finalmente, a impressora respondeu.

No link abaixo tem toda documentação da DLL

http://partners.bematech.com.br/suporte/mp2032/

Agora é só utilizar as classes do link acima.

Muito obrigado.

Criado 30 de setembro de 2013
Ultima resposta 1 de out. de 2013
Respostas 6
Participantes 2