Ir para conteúdo
  • Cadastre-se

Descomprimir XML retornado pela Sefaz.


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

Recommended Posts

Postado

Olá a todos. Estou desenvolvendo uma solução para monitorar a emissão de CTes e já consigo solicitar e fazer o retorno dos dados para a Sefaz. O problema é que, segundo o padrão da Sefaz, o arquivo de resposta com as CTes que necessito vem comprimido no padrão gzip. Qual é a função do ACBr que posso usar para descomprimir o arquivo? Desde já agradeço.

  • Consultores
Postado

Bom dia Gustavo,

Até onde sei, o serviço que retorna os XML dos CT-e compactados é o DistribuicaoDFe.

Mas o componente se encarrega de realizar automaticamente a descompactação e disponibilizar o conteúdo em uma propriedade chamada XML e se o componente estiver configurado para salvar em disco, o XML do CT-e descompactado será salvo.

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

Obrigado pela resposta.

Mas onde vou achar essa propriedade XML? Pois quando busco em pACBRCTe.WebServices.DistribuicaoDFe. ela não aparece. 

E outra pergunta, o componente converte o codigo zip que vem dentro do lote de Ctes fornecidos pela Sefaz? Só para deixar claro. Obrigado desde já!

  • Solution
Postado
var
  LDocZip: TdocZipCollectionItem;
begin
{...}
for I := 0 to Pred(ACBrCTe.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Count) do
begin
  LDocZip := ACBrCTe.WebServices.DistribuicaoDFe.retDistDFeInt.docZip[I];
  XML := LDocZip.XML;
  if (LDocZip.schema = schprocCTe) then
  begin
    ChaveAcesso := LDocZip.resCTe.chCTe;
    CnpjEmitente := LDocZip.resCTe.CNPJCPF;
    NomeEmitente := LDocZip.resCTe.xNome;
    ValorDocumento := LDocZip.resCTe.vNF;
    {...}
  end;
  if (LDocZip.schema = schprocEventoCTe) then
  begin { evento como cancelamento }
    ChaveAcesso := LDocZip.procEvento.chCTe;
    CnpjEmitente := LDocZip.procEvento.CNPJ;
    DataEvento := LDocZip.procEvento.dhEvento;
    Descricao := TpEventoToStr(LDocZip.procEvento.tpEvento) + ' - ' + LDocZip.procEvento.detEvento.descEvento;
    {...}
  end;
end;

 

Componente já faz tudo, segue um exemplo de como acessar os dados após a consulta.

  • Curtir 3
Postado
23 horas atrás, everson.turossi disse:

var
  LDocZip: TdocZipCollectionItem;
begin
{...}
for I := 0 to Pred(ACBrCTe.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Count) do
begin
  LDocZip := ACBrCTe.WebServices.DistribuicaoDFe.retDistDFeInt.docZip[I];
  XML := LDocZip.XML;
  if (LDocZip.schema = schprocCTe) then
  begin
    ChaveAcesso := LDocZip.resCTe.chCTe;
    CnpjEmitente := LDocZip.resCTe.CNPJCPF;
    NomeEmitente := LDocZip.resCTe.xNome;
    ValorDocumento := LDocZip.resCTe.vNF;
    {...}
  end;
  if (LDocZip.schema = schprocEventoCTe) then
  begin { evento como cancelamento }
    ChaveAcesso := LDocZip.procEvento.chCTe;
    CnpjEmitente := LDocZip.procEvento.CNPJ;
    DataEvento := LDocZip.procEvento.dhEvento;
    Descricao := TpEventoToStr(LDocZip.procEvento.tpEvento) + ' - ' + LDocZip.procEvento.detEvento.descEvento;
    {...}
  end;
end;

 

Componente já faz tudo, segue um exemplo de como acessar os dados após a consulta.

Boa tarde Everson! Consegui implementar seguindo o moledo que vc exemplificou acima. Resolvi o problema e implementei a classe que estava faltando no projeto. Obrigado pela dica. 

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