Ir para conteúdo
  • Cadastre-se

dev botao

Salvar XML CfeCanc no banco de dados


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

Recommended Posts

  • Membros Pro
Postado

Boa tarde,

Estou salvando o xml de cancelamento do SAT no banco de dados, mas o mesmo esta sendo salvo sem a informação <?xml version="1.0"?> .

image.thumb.png.4c9e46892bd68d1ff0704c2520bb6486.png

Estou salvando da seguinte forma (igual faço com o xml da venda):  

Qry.ParamByName('xml').AsMemo:= UTF8Encode(DmSat.ACBrSAT.CFeCanc.AsXMLString);

Pode me ajudar ? O que estou fazendo errado ?

  • Moderadores
Postado

Boa tarde,

Creio que não precise converter, basta ler o campo: ACBrSAT1.CFeCanc.AsXMLString 

O componente ACBrSAT este selecionado a opção UTF8?

Consultor SAC ACBr

José Junior
Ajude o Projeto ACBr crescer - Assine o SAC

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

  • Membros Pro
Postado

Daniel,

Dei uma malhetada (Se é que vc me entende) e deu certo por enquanto:

Qry.ParamByName('xml').AsMemo:= UTF8Encode('<?xml version="1.0"?>' + DmSat.ACBrSAT.CFeCanc.AsXMLString);

Dessa maneira salva corretamente no banco de dados.

  • Moderadores
Postado

Bom dia,

Está realizando os testes com o aplicativo SATTest? 

Nos testes que realizamos com emulador mesmo XML de Cancelamento é gerado com a declaração no XML. 

Consultor SAC ACBr

José Junior
Ajude o Projeto ACBr crescer - Assine o SAC

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

  • Fundadores
Postado

Estou fora do PC.. mas pelo Log, poderíamos decodificar o retorno em Base64 e ver como o XML vem

1 hora atrás, marcellocainelli disse:

Daniel,

Dei uma malhetada (Se é que vc me entende) e deu certo por enquanto:

Qry.ParamByName('xml').AsMemo:= UTF8Encode('<?xml version="1.0"?>' + DmSat.ACBrSAT.CFeCanc.AsXMLString);

Dessa maneira salva corretamente no banco de dados.

Pode ser arriscado... pois eu acho que os SATs já retornam com a Declaração do XML...

Em todo caso, há um método na ACBrUtil que adiciona a Verificação apenas se ela não existir

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.

  • Membros Pro
Postado

Seguindo a dica do Daniel alterei meu comando para:

Qry.ParamByName('xml').AsMemo:= InserirDeclaracaoXMLSeNecessario(DmSat.ACBrSAT.CFeCanc.AsXMLString);

Acredito que pode considerar como resolvido.

Obrigado.

  • Curtir 1
  • Consultores
Postado

O XML do Cancelamento não fica na propriedade .XML quando ele está concluído e autorizado?

esse workarround que você fez pode resolver seu caso, mas era para o componente no loader já fazer isso.

Vou verificar essa questão do loader com o Ítalo, pode ser que a declaração só está sendo incluída em outro momento, teria que debugar o fluxo.

Consultor SAC ACBr

Victor H Gonzales - Pandaaa
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 !!

"Aprender é a única coisa que a mente nunca se cansa, nunca tem medo e nunca se arrepende” - Leonardo da Vinci

"Ter sucesso é falhar repetidamente, mas sem perder o entusiasmo"

  • Fundadores
Postado

Se você abrir uma das respostas, pode notar que o próprio Emulador está devolvendo o XML, se a declaração (parece ser um Bug do Emulador)

25/03/22 08:38:40:971 - NumeroSessao: 423251 - Comando: CancelarUltimaVenda( CFe35220311111111111111591234567890006104485540, <?xml version="1.0" encoding="UTF-8"?><CFeCanc><infCFe chCanc="CFe35220311111111111111591234567890006104485540"><ide><CNPJ>11111111111111</CNPJ><signAC>1111111111111222222222222221111111111111122222222222222111111111111112222222222222211111111111111222222222222221111111111111122222222222222111111111111112222222222222211111111111111222222222222221111111111111122222222222222111111111111112222222222222211111111111111222222222222221111111111111122222222222222111111111111112222222222222211111222</signAC><numeroCaixa>001</numeroCaixa></ide><emit></emit><dest></dest><total></total></infCFe></CFeCanc> )
25/03/22 08:38:45:018 - NumeroSessao: 423251 - Resposta:423251|07000||Cancelado com sucesso + conte?do notas|||
PENGZUNhbmM+PGluZkNGZSBJZD0iQ0ZlMzUyMjAzMTExMTExMTExMTExMTE1OTEyMzQ1Njc4OTAw
....

 

 

image.png

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.

  • Moderadores
Postado

Boa tarde, 

Chegou a simular esses mesmo teste com o aplicativo SATTest do ACBr? Pois simulando por aqui o XML de cancelamento já é gerado com a declaração no arquivo...

Consultor SAC ACBr

José Junior
Ajude o Projeto ACBr crescer - Assine o SAC

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

  • Membros Pro
Postado

Boa tarde.

O xml na pasta é salvo corretamente.

A questão é quando salvo no meu banco de dados. Dai vem sem o <?xml version="1.0"?>.

Somente consegui resolver salvando assim: 

Qry.ParamByName('xml').AsMemo:= InserirDeclaracaoXMLSeNecessario(DmSat.ACBrSAT.CFeCanc.AsXMLString);

Não consigo fazer o teste de salvar no meu banco usando o SATTeste.

  • Consultores
Postado
29 minutos atrás, marcellocainelli disse:

Boa tarde.

O xml na pasta é salvo corretamente.

A questão é quando salvo no meu banco de dados. Dai vem sem o <?xml version="1.0"?>.

Somente consegui resolver salvando assim: 

Qry.ParamByName('xml').AsMemo:= InserirDeclaracaoXMLSeNecessario(DmSat.ACBrSAT.CFeCanc.AsXMLString);

Não consigo fazer o teste de salvar no meu banco usando o SATTeste.

Não precisa salvar no seu banco, pegue a lógica e jogue em um Memo o resultado

Consultor SAC ACBr

Victor H Gonzales - Pandaaa
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 !!

"Aprender é a única coisa que a mente nunca se cansa, nunca tem medo e nunca se arrepende” - Leonardo da Vinci

"Ter sucesso é falhar repetidamente, mas sem perder o entusiasmo"

  • Moderadores
Postado
33 minutos atrás, marcellocainelli disse:

Boa tarde.

O xml na pasta é salvo corretamente.

A questão é quando salvo no meu banco de dados. Dai vem sem o <?xml version="1.0"?>.

Somente consegui resolver salvando assim: 

Qry.ParamByName('xml').AsMemo:= InserirDeclaracaoXMLSeNecessario(DmSat.ACBrSAT.CFeCanc.AsXMLString);

Não consigo fazer o teste de salvar no meu banco usando o SATTeste.

Entendido, vamos verificar, simulando dessa forma...

Consultor SAC ACBr

José Junior
Ajude o Projeto ACBr crescer - Assine o SAC

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

  • 2 semanas depois ...
  • Moderadores
  • Solution
Postado

Boa tarde @marcellocainelli,

Analisando os fontes notamos que o retorno da property AsXMLString é o XML original retornado pelo SAT e no caso do emulador de fato está retornando sem o Encode UTF8 o retorno em base64. Uma outra forma de obter o XML convertido para UTF8 do próprio componente é obtendo o retorno direto do método GerarXML, esse método já faz a conversão. ex:  ACBrSAT1.CFeCanc.GerarXML()

Consultor SAC ACBr

José Junior
Ajude o Projeto ACBr crescer - Assine o SAC

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

  • Membros Pro
Postado

Bom dia.

Obrigado pelo retorno. Vou testar com essa nova opção. 

Pode considerar como resolvido porque de qualquer maneira usando o InserirDeclaracaoXMLSeNecessario também esta salvando corretamente.

  • Curtir 1
  • Consultores
Postado

Obrigado por reportar.

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

Consultor SAC ACBr

Victor H Gonzales - Pandaaa
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 !!

"Aprender é a única coisa que a mente nunca se cansa, nunca tem medo e nunca se arrepende” - Leonardo da Vinci

"Ter sucesso é falhar repetidamente, mas sem perder o entusiasmo"

  • Este tópico foi criado há 976 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...