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á 507 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á 507 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.