Implementação de impressora fiscal BemaTech [RESOLVIDO]
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
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
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 );
}
}
João Borges
Curtidas 0
Respostas
Roselito Silva
30/09/2013
João,
Imprima também o resultado de iRetorno a cada passo seu, para ver que código retornou.
GOSTEI 0
João Borges
30/09/2013
Desde ja quero agradecer a ajuda.
Coloquei dessa forma agora:
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
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 );
}
}
GOSTEI 0
Roselito Silva
30/09/2013
E a leituraX que você pediu foi executada?
GOSTEI 0
João Borges
30/09/2013
[quote="roselito"]E a leituraX que você pediu foi executada?
Como não sabia o que leituraX fazia, fui pesquisar no site da Bematech o leituraX.
http://www.bematech.com.br/suporte/tutorial/index.html?leitura_x.htm
E vi que ele não executou a LeituraX.
A impressora nem se mexeu....
A impressora esta ligada, conectada a rede, o programa da Bematech que esta instalado no meu pc, consegue localizar a impressora e enviar comandos para ela, porem o meu programa Java, quando executo, a impressora não da nem sinal de vida... não faz nada.
GOSTEI 0
João Borges
30/09/2013
[quote="joaoborgesbr"][quote="roselito"]E a leituraX que você pediu foi executada?
Como não sabia o que leituraX fazia, fui pesquisar no site da Bematech o leituraX.
http://www.bematech.com.br/suporte/tutorial/index.html?leitura_x.htm
E vi que ele não executou a LeituraX.
A impressora nem se mexeu....
A impressora esta ligada, conectada a rede, o programa da Bematech que esta instalado no meu pc, consegue localizar a impressora e enviar comandos para ela, porem o meu programa Java, quando executo, a impressora não da nem sinal de vida... não faz nada.
GOSTEI 0