Ir para conteúdo
  • Cadastre-se

O ACBr está substituindo o ACBr.Configuracoes.WebServices.QuebradeLinha por "\n" na discriminação do serviço, ao gerar o XML da NFS-e Nacional.


Recommended Posts

Postado

Olá.

Recentemente recebemos algumas reclamações de clientes que notaram que a descrição dos serviços nas nossas notas fiscais, estavam vindo com caracteres estranhos, e queriam saber do que se trata.

Os caracteres em questão são os "\n". Esses caracteres passaram a aparecer no lugar do caractere "|" que é o que utilizamos na discriminação do serviço, para identificar uma quebra de linha:

 

 ACBr.Configuracoes.WebServices.QuebradeLinha := '|';

 

Entretanto, quando o ACBr gera o XML com o RPS para envio para autorização, ele está substituindo, nos XML`s, todos os caracteres "|" por "\n" automaticamente.

Por que isso agora? 

EXEMPLO:

<xDescServ>Produto: JORNAL A CRITICA\n1 publicacao(oes) do anúncio "CONCORRENCIA 90050/2026 - CONFORME FATURA 21895SDF", no(s) dia(s):\n18/03/2026 - Quarta-feira -&gt; 3 Col. X 8 Cm, Caderno "CLASSIFICADOS" (R$ 1.345,20)\n(-) DESCONTO PADRAO AGENCIA (LEI 12.232/2010) (R$ 269,04)\nConforme P.I. No. 4558/2026.\nVencto(s): C/Apresentacao</xDescServ>

 

Quando enviamos a discriminação do serviço para o componente do ACBRNFseX, ela vai da seguinte maneira:

<xDescServ>Produto: JORNAL A CRITICA|1 publicacao(oes) do anúncio "CONCORRENCIA 90050/2026 - CONFORME FATURA 21895SDF", no(s) dia(s):|18/03/2026 - Quarta-feira -> 3 Col. X 8 Cm, Caderno "CLASSIFICADOS" (R$ 1.345,20)|(-) DESCONTO PADRAO AGENCIA (LEI 12.232/2010) (R$ 269,04)|Conforme P.I. No. 4558/2026.|Vencto(s): C/Apresentacao</xDescServ>

 

E era da forma acima que aparecia no DANFNSe do portal (porque eles não tratam quebras de linhas, vem tudo como um texto corrido, então o "|" ajudava a leitura nesse caso). Na DANFNSe local, tratamos isso e discriminação sai com as respectivas quebras de linha.

É assim que está aparecendo para os clientes na DANFNSe, já tem algum tempo, e não havíamos percebido:

image.thumb.png.68ceb609ebb8027a4e5f9cc2048755cf.png

 

ISSO SÓ ESTÁ ACONTECENDO COM A TAG <xDescServ>, na <xInfComp>, que utiliza o mesmo caractere delimitador, ele aparece corretamente, não é substituído.

 

Não sei quando isso começou a acontecer, pois só tomamos conhecimento do fato agora, mas já fiz o teste e realmente está havendo essa substituição dentro da tag <xDescServ>.

Estou utilizando os fontes da Revisão 46134 de 08/05/2026.

 

Grato.

 

 

 

Postado (editado)

E aparentemente, o problema está no PadraoNacional.GravaXml.pas, nesse ponto aí:

image.thumb.png.1a1950d6690623be6d4c00e38c656e50.png

 

Quem é esse FpAOwner.ConfigGeral.QuebradeLinha pelo qual ele está substituindo a quebra de linha que informamos?

 

Para o MEU PROBLEMA, essa simples linha no código do meu aplicativo deve resolver, mas preciso saber o motivo da troca, se tem impacto em mais alguma coisa dentro do componente. Vai dar problema se eu parametrizar da forma abaixo?

 

ACBr.Configuracoes.WebServices.QuebradeLinha := '|'; 
ACBr.Provider.ConfigGeral.QuebradeLinha := ACBr.Configuracoes.WebServices.QuebradeLinha;

 

 

Atenciosamente,

Francis Lay L. Silva.

 

Editado por Francis Silva
Postado (editado)

Não consigo resolver esse problema, sem mexer no fonte do PadraoNacional.GravaXml.pas, e não quero fazer isso, não porque é certeza de problemas na próxima atualização repositório.

Eu já tentei de toda forma:

ACBr.Configuracoes.WebServices.QuebradeLinha := ACBR_SEPARADOR_LINHAS;    // '|'
ACBr.SetProvedor(ACBr.Configuracoes.Geral.Provedor, ACBr.Configuracoes.Geral.Versao);
ACBr.Provider.ConfigGeral.QuebradeLinha := ACBr.Configuracoes.WebServices.QuebradeLinha;

ANTES desta atribuição ACBr.Provider.ConfigGeral.QuebradeLinha := ACBr.Configuracoes.WebServices.QuebradeLinha;  o valor de ACBr.Provider.ConfigGeral.QuebradeLinha é igual a '\n'.  Depois da atribuição, ele fica igual a '|'. Só que, quando ele cria o XML, continua usando o '\n' como quebra de linha, eu tenho a impressão de que ele deve estar recriando o provider em algum momento, e aí volta para o valor default da quebra de linha.

 

Alguém pode me ajudar a resolver esse problema, por favor?

Obrigado.


Atenciosamente,

Francis Lay L. Silva.

 

PS: É exatamente como eu imaginei. Se o provider existe, ele descarta e cria outro, então não tenho como configurar o provider  sem mexer no fonte do ACBr.

 

image.thumb.png.e9b09824bb224d054610ed7e99f7b41f.png

Editado por Francis Silva
  • Consultores
Postado
4 horas atrás, Francis Silva disse:

PS: É exatamente como eu imaginei. Se o provider existe, ele descarta e cria outro, então não tenho como configurar o provider  sem mexer no fonte do ACBr.

Sim é preciso modificar no provider que é ele usado.

no caso é uma interface que será liberada assim que não estiver em uso

 

Consultora ACBr Pro

Juliomar Marchetti

Ajude o Projeto ACBr crescer - Seja Pro

discord: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br

 

MVP_NewLogo_100x100_Transparent-02.png
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 !!

Postado
13 horas atrás, Juliomar Marchetti disse:

Sim é preciso modificar no provider que é ele usado.

no caso é uma interface que será liberada assim que não estiver em uso

Teria como implementar um evento OnProviderCreate, para que possamos configurar o provider sem mexer com o código fonte do ACBr? Acho que seria muito melhor, e fácil de implementar.

Atenciosamente,

Francis Lay L. Silva.

  • Consultores
Postado
11 horas atrás, Francis Silva disse:

Teria como implementar um evento OnProviderCreate, para que possamos configurar o provider sem mexer com o código fonte do ACBr? Acho que seria muito melhor, e fácil de implementar.

Atenciosamente,

Francis Lay L. Silva.

SIm.algo nesse sentido.

se quiser tentar ajustar e depois postar fique a vontade

 

Consultora ACBr Pro

Juliomar Marchetti

Ajude o Projeto ACBr crescer - Seja Pro

discord: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br

 

MVP_NewLogo_100x100_Transparent-02.png
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 !!

Postado
4 horas atrás, Francis Silva disse:

Beleza, vou ajustar e depois posto o fonte aqui.

Bom dia.

Segue o patch com o ajuste para criação de um evento OnCreateProvedor, no componente TACBrNFSeX, para permitir configurar o provedor assim que ele for instanciado.

As modificações foram realizadas em cima da revisão 46533, e as units alteradas foram as seguintes:

  • ACBrNFSeX.pas ->  Criado o tipo TACBrNFSeXOnCreateProvedor = procedure (const Provedor: IACBrNFSeXProvider) of object; 
  • Criada a property OnCreateProvedor: TACBrNFSeXOnCreateProvedor;
  • ACBrNFSeXProviderManager.pas -> Corrigido o método TACBrNFSeXProviderManager.GetProvider para invocar o evento OnCreateProvedor, do objeto ACBrNFSe.

Já realizei os testes com o patch, e consegui parametrizar com sucesso o caractere de quebra de linha do provedor, e resolveu o problema da substituição da quebra de linha padrão "|" pelo "\n" padrão do provedor.

Você pode comitar no repositório, por favor?

 

Obrigado.

Patch_OnCreateProvedor_ACBrNFSeX.7z

Postado
Em 27/05/2026 at 19:57, Francis Silva disse:

Não consigo resolver esse problema, sem mexer no fonte do PadraoNacional.GravaXml.pas, e não quero fazer isso, não porque é certeza de problemas na próxima atualização repositório.

Eu já tentei de toda forma:

ACBr.Configuracoes.WebServices.QuebradeLinha := ACBR_SEPARADOR_LINHAS;    // '|'
ACBr.SetProvedor(ACBr.Configuracoes.Geral.Provedor, ACBr.Configuracoes.Geral.Versao);
ACBr.Provider.ConfigGeral.QuebradeLinha := ACBr.Configuracoes.WebServices.QuebradeLinha;

ANTES desta atribuição ACBr.Provider.ConfigGeral.QuebradeLinha := ACBr.Configuracoes.WebServices.QuebradeLinha;  o valor de ACBr.Provider.ConfigGeral.QuebradeLinha é igual a '\n'.  Depois da atribuição, ele fica igual a '|'. Só que, quando ele cria o XML, continua usando o '\n' como quebra de linha, eu tenho a impressão de que ele deve estar recriando o provider em algum momento, e aí volta para o valor default da quebra de linha.

 

Alguém pode me ajudar a resolver esse problema, por favor?

Obrigado.


Atenciosamente,

Francis Lay L. Silva.

 

PS: É exatamente como eu imaginei. Se o provider existe, ele descarta e cria outro, então não tenho como configurar o provider  sem mexer no fonte do ACBr.

 

image.thumb.png.e9b09824bb224d054610ed7e99f7b41f.png

Boa tarde, tudo bem?

Eu utilizei a seguinte lógica abaixo, pois é nele que esta associado a quebra de linha no provedor nacional, assim que eu configuro todos os dados do provedor eu já configuro nele:

if Provedor in [proPadraoNacional] then
            ACBrNFSeX1.Provider.ConfigGeral.QuebradeLinha      := '\n';

Porém isso não gera quebra de linha no provedor, atualmente eu mudei a unit para mandar a quebra de linha na descrição e desativei as trocas automáticas no provedor para conseguir emitir notas normalmente com quebra de linha, pois  mandando com essa quebra de linha \n as informações no provedor não substitui como na maioria dos provedores, com isso eu consegui obter a danfe e o XML com a quebra de linha normalmente por lá.

 

  • Curtir 1
  • Consultores
Postado
Em 29/05/2026 at 07:00, Francis Silva disse:

Bom dia.

Segue o patch com o ajuste para criação de um evento OnCreateProvedor, no componente TACBrNFSeX, para permitir configurar o provedor assim que ele for instanciado.

chegou a ver o que nosso colega postou

não resolve de forma mais rápida a situação?

Em 29/05/2026 at 15:53, Luis AGSI disse:

Eu utilizei a seguinte lógica abaixo, pois é nele que esta associado a quebra de linha no provedor nacional, assim que eu configuro todos os dados do provedor eu já configuro nele:

if Provedor in [proPadraoNacional] then
            ACBrNFSeX1.Provider.ConfigGeral.QuebradeLinha      := '\n';

 

 

Consultora ACBr Pro

Juliomar Marchetti

Ajude o Projeto ACBr crescer - Seja Pro

discord: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br

 

MVP_NewLogo_100x100_Transparent-02.png
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 !!

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.