Ir para conteúdo
  • Cadastre-se

dev botao

Remoção do CDATA do campo qrCodCTe.


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

Recommended Posts

Postado

Olá, 

Uma empresa está exigido que a estrutura CDATA que fica dentro do qrCodCTe seja removida porque o sistema dela não interpreta este campo e trata ele como erro e impede a leitura.

Ela está exigindo de todas as transportadoras e mesmo eu explicando o motivo do CDATA eles estão irredutíveis. 

Para poder atender alterei o arquivo pcteCTeW.pas removendo os caracteres que formavam o CDATA dentro do Gerador.wGrupo('infCTeSupl') e dentro do ACBrCTe.pas onde era criado o link eu alterei o '&tpAmb=' para '&tpAmb=' utilizando assim o escape & no lugar do &, seguindo um CTe de exemplo que me passaram.

Enviei em homologação e está tudo certo sem erro no XML como esta empresa solicitou.

A minha pergunta é se há algum problema em fazer estas alterações?

Existe alguma norma técnica que impeça este tipo de alteração?
 

  • Consultores
Postado

Bom dia Márcio,

O importante é gerar, assinar, validar e enviar para a SEFAZ um CT-e com essa troca do & por & na URL do QR-Code.

Se a SEFAZ autorizar o CT-e não vejo problemas, mas pode ser que outra SEFAZ-Autorizadora não aceite essa troca.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Postado

Bom dia Italo,

Já esta rodando em produção desde semana passada e até agora zero problemas.

Dentro do schema da receita já tem previsto por isto acho que não está dando problemas.

image.thumb.png.610d70d6bff0c0dbac96565ea9e3f052.png

  • Solution
Postado (editado)

Italo,

Segue em anexo os arquivos que modifiquei.

ACBrCTe.pas linha 329.

pcteCTeW.pas linhas 270, 271 e 272.

No ACBrCTe.pas mais adiante no Passo 2 tem &sign que pelo esquema pode ir &sign, mas não mexi.

ACBrCTe.pas pcteCTeW.pas

Editado por Márcio B.
  • Membros Pro
Postado

Estou tendo problemas com o CTe desde o dia 26.06.2023 com o seguinte erro:

Falha ao interpretar o XML "xmlParseDoc" --> 23 - EntityRef: expecting ';'


Já verifiquei dentro do arquivo XML em busca de caractéres inválidos e não encontrei nada.

Porém ao compará-lo com um XML um pouco mais antigo, percebi que a falta do <![CDATA[]]>

justamente na única parte do XML que contém um &

Será que tem alguma relação com o que vocês estão mencionando neste tópico?

Estou já a 2 dias com o @Diego A. Folieni tentando resolver este problema mas não estamos conseguindo.

  • Curtir 1
Postado (editado)

Boa tarde Juliano,

Acabei de re-atualizar o ACBr, baixei usando o TortoiseSVN em uma pasta limpa, instalei utilizando o executável do instalador como administrador, abri o projeto, fiz um build, compilei, e fiz um CTe em homologação utilizando os schemas que vem junto do ACBr na pasta C:\ACBr\Exemplos\ACBrDFe\Schemas e deu tudo certo e até já coloquei em produção.
Quanto ao CDATA o schema do CTe não prevê o uso por isto um cliente foi irredutível quanto a remoção dele.
Quanto ao & ele não pode estar "sozinho" dentro do XML porque ele atrapalha a estrutura, então ele dever ser acompanhado dos outros caracteres ficando &amp; como na imagem do schema do post anterior.

Se remover a parte anterior "![CDATA[ " e posterior "]]" e deixando apenas & então tentar abrir com um navegador o XML ele fica errado.
Caso neste mesmo arquivo você além de eliminar o "involucro" do CDATA alterar o "&" para "&amp;" como indicado no schema o navegador vai abrir corretamente e se olhar na linha os caracteres "que foram a mais" são automaticamente ocultados porque a leitura deles "explica" que o & comercial deve ser apenas mostrado pelo navegador e não "interpretado" pelo programa que está lendo o XML.

Ficou meio complicado a explicação mas esta funcionando desde uma semana antes do primeiro post. 

Lembrando que o &amp; é usando sempre que precisar mostrar o caracter & como no nome do emitente, remetente, destinatário e etc.
 

image.thumb.png.6cb2f0a213f9b19cb2d9a4892ece9408.png

image.thumb.png.3cace2ce3478f07ed7183d4f6ca9adfa.png

image.thumb.png.999713612c9f56fdade747404c324d39.png

 

 

Editado por Márcio B.
Postado

Tive aqui o mesmo erro do @Juliano Otaviano Barreto.

Para contornar temporariamente, após ler o XML eu apaguei a tag qrCodCTe para que assim ela fosse gerada novamente.

Não fiz alterações definitivas ainda, mas pelo pouco que vi ao ler o XML já gerado com o qrCodCTe preenchido ele troca &amp; para & causando o problema na assinatura do XML.

  • Curtir 1

Jeanny Paiva Lopes

Analista de Sistemas / Desenvolvedora 

[email protected]

[email protected]
Tel.: +55 (32) 3539-5700

 

 

Postado

Sugiro que vocês atualizem o ACBR conforme a recomendação do Sr. Italo.

Segue em anexo a imagem do XML gerado por um sistema "não ACBr" que motivou as alterações bem como a imagem do schema onde indica a utilização do &amp; no lugar do CDATA.

image.thumb.png.29a34244b6aec479c5412ed87facfc17.png

image.thumb.png.9791e3b675be212b8ac2cb0348b34461.png

  • Curtir 3
  • Membros Pro
Postado
1 hora atrás, JeannyPaiva disse:

Tive aqui o mesmo erro do @Juliano Otaviano Barreto.

Para contornar temporariamente, após ler o XML eu apaguei a tag qrCodCTe para que assim ela fosse gerada novamente.

Não fiz alterações definitivas ainda, mas pelo pouco que vi ao ler o XML já gerado com o qrCodCTe preenchido ele troca &amp; para & causando o problema na assinatura do XML.

Muito obrigado @JeannyPaiva por sua sugestão, eu zerei o QRCode desta forma:

Cte.Conhecimentos.Items[0].CTe.infCTeSupl.qrCodCTe:='';

Após executar o ACBr.Conhecimentos.LoadFromFile e o erro alterou, agora está aparecendo este erro:

Citar

URL para o serviço "CTeRecepcaoSinc" não encontrada na sessão "CTe_MG_P" no arquivo "ACBrCTeServicos"

 

@Márcio B. muito obrigado.

Eu já estou utilizando a versão atualizada do componente.

Após utilizar a dica da @JeannyPaiva e retornando para a VersaoDF=3.00 eu consegui autorizar o CT-e.

Não feche ainda o tópico por gentileza porque vou pedir os clientes para experimentarem amanhã cedo.

Desde já agradeço a atenção de todos.

  • Fundadores
Postado
8 minutos atrás, Juliano Otaviano Barreto disse:

URL para o serviço "CTeRecepcaoSinc" não encontrada na sessão "CTe_MG_P" no arquivo "ACBrCTeServicos"

Provavelmente ainda não tem as URLs da versão 4, para MG, ou você tem um arquivo ACBrCTeServicos.ini desatualizado, na mesma pasta do .EXE

  • 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
13 horas atrás, Márcio B. disse:

Sugiro que vocês atualizem o ACBR conforme a recomendação do Sr. Italo.

Segue em anexo a imagem do XML gerado por um sistema "não ACBr" que motivou as alterações bem como a imagem do schema onde indica a utilização do &amp; no lugar do CDATA.

image.thumb.png.29a34244b6aec479c5412ed87facfc17.png

image.thumb.png.9791e3b675be212b8ac2cb0348b34461.png

Está atualizado aqui sim @Márcio B. , possivelmente você não teve o mesmo problema que nós por não utilizar o mesmo recurso de ler o XML já gerado para depois enviar.

A questão eh que o tratamento de leitura da tag x geração esta incompatível. Ao ler o XML já gerado o &amp; é convertido para &. 

image.thumb.png.ac2f1e59bcc8c4df4bfb5460b602b365.png

 

Porém ao gerar novamente o parâmetro ParseTextXML estava false. 

Para seguir o mesmo padrão de demais tags string fiz as seguintes alterações:
Em ACBrCTe > GetURLQRCode, preencher a tag com & novamente em vez de &amp; (como já estava antes)

Em pcteCTeW passar o parâmetro de ParseTextXML para True, que assim irá realizar a conversão correta dos caracteres.

Esta alteração segue os mesmos padrões do comportamento de outros campos string como Nome, Endereço, etc.

@Juliano Otaviano Barreto, teste novamente com essa alteração sem zerar o qrCodCTe.

 

pcteCTeW.pas ACBrCTe.pas

  • Curtir 1
  • Obrigado 1

Jeanny Paiva Lopes

Analista de Sistemas / Desenvolvedora 

[email protected]

[email protected]
Tel.: +55 (32) 3539-5700

 

 

Postado

Bom dia Jeanny,

Concordo com você. O Tratamento de gravação e leitura do qrcode deve ser o mesmo usado nos outros campos em que ocorre a utilização de caracteres especiais.

Bom dia Juliano,

Não sugiro omitir o qrCode e sim usar a solução ParseTextXML sugerida até que passe pelo crivo do ACBr.
Para isto muda para true o parâmetro como sugerido pela Jeanny.

O default do ParseTextXML da procedure wCampo é true e quando não informada e portanto nos outros campos gerados onde ela é omitida não tem este problema.

image.thumb.png.ff760bbf884f65f56f3e47b1d99e3f3e.png

 


image.thumb.png.5ee95dacea9c7aa9deff3647194ecbde.png

  • Consultores
Postado

Bom dia!

Muito obrigado pela contribuição!

Fizemos testes com a mesma usando os botões Criar e Enviar e o Carregar XML e Enviar do programa exemplo, tanto para as versões 3.0 quanto 4.0 e em ambos os casos, não houve o problema relatado.

A mesma foi enviada ao SVN na Rev-29927.

Por favor, queiram atualizar seus fontes, reinstalar o ACBr para realizar novos testes e reportar qualquer problema.

  • Curtir 5
Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

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 !!

  • 2 semanas depois ...
Postado

Boa Tarde!

Atualizei os Fontes, Reinstalei o ACBr e o erro ainda persiste.

Ainda Estou usando a Versão 3.0 do CT-e.

Verifiquei no arquivo: ..\svn\trunk2\Fontes\ACBrDFe\ACBrCTe\ACBrCTe.pas


Na Linha 335 dentro da Funcion GetURLQRCode  que está dessa forma:

sEntrada := 'chCTe=' + idCTe + '&tpAmb=' + TpAmbToStr(TipoAmbiente);

Só deu certo quando eu troquei para:

sEntrada := 'chCTe=' + idCTe + '&amp;tpAmb=' + TpAmbToStr(TipoAmbiente);

 

A Versão 4.0 usa outra unit para montar por isso não ta funcionando na Versão 3.0?

Desde já agradeço!

Sem mais para o momento,

atenciosamente.

Postado

Encontrei o Problema.
Há um tempo atrás eu havia comentado a unit: ..\svn\trunk2\Fontes\PCNComum\pcnAuxiliar.pas
 

Linha 280: 

aTexto := ParseText(AnsiString(aTexto), False );

E desta forma, não estrava trocando o E Comercial.

  • Curtir 1
  • Este tópico foi criado há 595 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...
The popup will be closed in 10 segundos...