Ir para conteúdo
  • Cadastre-se

dev botao

Erro ao imprimir com acbrposprinter1 - tratamento de excessão ?


rogercon
  • Este tópico foi criado há 2350 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Boa Noite,
Utilizando o componente acbrposprinter1, ao tentar imprimir caso a impressora não tenha sido encontrada a aplicação trava e congela.
Existe alguma forma de tratar esta excessão ?
reparei que no evento do componente possui algumas coisas mas no demo não tem nada....

O erro também ocorreu utilizando o demo.

obrigado
Link para o comentário
Compartilhar em outros sites

  • Membros
1 hora atrás, rogercon disse:
Boa Noite,
Utilizando o componente acbrposprinter1, ao tentar imprimir caso a impressora não tenha sido encontrada a aplicação trava e congela.
Existe alguma forma de tratar esta excessão ?
reparei que no evento do componente possui algumas coisas mas no demo não tem nada....

O erro também ocorreu utilizando o demo.

obrigado

A impressora é serial ?

Ja tentou colocar em um try ?
 

// Exemplo
try
  ACBrPosPrinter1.Ativar;
except
  ShowMessage('Erro na comunicação com a impressora');
end;

 

Equipe ACBr Sérgio Assunção
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

[email protected]

Link para o comentário
Compartilhar em outros sites

Quando a impressora está off-line por algum motivo(cabo desconectado, drive não instalado ou porta com incorreta), realmente não entra no except, já tentei...


        try
        frmprincipal.ACBrPosPrinter1.imprimir(mimp.text);
        except
        on E: EInOutError do
        begin
        mostrarmensagem('Erro de comunicação com a impressora.','Erro de comunicação com a impressora. '+e.message+#13+'Classe: '+e.classname,'ERRO');
        end;

        on e: Exception do
       begin
       showmessage('ERRO AO IMPRIMIR');
       END;

 

 


        end;
 

Editado por rogercon
Link para o comentário
Compartilhar em outros sites

  • Membros
17 minutos atrás, rogercon disse:

Tentei. Nao entrou no except e continua congelando a aplicação.

Veja se ajuda ...

Data: 06/10/2017
-- ACBrPosPrinter --
[+] Adicionada a propriedade: "VerificarImpressora: Boolean default False"
    Quando "True", o ACBrPosPrinter usará o método "LerStatusImpressora",  a cada
    execução do método "Imprimir", e interpretará as respostas da Impressora,
    emitindo erros no caso de "Tampa Aberta, Sem Papel, OffLine, Erro".
    IMPORTANTE: A leitura de Status da impressora, somente funciona em Portas
                Seriais ou TCP


 

Equipe ACBr Sérgio Assunção
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

[email protected]

Link para o comentário
Compartilhar em outros sites

  • Membros
6 minutos atrás, rogercon disse:

ainda não resolveu, coloquei verificarimpressora True.


Tem algo haver eu estar passando CONTROLEPORTA:= TRUE ?

Qual é a forma de comunicação da sua impressora ? Tente fazer o controle de porta manualmente (ativar antes da impressão e desativar após a impressão) e veja se consegue chegar no exception quando ativar o componente.

Equipe ACBr Sérgio Assunção
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

[email protected]

Link para o comentário
Compartilhar em outros sites

Bom, funcionou em partes, pelo que entendi é o seguinte,  

tenho uma bematech mp 4200 instalada e funcionando na porta COM11 

Se eu passar acbrposprinter1.porta:='COM11' daí entra no except em caso de algum erro, ou senão imprime normalmente.

mas se eu passar acbrposprinter1.porta:='MP-4200 TH' daí não entra no except em caso de algum erro, ou senão imprime normalmente.

1 - se a mp-4200 th estiver em estado de erro, é ai que não entra no except
2 - se ela estiver online, imprime normal

 
    ACBrPosPrinter1.Modelo := ppEscBematech;
    ACBrPosPrinter1.Porta  := 'MP-4200 TH';
    acbrposprinter1.ControlePorta:=false;
    acbrposprinter1.VerificarImpressora:=true;
    mimp := TMemo.Create(nil);
    mimp.parent := self;
    mimp.visible := false;
    mimp.lines.add('</zera>');
    mimp.lines.add('teste');
    mimp.lines.add('teste');
    mimp.lines.add('teste');
    mimp.lines.add('</corte_total>');
    try
      frmprincipal.acbrposprinter1.ativar;
    except
      showmessage('erro ao ativar');
    end;
    frmprincipal.ACBrPosPrinter1.imprimir(mimp.text);
    frmprincipal.acbrposprinter1.desativar;
    freeandnil(mimp);
Link para o comentário
Compartilhar em outros sites

  • Moderadores

Fez o teste? pois lembro das ECF e as bematech tinha um problema com portas muito altas.

e é provável que eles não refizeram do zero para criar as mini impressoras.

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

Refiz o teste com a impressora na com4.

1 - se chamar pelo nome da porta ou qualquer outro nome consigo entrar no except e/ou imprimir.

 

2 - agora, se eu chamar pelo nome do driver da impressora instalada no windows dai ocorrem duas situacoes:

A - se a impressora estiver online imprime normalmente.

B - se a impressora estiver em estado de erro daí não entra no exception

Parece algo haver com o nome do driver ja em uso ou algo assim.

 

 

Link para o comentário
Compartilhar em outros sites

  • Membros
6 horas atrás, rogercon disse:

Refiz o teste com a impressora na com4.

1 - se chamar pelo nome da porta ou qualquer outro nome consigo entrar no except e/ou imprimir.

2 - agora, se eu chamar pelo nome do driver da impressora instalada no windows dai ocorrem duas situacoes:

A - se a impressora estiver online imprime normalmente.

B - se a impressora estiver em estado de erro daí não entra no exception

Parece algo haver com o nome do driver ja em uso ou algo assim.

Se você usar o nome ou mesmo o compartilhamento, o documento vai para a fila de impressão e realmente não vai tratar o status da impressora.

Se a comunicação for feita diretamente com a serial, ai sim é possível tratar o status.

Equipe ACBr Sérgio Assunção
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

[email protected]

Link para o comentário
Compartilhar em outros sites

Ok então a solução é usarmos sempre direto o nome da porta. Assim teremos o tratamento. Ok. Blza. Se não tem jeito paciência. Mas uma dúvida me surgiu...

 

E no caso da impressora epson tm t20 por exemplo? Pois ela nao cria uma com né, e sim uma usb001, ou usb002 etc...

 

Dá certo chamar a impressão usando usb001 ?

Link para o comentário
Compartilhar em outros sites

Sérgio, já entendi, ficou claro, temos que nos adaptar.... blza...


Mas eu te pergunto,  se o spooler da impressora estiver com erro, e de dentro da aplicação você tenta imprimir, simplesmente trava a aplicação, não adianta try except em lugar algum, não deveria ter um tratamento para isso ? o cliente final não tem culpa se a impressora x é na porta com emulada, ou se é direto na porta, ou se é via spooler, o que não pode é travar a aplicação.....


 

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2350 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.