Jump to content

Delphi chamada_delphi.png acbr.png

C6 chamada_c6.png botao.png

Download XML após Manifestação


Go to solution Solved by Italo Giurizzato Junior,
  • Este tópico foi criado há 1610 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro

Olá Italo, tudo bom?

Já estou usando conforme sua orientação para mim em tópico anterior tendo como o arquivo DistribuicaoDFe.txt em C:\ACBR\Exemplos\ACBrDFe\ACBrNFe.

Mas não consta (ou ao menos não achei) o processo para o download do XML, só para a busca das notas emitidas.

Link to comment
Share on other sites

  • Moderadores

Bom dia!
Se vc está usando o ACBrMonitorPLUS veja o link abaixo.  Caso esteja usando o componente, visualize o segundo post anterior a este do Celso que tem um exemplo. Pode te ajudar.

http://www.projetoacbr.com.br/forum/topic/37052-nfedownloadnfe-erro-servico-paralisado-sem-previsao/#comment-243192


logoacbr.pngConheça o Portal do Projeto ACBr

Ajude o Projeto ACBr crescer - Assine o SAC ACBr
Assine um dos planos de longa duração do SAC ACBr, obtenha Descontos Especiais, Parcele no Cartão e ainda ganhe Brindes Exclusivos. Saiba mais aqui

Conheça o ACBrLib, o ACBr de forma nativa para qualquer linguagem de programação. Saiba mais aqui

 

 

 

 

Link to comment
Share on other sites

  • Consultores

Bom dia a todos,

O web service DownloadNFe bem como o respectivo método não funcionam mais, pelo simples fato da SEFAZ ter desabilitado o Web Services de Download.

Para realizar a consulta das notas emitidas contra o CNPJ do destinatário da mercadoria bem como o Download do XML da nota que foi previamente manifestada pelo destinatário, devemos agora sempre usar o método DistribuicaoDFe.

Lembre-se que ao usar o DistribuicaoDFe temos uma lista com no máximo 50 XML, sendo que estes podem ser apenas resumos de notas ou eventos ou eventos ou notas.

Suponha que um empresa realizou 200 compras de diversos fornecedores, ao executar o DistribuicaoDFe teremos os primeiros 50 resumos dessas notas.

O usuário realiza a manifestação dessas 50 notas.

Ao executar novamente o DistribuicaoDFe, teremos como resposta os próximos 50 resumos.

Porque?

Os XML dos resumos bem como dos documentos completos possui um numero sequencial chamado de NSU - Numero Sequencial Único.

Se temos 200 resumos eles estão numerados de 1 até 200 (por exemplo), ao realizar a manifestação das primeiras 50 notas, os XML completos dessas notas serão numerados de 201 até 250.

Isso se nesse meio tempo não chegar na SEFAZ mais alguma nota ou evento.

Sendo assim os XML completos demora um pouco para chegar, pois temos que percorrer toda a lista.

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Link to comment
Share on other sites

  • Membros Pro

Olá Italo, 

Me perdoe, mas ainda não entendi.

No DistribuicaoDFe.txt eu tenho o modelo de como localizar as notas disparadas contra mim, até aí tudo bem... Por exemplo, no momento tenho 143 notas disparadas contra mim e consigo as seguintes informações com o médoto DistribuicaoDFe(dado exemplo do arquivo txt).

sChave := DMDFe.NFe.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].resNFe.chNFe;

         sSerie  := Copy(sChave, 23, 3);
         sNumero := Copy(sChave, 26, 9);
         sCNPJ := DMDFe.NFe.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].resNFe.CNPJCPF;
         sNome := DMDFe.NFe.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].resNFe.xNome;
         sIEst := DMDFe.NFe.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].resNFe.IE;
         case DMDFe.NFe.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].resNFe.tpNF of
          tnEntrada: sTipoNFe := 'E';
          tnSaida:   sTipoNFe := 'S';
         end;
         sNSU  := DMDFe.NFe.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].NSU;
         sEmissao := DateToStr(DMDFe.NFe.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].resNFe.dhEmi);
         Valor := DMDFe.NFe.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].resNFe.vNF;

         case DMDFe.NFe.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].resNFe.cSitNFe of
          snAutorizado: Impresso := 'A';
          snDenegado:   Impresso := 'D';
          snCancelada:  Impresso := 'C';
         end;

Você está falando que pelo próprio DistribuicaoDFe eu TAMBÉM consigo o XML das notas localizadas e previamente manifestadas.

Mas como? Qual o código? Não existe nenhum exemplo (ou ao menos eu não achei) no arquivo de texto que eu mencionei.

A única menção ao Download de XML de notas previamente manifestadas está no arquivo Download.txt, no mesmo local do DistribuicaoDFe.txt, mas como mencionou tal exemplo é inútil pois o webservice foi desativado.

Link to comment
Share on other sites

  • Consultores

Como dito anteriormente, ao executar o método DistribuicaoDFe temos como retorno até 50 XML.

O que vem a ser esses XML?

Eles podem ser resumos de notas, resumos de eventos, eventos ou notas.

Não necessariamente todos os XML retornados são do mesmo tipo, ou seja, em um retorno podemos ter 30 resumos de notas, mais 5 notas e o restantes eventos.

Se o componente estiver configurado para salvar os XML: Configuracoes.Arquivos.Salvar := True e a propriedade PathDownload com o caminho onde os XML devem ser salvos, o método salva automaticamente nessa pasta os XML dos resumos bem como dos documentos completos, por exemplo as notas.

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Link to comment
Share on other sites

  • Membros Pro
49 minutos atrás, Italo Jurisato Junior disse:

Como dito anteriormente, ao executar o método DistribuicaoDFe temos como retorno até 50 XML.

O que vem a ser esses XML?

Eles podem ser resumos de notas, resumos de eventos, eventos ou notas.

Não necessariamente todos os XML retornados são do mesmo tipo, ou seja, em um retorno podemos ter 30 resumos de notas, mais 5 notas e o restantes eventos.

Se o componente estiver configurado para salvar os XML: Configuracoes.Arquivos.Salvar := True e a propriedade PathDownload com o caminho onde os XML devem ser salvos, o método salva automaticamente nessa pasta os XML dos resumos bem como dos documentos completos, por exemplo as notas.

Perfeito, ocorreu exatamente o que falou...

Após BUSCAR as notas disparadas contra mim, apareceram um monte de arquivos *-resNFe.xml que fazem menção a tais notas localizadas, creio se tratarem dos resumos.

Agora após me manifestar sobre qualquer uma dessas notas, qual comando devo usar para resgatar o XML completo da mesma?

Edited by doidopb
Link to comment
Share on other sites

  • Consultores

Boa tarde,

Após manifestar as respectivas notas, você vai usar novamente o DistribuicaoDFe, como dito ele baixa os resumos e os documentos completos.

Os arquivos *-resNFe.xml se refere ao resumo de uma NF-e emitida contra o seu CNPJ.

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Link to comment
Share on other sites

  • 5 weeks later...
  • Membros Pro

Olá Italo, tudo bom?

Desculpe a demora, mas vamos lá.

Estou lendo e relendo o seu texto com as explicações, mas confesso que ainda estou com um pouco de dificuldade de entender essa logística do DistribuicaoDFe. Portanto estou realizando alguns testes.

Conforme sua orientação, estou fazendo o seguinte, teste que fiz hoje:

1º - Consultei as notas disparadas contra mim nos últimos 3 meses. Aqui reparei que as notas nas quais eu já havia manifestado, além do XML do resumo também vieram com o XML completo.

2º - A fim de testar, manifestei Ciência da Emissão da nota 55155 (que a princípio veio somente com o XML de resumo), e mandei buscar novamente notas disparadas contra mim, e conforme você disse foi salvo o arquivo do XML completo da nota 55155. Depois manifestei Ciência da Emissão da nota 3404 (que também só tinha o XML de resumo), mandei buscar novamente notas disparadas contra mim e foi salvo o arquivo do XML completo da nota 3404.

Pois bem, minhas dúvidas são:

1º - Estou fazendo corretamente para buscar o XML completo? 

2º - O arquivo do XML completo é salvo no Path configurado no componente, até aí tudo bem. Mas não existe nenhum comando no componente que me permita acesso direto ao conteúdo desse XML completo para que eu salve na minha base?

Desde já agradeço a atenção

Edited by doidopb
Link to comment
Share on other sites

  • Consultores

Boa noite,

Sim, é assim mesmo que funciona, devemos executar o método DistribuicaoDFe realizar a manifestação das notas e repetir o processo.

Com isso novos resumos serão retornados bem como os XML completos das notas já manifestadas.

Para armazenar o XML retornado no banco de dados já tentou fazer desta forma:

    sXML := ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[ x ].XML;

  • Like 2
Consultor SAC ACBr Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Link to comment
Share on other sites

  • Membros Pro

Perfeito, deu certo.

Agora aprofundando um pouco mais o assunto.

Você comentou lá no início sobre um exemplo com 200 notas fiscais emitidas contra mim, isso me gerou algumas dúvidas

O que eu entendi foi o seguinte:

  • Supondo que eu tenha 200 notas disparadas contra mim e nenhuma delas foi manifestada, ao realizar a busca online receberei uma lista com todas as 200 notas, mas apenas 50 XMLs de resumo (limite máximo)... É isso???
  • Aí depois eu busco online novamente e não receberei mais lista nenhuma (pois nenhuma outra nota foi disparada contra mim), mas eu recebo mais 50 XMLs de resumo (51 à 100). É isso???

 

Link to comment
Share on other sites

  • Consultores

Vamos a um exemplo:

Suponha que foram emitidas 200 notas contra o seu CNPJ, logo a numeração do NSU é de 1 a 200.

Ao executar o DistribuicaoDFe serão retornados os primeiros 50 resumos, ou seja, os NSU de 1 a 50.

A propriedade ultNSU vai conter o valor 50 e o valor de maxNSU é 200.

Vamos supor que mais nenhuma nota seja emitida contra o seu CNPJ e você realiza a manifestação dos 50 primeiros resumos.

Ao fazer isso, o XML completo das 50 notas manifestadas receberam os NSU de 201 a 250.

Ao executar o DistribuicaoDFe pela segunda vez serão retornados os próximos 50 resumos (NSU de 51 a 100), os valores de ultNSU será 100 e de maxNSU será 250, correto?

Vamos continuar supondo que mais nenhuma nota foi emitida contra o seu CNPJ e você se manifestou sobre esse outros 50 resumos.

A SEFAZ vai disponibilizar os XML completos dessas outras 50 notas com NSU de 251 a 300, esta entendendo o mecanismo desse Web Service?

A cada execução do DistribuicaoDFe consigo baixar da SEFAZ lotes de até 50 documentos que podem ser resumos de notas, resumos de eventos, eventos e notas.

Se inicialmente eu tinha 200 resumos, será necessário executar 4 vezes o DistribuicaoDFe para conseguir baixar tudo.

Se a medida que eu baixo um lote, já realizo a manifestação acabo liberando os XML completos das notas manifestadas e essas notas vão para o final da fila.

Se você manifestar as 200 notas, ao executar pela quinta vez o DistribuicaoDFe terá como retorno um lote de 50 XML das primeiras notas manifestadas.

Resumindo para baixar os 200 resumos será necessário executar o DistribuicaoDFe 4 vezes e mais essa quantidade de vezes para baixar as 200 notas.

Mas lembre-se que a qualquer momento alguém pode estar emitindo nota contra o seu CNPJ bem como eventos, como carta de correção ou até mesmo o cancelamento de alguma nota.

  • Like 1
Consultor SAC ACBr Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Link to comment
Share on other sites

  • Membros Pro

Então confirmando...

Fiz a primeira busca online e descobri que tenho 200 notas disparadas contra mim e quero fazer o download SOMENTE do XML completo da 200ª...

Para realizar tal download me manifesto sobre ela, daí eu tenho que buscar online mais 4 vezes, "rezando" pra não entrar outras notas nesse intervalo... Nossa, burocrático isso hein... Não tem como automatizar o download do XML completo dessa 200ª?

Desculpe a insistência na pergunta, mas é que achei muito burocrático mesmo. Como suponho que sua resposta não irá mudar, creio que eu terei que criar um loop buscando a existência de novas instâncias referentes a essa 200ª nota que acabo de manifestar, daí achando checo se trata-se de um XML Completo e mando para a minha base. Você tem um exemplo de código que faça isso?

PS: Outro detalhe, qual a diferença das propriedades ultNSU e maxNSU?

Obrigado pelos esclarecimentos

 

Link to comment
Share on other sites

  • Membros Pro
14 minutos atrás, André Ferreira de Moraes disse:

Vc pode usar o comando ACBrNFe1.DistribuicaoDFePorChaveNFe caso já saiba a chave da nota que deseja baixar.

No meu componente não existe essa função, somente a :

function TACBrNFe.DistribuicaoDFe(AcUFAutor: integer;
  ACNPJCPF, AultNSU, ANSU: String): Boolean;

 

Link to comment
Share on other sites

  • Consultores
  • Solution

Bom dia Doidopb,

Quando executamos o método DistribuicaoDFe ou DistribuicaoDFePorUltNSU é retornado um lote de até 50 documentos, documentos estes já informados na minha postagem anterior.

Nesse retorno temos os campo ultNSU (último Numero Sequencial Único) e maxNSU (máximo Numero Sequencial Único).

Suponha que na SEFAZ consta 70 documentos e que eles estejam numerados (NSU) de 101 a 170.

Ao executar um dos métodos acima, como dito, será retornado um lote com até 50 documentos.

Logo nesse retorno terei os documentos de 101 até 150, você concorda?

Nesse retorno o valor de ultNSU será 150, pois é o numero de NSU do último NSU que consta no lote.

E o valor de maxNSU será 170, pois é o numero NSU do último documento na SEFAZ, supondo que não entrou mais nenhum documento da base de dados da SEFAZ.

Ao executar novamente um dos métodos acima (informando no terceiro campo o valor 150), teremos os documentos cujo NSU vai de 151 até 170, ou seja os 20 restantes.

Nesse retorno os valores de ultNSU é 170 e de maxNSU é 170.

Quando os valores de ultNSU é igual a maxNSU significa que você baixou todos os documentos disponíveis na base de dados da SEFAZ.

Neste caso você deve aguardar algumas horas para realizar uma nova consulta.

No meu entendimento você deve se manifestar sobre todos os resumos de notas retornados.

Caso você não deseja ficar baixando os documentos até que apareça o XML completo da nota manifestada, basta usar o método que o André lhe mostrou.

Resumindo:

1. Loop - Executar DistribuicaoDFePorUltNSU até que os valores de ultNSU e maxNSU sejam iguais;

2. Manifestar sobre cada resumo de nota que conste no grid;

3. Aguardar algumas horas e retornar ao passo 1.

Observação: No passo 1 identificar os tipos de documentos retornados, se for resumo de nota, montar um grid, se for uma nota salvar em disco ou no banco de dados o XML da mesma.

  • Like 3
Consultor SAC ACBr Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Link to comment
Share on other sites

  • Membros Pro

Perfeito sua explicação Italo, muito obrigado.

Como faço pra saber se o retorno de uma consulta trata-se apenas de um XML de resumo de nota ou de um XML de uma nota completa (conforme mencionado em sua observação final)?

Link to comment
Share on other sites

  • Consultores

Boa tarde,

       if ACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[ i ].schema = schProcNFe then

      begin // XML completo de uma nota

         sXML := ACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[ i ].XML
      end;

schProcNFe = Nota Fiscal Completa,  

schresNFe = Resumo de uma Nota Fiscal,

schresEvento = Resumo de um Evento

schprocEventoNFe = Evento Completo,
         

  • Like 4
Consultor SAC ACBr Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Link to comment
Share on other sites

  • 2 months later...
  • Membros Pro

Olá senhores, finalmente efetuei a atualização de meus componentes, pois quero estar preparado para o uso da NFe 4.0.

Depois de atualizar, estou conseguindo enviar notas normalmente, além de conseguir realizar a busca dos documentos fiscais eletrônicos disparados contra mim, mas não consigo mais me manifestar, fica dando erro "Erro Interno: 0 Erro HTTP: 500".

O que pode ser?

Link to comment
Share on other sites

  • Membros Pro
2 horas atrás, José M. S. Junior disse:

Pode ser erro com a SEFAZ, certifique-se que o seu arquivo ACBrNFeServicos.ini esteja atualizado.

Olá meu amigo, acho que era erro na SEFAZ mesmo, voltou a funcionar.

Grato

Edited by doidopb
Link to comment
Share on other sites

  • 4 weeks later...
  • Membros Pro

Olá...Outra dúvida sobre manifestações...

Supondo que eu tente manifestar uma nota que já foi anteriormente manifestada pela mesma razão, recebo o erro de Duplicidade de Evento, até aí tudo bem.

Mas como resgato o XML desse evento enviado anteriormente?

Link to comment
Share on other sites

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.