Ir para conteúdo
  • Cadastre-se

dev botao

Descomprimir XML retornado pela Sefaz.


Ver Solução Respondido por everson.turossi,
  • Este tópico foi criado há 2222 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á 2222 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.