Francis Silva Postado 22 Maio Postado 22 Maio 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 -> 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: 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.
Francis Silva Postado 22 Maio Autor Postado 22 Maio (editado) E aparentemente, o problema está no PadraoNacional.GravaXml.pas, nesse ponto aí: 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 22 Maio por Francis Silva
Francis Silva Postado 27 Maio Autor Postado 27 Maio (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. Editado 27 Maio por Francis Silva
Consultores Juliomar Marchetti Postado 28 Maio Consultores Postado 28 Maio 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 Juliomar Marchetti Ajude o Projeto ACBr crescer - Seja Pro discord: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br 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 !!
Francis Silva Postado 28 Maio Autor Postado 28 Maio 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 Juliomar Marchetti Postado Sexta as 03:32 Consultores Postado Sexta as 03:32 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 Juliomar Marchetti Ajude o Projeto ACBr crescer - Seja Pro discord: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br 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 !!
Francis Silva Postado Sexta as 04:59 Autor Postado Sexta as 04:59 1 hora atrás, Juliomar Marchetti disse: SIm.algo nesse sentido. se quiser tentar ajustar e depois postar fique a vontade Beleza, vou ajustar e depois posto o fonte aqui.
Francis Silva Postado Sexta as 10:00 Autor Postado Sexta as 10:00 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
Luis AGSI Postado Sexta as 18:53 Postado Sexta as 18:53 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. 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á. 1
Consultores Juliomar Marchetti Postado Segunda as 03:00 Consultores Postado Segunda as 03:00 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'; Juliomar Marchetti Ajude o Projeto ACBr crescer - Seja Pro discord: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br 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 !!
Recommended Posts
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 contaEntrar
Já tem uma conta? Faça o login.
Entrar Agora