Ir para conteúdo
  • Cadastre-se

dev botao

Parou de funcionar os acentos na Daruma DR800


Ver Solução Respondido por ROGERIO EDVAR DE SOUZA,
  • Este tópico foi criado há 2091 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Olá..

Desculpem a pergunta mas de ontem para hoje, na minha DARUMA DR800, pararam de funcionar os acentos.

Eu fiz o seguinte código que imprime 1 linha em todas pág de código

possíveis e o estranho é que imprime SEMPRE SEM ACENTO (antes, dependendo da pág.cód, saiam caracteres estranhos e se colocasse p1252 ficava perfeito)

Não sei se ACIDENTALMENTE alterei alguma propriedade do objeto ACBrPosPrinter ou ACBrECF, ...

 ... 

Segue o CÓDIGO 

 ACBrECF1.AbreRelatorioGerencial ;
   For V_X:=0 TO 6 do

  Begin

      ACBrPosPrinter1.PaginaDeCodigo := TACBrPosPaginaCodigo( V_X );
      ACBrECF1.LinhaRelatorioGerencial( IntToStr(V_X)+' // Linha 1/2 - Teste: áéíóú - ÁÉÍÓÚ - ç  Ç - à À' , 0);      
   End;

   //
   ACBrECF1.FechaRelatorio ;

...

Está saindo sempre sem acentos. Já voltei a configuração de fábrica da impressora DR800, de nada adiantou.

Também já mudei sua pág de código interna da DR800, também não adiantou.

Criei também um cód do zero colocando poucos componentes, e com pouquíssima linha de programação, não adiantou também...

 

Obrigado pelo auxílio ...

Postado

Consegui detalhar MUITO o problema ... quando puderem ajudar (pelo menos que uma DARUMA DR800 NÃO DEU DEFEITO ... rs)

...

Dúvida. 
Uma impressora DARUMA DR800 passou um "não obedecer" a uma mudança de código GERENCIAL.

Detalhes abaixo:
...
Erro:
Ao executar a linha:
ACBrECF1.LinhaRelatorioGerencial ('// Linha 1/2 - áéíóú # ÁÉÍÓÚ - çÇ àÀ', 0);
,,,
com ACBrPosPrinter conectado, está saindo sempre SEM ACENTO.

...
O que conseguiu verificar, analisar profundamente:

(a.1) Em dado momento, entra na 
função TACBrECF.DecodificarTagsFormatacao, corretamente COM acento.

(a.2) Como "CodificarPaginaDeCodigo = True",
então entra:
Resultado: = CodificarPaginaDeCodigoECF (AString)

(b.1) Então uma função abaixo é executada ...:
function TACBrECF.CodificarPaginaDeCodigoECF (ATexto: String): AnsiString;

(b.2) E a linha é executada, DENTRO da função (b.1):
  Resultado: = fsECF.DecodificarPaginaDeCodigoECF (ATexto)

(c.1) Função esta função uma função da
função ACBrECFClass.pas TACBrECFClass.CodificarPaginaDeCodigoECF (ATexto: String): AnsiString;

(c.2) Esta função possui o código:
function TACBrECFClass.CodificarPaginaDeCodigoECF (ATexto: String): AnsiString;
begin
  if fpPaginaDeCodigo> 0 then
     Resultado: = TranslateString (ACBrStrToAnsi (ATexto), fpPaginaDeCodigo)
  mais
     Resultado: = TiraAcentos (ATexto);
fim ;

(c.3) Aqui ocorre o ERRO: "fpPaginaDeCodigo" passa por um valer ZERO e retira os ACENTOS.

Conclusão: 
Se "forçar" um código abaixo, funciona PERFEITAMENTE na DARUMA DR800,
uma alteração das páginas. de código tornar-se operacionalmente,
imprimindo "pcNone", sem acentos, "pc850", com acentuação errada,
"pc1252", com correntos corretos, perfeito.

Mas lógico que HÁ ALGO errado E EU NÃO POSSO FAZER
Função

   
ISTO  TACBrECFClass.CodificarPaginaDeCodigoECF (ATexto: String): AnsiString; begin fpPaginaDeCodigo: = 1252; => insira esta linha e funcionou perfeitamente

   se fpPaginaDeCodigo> 0, então
     Resultado: = TranslateString (ACBrStrToAnsi (ATexto), fpPaginaDeCodigo)
   else
     Resultado: = TiraAcentos (ATexto);
fim ;
//

Questão:
O que foi feito
que uma variável de (c.2) fpPaginaDeCodigo passou por um valer 0 (zero),
então , err irregular a linha
     Resultado: = TiraAcentos (ATexto);

 

Observação : tem alguns locais que o texto foi alterado acho que pelo editor web, estragando um pouco.

No final é :

Questão:
A variável de (c.2) fpPaginaDeCodigo passou a valer 0 (zero),
então , com o erro acionou a linha abaixo, erradamente
     Resultado: = TiraAcentos (ATexto);

 

  • Fundadores
Postado

Por favor tente reproduzir o problema com o Demo do ACBr, projeto PosPrinterTeste... Me parece que você está informando a página de código 0 (zero) ao componente... e isso realmente irá remover os acentos

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado
1 hora atrás, Daniel Simoes disse:

Por favor tente reproduzir o problema com o Demo do ACBr, projeto PosPrinterTeste... Me parece que você está informando a página de código 0 (zero) ao componente... e isso realmente irá remover os acentos

Boa noite... descobri como "burlar" este possível bug do componente...

Percebi que ao alterar a propriedade ACBrECF.PaginaDeCodigo a variável fpPaginaDeCodigo  é alterada.

Já ao alterar a propriedade ACBrPosPrinter.PaginaDeCodigo a variável fpPaginaDeCodigo se estiver valendo zero, continua zero(não é alterada).

 

Então a solução foi após antes de alterar a propriedade ACBrPosPrinter.PaginaDeCodigo

eu simplesmente mudo a propriedade ACBrECF.PaginaDeCodigo := 1; (do ACBrECF conectado... )

 

Isto faz passar a "obedecer" corretamente a alteração da propriedade ACBrPosPrinter.PaginaDeCodigo , imprimindo

conforme o ajuste feito, pois a function "TACBrECFClass.CodificarPaginaDeCodigoECF" passa a funcionar corretamente.

 

Mesmo assim , obrigado pela ajuda e espero que o que descobri 

auxilie na correção do componente.

 

  • Curtir 1
  • Fundadores
Postado

Desculpe, mas não creio haver um Bug no componente... afinal isso afetaria TODOS os usuários do ACBrPosPrinter, independente da marca da Impressora, pois o tratamento de página de código é comum a todos os modelos...

Eu ainda não compreendi como você chegou no problema... mas ao que parece, em algum lugar do SEU código você está atribuindo "0"a página de código...

Se conseguir reproduzir o mesmo problema, com o Demo, ACBrPosPrinter, por favor forneça o passo a passo...

9 minutos atrás, ROGERIO EDVAR DE SOUZA disse:

ACBrECF.PaginaDeCodigo := 1;

Isso não é um número de página de código válido...  vc precisa usar TypeCast... veja como está nos fontes do Demo

      ACBrPosPrinter1.PaginaDeCodigo := TACBrPosPaginaCodigo( cbxPagCodigo.ItemIndex );    

 

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado
18 horas atrás, Daniel Simoes disse:

Desculpe, mas não creio haver um Bug no componente... afinal isso afetaria TODOS os usuários do ACBrPosPrinter, independente da marca da Impressora, pois o tratamento de página de código é comum a todos os modelos...

Eu ainda não compreendi como você chegou no problema... mas ao que parece, em algum lugar do SEU código você está atribuindo "0"a página de código...

Se conseguir reproduzir o mesmo problema, com o Demo, ACBrPosPrinter, por favor forneça o passo a passo...

Isso não é um número de página de código válido...  vc precisa usar TypeCast... veja como está nos fontes do Demo


      ACBrPosPrinter1.PaginaDeCodigo := TACBrPosPaginaCodigo( cbxPagCodigo.ItemIndex );    

 

Ok. O importante é que foi corrigido.

Mas, o componente é maravilhoso e vocês são programadores ótimos, não discordo disto em momento algum.

Apenas continuo achando que o componente está com bug. 

Vou ver se breve faço um código bem pequeno, para provar-lhes.

Fato é que, repito, ao atribuir "1" (sei logicamente que é um código de página INVÁLIDO) ao ACBrECF.PaginaDeCodigo,

repito, a variável fpPaginaDeCodigo  , repito, é ALTERADA para 1 e a function

"TACBrECFClass.CodificarPaginaDeCodigoECF" passa a funcionar corretamente a linha  correta,

OU SEJA...

 

if fpPaginaDeCodigo> 0 Then
     Resultado: = TranslateString (ACBrStrToAnsi (ATexto), fpPaginaDeCodigo) 
   else 
     Resultado: = TiraAcentos (ATexto); 
end ; 

ah... se sabe o MAIS ESTRANHO, É QUE MESMO eu atribuindo "1" (página de código INCORRETA)

ele certinho a impressão do ACBrPosPrinter,

pois fiz um LAÇO passando por várias páginas de código, e na Daruma DR800 somente fica correto quando

é 1252.

Mesmo assim, repito, MUITÍSSIMO OBRIGADO por tentarem ajudar...

 

 

 

 

Postado
19 horas atrás, Daniel Simoes disse:

Desculpe, mas não creio haver um Bug no componente... afinal isso afetaria TODOS os usuários do ACBrPosPrinter, independente da marca da Impressora, pois o tratamento de página de código é comum a todos os modelos...

Eu ainda não compreendi como você chegou no problema... mas ao que parece, em algum lugar do SEU código você está atribuindo "0"a página de código...

Se conseguir reproduzir o mesmo problema, com o Demo, ACBrPosPrinter, por favor forneça o passo a passo...

Isso não é um número de página de código válido...  vc precisa usar TypeCast... veja como está nos fontes do Demo


      ACBrPosPrinter1.PaginaDeCodigo := TACBrPosPaginaCodigo( cbxPagCodigo.ItemIndex );    

 

Olá... Consegui fazer um exemplo, (segue o cód.fonte, em anexo)

mas você em um sentido tem razão. Por algum motivo, no meu sistema, ao colocar

ACBrECF.PaginaDeCodigo := 1; ... já passa a obedecer corretamente o ACBrPosPrinter.PaginaDeCodigo que colocar...

Mas...

no pequeno programa que criei eu tenho que atribuir a MESMA PÁGINA DE CÓDIGO de ACBrPosPrinter para a ACBrECF,

senão não funciona a pág de código que atribui a ACBrPosPrinter, imprimindo SEMPRE SEM ACENTO,

porque a variável "fpPaginaDeCodigo" da function "TACBrECFClass.CodificarPaginaDeCodigoECF" fica valendo ZERO.

Neste sentido que no meu ponto de vista é um pequeno BUG,

pois se estou trabalhando com o componente ACBrPosPrinter, porque tenho que atribuir a mesma página

de código para ACBrECF antes de imprimir no ACBrPosPrinter, ou seja, de nada praticamente está valendo

a propriedade ACBrPosPrinter.PaginaDeCodigo...

BEM,...

é isto... obrigado por me ajudarem !!!! repito, eu ACHO que é um pequeno BUG,

mas repito também, estes componentes são MARAVILHOSOS e sem ele demoraria MESES

para implementar o NFCe ..

Teste_DR800_Daruma_2019-03-05.zip

  • Fundadores
Postado
Em 05/03/2019 at 13:47, ROGERIO EDVAR DE SOUZA disse:

no pequeno programa que criei eu tenho que atribuir a MESMA PÁGINA DE CÓDIGO de ACBrPosPrinter para a ACBrECF,

Provavelmente esse é o problema... elas são diferentes... você não pode ou deve mistura-los

a Página de código do ACBrECF é um Word:

ACBrECF1.PaginaDeCodigo := 850

 

A página de código do ACBrPosPrinter, é um tipo enumerado

TACBrPosPaginaCodigo = (pcNone, pc437, pc850, pc852, pc860, pcUTF8, pc1252);

// Exemplo de uso:

ACBrPosPrinter1.PaginaDeCodigo := pc850;

 

Você poderia fazer um "case / if", no lado da sua aplicação, e efetuar a conversão correta, antes de atribuir... Exemplo:

if MinhaPaginaDeCodigo = 850 then
  ACBrPosPrinter1.PaginaDeCodigo := pc850
else if  MinhaPaginaDeCodigo = 852 then
  ACBrPosPrinter1.PaginaDeCodigo := pc852
else if  MinhaPaginaDeCodigo = 860 then
  ACBrPosPrinter1.PaginaDeCodigo := pc860
....

 

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Solution
Postado
4 horas atrás, Daniel Simoes disse:

Provavelmente esse é o problema... elas são diferentes... você não pode ou deve mistura-los

a Página de código do ACBrECF é um Word:


ACBrECF1.PaginaDeCodigo := 850

 

A página de código do ACBrPosPrinter, é um tipo enumerado


TACBrPosPaginaCodigo = (pcNone, pc437, pc850, pc852, pc860, pcUTF8, pc1252);

// Exemplo de uso:

ACBrPosPrinter1.PaginaDeCodigo := pc850;

 

Você poderia fazer um "case / if", no lado da sua aplicação, e efetuar a conversão correta, antes de atribuir... Exemplo:


if MinhaPaginaDeCodigo = 850 then
  ACBrPosPrinter1.PaginaDeCodigo := pc850
else if  MinhaPaginaDeCodigo = 852 then
  ACBrPosPrinter1.PaginaDeCodigo := pc852
else if  MinhaPaginaDeCodigo = 860 then
  ACBrPosPrinter1.PaginaDeCodigo := pc860
....

 

Obrigado novamente pelo auxílio...

Eu fiz assim... gravei tudo num .ini, todas configurações, em um "parametrizador de ECF e de NFCe",

daí tem uma função utiliza que lê o .ini, da seguinte maneira :

      // Se o Modelo da ECF foi marcado como ecfVirtual ...
      If (V_INI.ReadInteger('ECF', 'Modelo', 0 )=17)  and
      //
      // E Se for propriedade ACBR.VIRTUAL = NFCe
      ((V_ECF_Virtual = 2) and (E_ACBrECFVirtualNFCe<>Nil)) then
      // ...
      With E_ACBrPosPrinter DO
      Begin
         // TACBrPosPaginaCodigo = (pcNone, pc437, pc850, pc852, pc860, pcUTF8, pc1252);
         PaginaDeCodigo := TACBrPosPaginaCodigo( V_INI.ReadInteger( 'ACBrPosPrinter', 'PaginaDeCodigo', 6{ padrão = pc1252} ) );
         //
         Porta   := V_INI.ReadString('ACBrPosPrinter', 'Porta', 'COM1');
         //
         Device.ParamsString := V_INI.ReadString('ACBrPosPrinter', 'ParamsString', '');
         //
         E_ACBrPosPrinter.Modelo := TACBrPosPrinterModelo( V_Ini.ReadInteger( 'ACBrPosPrinter', 'Modelo', 0 ) ) ;
         E_ACBrECF.ECFVirtual    := E_ACBrECFVirtualNFCe ;    // NFCe
         // ...
         // Correção 02/03/2019.Carlos...
         // Observação: Uma vez alterada abaixo, pode-se até
         // alterar a página de código de ACBrPosPrinter que dá certo, mesmo
         // incrivelmente a variável "fpPaginaDeCodigo" de ACBrECFClass aparecendo fixa com a pág.Escolhida.
         E_ACBrECF.PaginaDeCodigo := AcbrPosPrinterGetNumeroPaginaDeCodigo( E_ACBrPosPrinter.PaginaDeCodigo );
      End
      Else   
      E_ACBrECF.PaginaDeCodigo       := V_INI.ReadInteger('ECF', 'PaginaDeCodigo', 0 );

 

============================================================================================

==> AcbrPosPrinterGetNumeroPaginaDeCodigo( E_ACBrPosPrinter.PaginaDeCodigo );

Esta linha acima, quando utilizo o ACBrPosPrinter para impressão em NFCe,

faz o ajuste automático da propriedade ACBrECF.PaginaDeCodigo CONFORME foi feito

o ajuste de Página de código no parametrizador que criei, no ACBrPosPrinter.

Daí ficou tudo correto. (quando utilizo ACBrPosPrinter eu "sumo" com o ajuste de pág. de cód. do ACBrECF e fico somente com o 

ACBrPosPrinter, e quando utilizo ACBrECF (impressão em ECF), faço o inverso...)

============================================================================================

Segue a função abaixo que na realidade utilizei uma interna de vocês :


function AcbrPosPrinterGetNumeroPaginaDeCodigo(APagCod: TACBrPosPaginaCodigo): word;
begin
  case APagCod of
    pc437: Result := 437;
    pc850: Result := 850;
    pc852: Result := 852;
    pc860: Result := 860;
    pc1252: Result := 1252;
    pcUTF8: Result := 65001;
    else
      Result := 0;
  end;
end;

============================================================================================

Abraços... Obrigado pelo retorno

  • Curtir 1
  • Administradores
Postado

Obrigado por reportar.

Fechando. Para novas dúvidas, criar um novo tópico.

  • Curtir 1
Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Este tópico foi criado há 2091 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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.

The popup will be closed in 10 segundos...