Ir para conteúdo
  • Cadastre-se

dev botao

Download XML via DistribuicaoDFe


  • Este tópico foi criado há 2466 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro

 1º Faço a consulta conforme abaixo:

  Para primeira consulta o vULT_NSU := 0

  vULT_NSU := MaiorNum('xmlcfg','ultNSU', '');

  with DT_NFe.ACBrNFe1 do
  begin
    try
      Application.ProcessMessages;

      DistribuicaoDFe(DTModule.QrEmpresaIBGE_UF.Value,
                      SoNumeros(DTModule.QrEmpresacnpj.Text), IntToStr(vULT_NSU), '');

     //Salvo a lista das notas no BD
     //Também salvo os NSU no BD

     //DETALHE: Essa lista vem informando as notas desde ABRIL DE 2017.
  end;

  2º Faço a manifestação da lista encontrada na primeira busca.

  DT_NFe.ACBrNFe1.EventoNFe.Evento.Clear;
  with DT_NFe.ACBrNFe1.EventoNFe.Evento.Add do
  begin
    infEvento.cOrgao   := 91;
    infEvento.chNFe    := xmldfe.FieldByName('chNFe').AsString;
    infEvento.CNPJ     := SoNumeros(DTModule.QrEmpresacnpj.Text);
    infEvento.dhEvento := Now;
    infEvento.tpEvento := teManifDestConfirmacao;
  end;


  try
    //ENVIAR
    if DT_NFe.ACBrNFe1.EnviarEvento(xmldfe.FieldByName('ID').AsInteger) then
    begin
      //Aqui atualizo BD e informo que a nfe já foi MANIFESTADA
    end;


  3º Faço a consulta novamente utilizando o Último NSU encontrado na primeira consulta

  vULT_NSU := MaiorNum('xmlcfg','ultNSU', '');

  with DT_NFe.ACBrNFe1 do
  begin
    try
      Application.ProcessMessages;

      DistribuicaoDFe(DTModule.QrEmpresaIBGE_UF.Value,
                      SoNumeros(DTModule.QrEmpresacnpj.Text), IntToStr(vULT_NSU), '');


      Esse processo segue normalmente mas, só recebo os arquivos abaixo relacionados.


      {
        "1-eve.xml"
        "1-ped-eve"
        "-resNFe.xml"
        "20170621223452-dist-dfe"
        "20170621224254-con-dist-dfe"
      }

 

    Sigo repetindo os processos anteriores (1,2 e 3) e as a lista vem sendo atualizada,

    Até chegar a lista do o mês de Julho/2017.

    IMPORTANTE:
    Quando chega na ultima lista (Julho/2017):
    Eu recebo uns 25 XML completos só que do mês de Abril/2017.

De já agradeço muito pela ajuda...

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde Francisco,

Os XMLs completos do mês de Abril retornados se referem a notas que foram previamente manifestadas?

Lembre-se que se no Ambiente Nacional constar 500 resumos de notas, ao manifestar as 50 primeiras, essas terão os seus NSU numerados de 501 a 550.

Sendo assim enquanto você não "baixar" os demais 450 resumos através do DistribuicaoDFe, não vai obter os XMLs das notas manifestadas.

Portanto o que temos é uma fila, todo documento novo (resumo de nota, resumo de evento, evento) bem como os XMLs das notas manifestadas sempre vão para o final da fila.

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

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
Boa tarde ítalo, veja abaixo os últimos NSU recebidos.
E sobre as notas de abril que recebo os xml é exatamente porque informo "0" NSU para iniciar o processo pela primeira vez logo essas são as primeiras a serem manifestadas, mas a manifestação continua normalmente até a ultima nota encontrada.
 
<?xml version="1.0" encoding="UTF-8" ?>
  <tpAmb>1</tpAmb>
  <verAplic>1.1.9</verAplic>
  <cStat>138</cStat>
  <xMotivo>Documento(s) localizado(s)</xMotivo>
  <dhResp>2017-07-08T01:12:51-03:00</dhResp>
  <ultNSU>000000000004714</ultNSU>
  <maxNSU>000000000005439</maxNSU>
- <loteDistDFeInt>
  <docZip NSU="000000000004665"
  <docZip NSU="000000000004668"
Link para o comentário
Compartilhar em outros sites

  • Consultores

Francisco,

Você só deve passar como UltNSU o valor zero uma unica vez, depois disso sempre tem que informar o UltNSU retornado.

E sempre fazer a consulta usando o método: DistribuicaoDFeporUltNSU.

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

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Ítalo foi exatamente o que fiz sobre o "UltNSU" informei zero só na primeira vez que consultei daí pra frente sempre consulto usando o último NSU recebido.

//DistribuicaoDFe(21,07472246000105, 4714, '');

//Veja esse código abaixo está correto?

      DistribuicaoDFe(DTModule.QrEmpresaIBGE_UF.Value, SoNumeros(DTModule.QrEmpresacnpj.Text), IntToStr(vULT_NSU), '');

 

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa noite Francisco,

Desculpe pela demora, se possível você poderia anexar os arquivos de envio e de retorno gerados pelo DistribuicaoDFe?

Um detalhe importante, na sua postagem anterior você diz esta retornando notas ou resumos de Abril, correto?

Lembre-se que no Ambiente Nacional ficam a disposição documentos (resumo de notas, resumo de eventos, notas e eventos) dos últimos 3 meses.

Outro detalhe, veja:

  <ultNSU>000000000004714</ultNSU>
  <maxNSU>000000000005439</maxNSU>
 
Nesse retorno temos o ultimo NSU = 4714 que devemos utilizar na próxima execução do DistribuicaoDFe e temos a informação maxNSU = 5439.
Ou seja, ainda tem 725 documentos para serem baixados, provavelmente de maio e junho.
Outra coisa importante, suponha que o documento 4714 seja um resumo de uma nota, ao realizar a manifestação da mesma o NSU do XML completo será maior que 5439.
Portanto, enquanto não baixar os 725 documentos não vai baixar o XML da NF-e manifestada.
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

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Beleza italo, veja só anexei alguns dos arquivos que estou recebendo.

Também anexei uma imagem baseada na consulta a DistribuiçãoDFe desses arquivos.

Por exemplo:

DT_NFe.ACBrNFe1.DistribuicaoDFe(StrToInt(cUFAutor),CNPJ,4325,ANSU);

Eu executo essa consulta e não recebo nenhum XML da NFe continuo recebendo somente os arquivos abaixo:

    "1-eve.xml"
        "1-ped-eve"
        "-resNFe.xml"
        "20170621223452-dist-dfe"
        "20170621224254-con-dist-dfe"

 

 

49-eve.xml

49-ped-eve.xml

50-eve.xml

20170713014537-con-dist-dfe.xml

20170713014539-dist-dfe.xml

21170400405762000178550010002756671027566764-resNFe.xml

21170401838723032240550010002107501834254751-resNFe.xml

21170401838723032240550010002117751764012898-resNFe.xml

21170403145305000180550010008413331111013045-resNFe.xml

2102002117046490429500215755003000034940141336585601-procEventoNFe.xml

2102002217040482078500010855001000068872135706299101-procEventoNFe.xml

2102002217040589154600010155002000124786111102404701-procEventoNFe.xml

DistribuicaoDFe_UltimoNSU.png

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Francisco,

Ao executar a linha: DT_NFe.ACBrNFe1.DistribuicaoDFe(StrToInt(cUFAutor),CNPJ,4325,ANSU); não ocorre erro?

Pois fora o primeiro parâmetro que é do tipo Integer todos os demais são String.

Logo o numero o último NSU deveria estar entre aspas e outra coisa o valor de ANSU tem que ser uma string vazia.

Em vez de usar o método DistribuicaoDFe aconselho a usar o DistribuicaoDFePorUltNSU, veja sintaxe abaixo:

    function DistribuicaoDFePorUltNSU(AcUFAutor: integer; ACNPJCPF,  AultNSU: String): Boolean;

Na sua aplicação ficaria assim:

aUltNSU := '4325';

DT_NFe.ACBrNFe1.DistribuicaoDFePorUltNSU(StrToInt(cUFAutor), CNPJ, aUltNSU);

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

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Ao executar a linha: DT_NFe.ACBrNFe1.DistribuicaoDFe(StrToInt(cUFAutor),CNPJ,4325,ANSU); não ocorre erro?

Foi só um exemplo que citei, eu passo os valores conforme você falou tipo string para NSU e para ANSU passo uma string vazia "".

Veja só você tocou em ponto importante:

DT_NFe.ACBrNFe1.DistribuicaoDFePorUltNSU(StrToInt(cUFAutor), CNPJ, aUltNSU);

Não tenho essa função no acbr que está na minha máquina, pois ainda não migrei o projeto ainda uso o D7. Existe uma forma de implementar ela? Veja que dá um erro quando coloco ela.

DistribuicaoNFe.png

Link para o comentário
Compartilhar em outros sites

  • Moderadores
3 minutos atrás, FRANCISCO908 disse:

Não tenho essa função no acbr que está na minha máquina, pois ainda não migrei o projeto ainda uso o D7. Existe uma forma de implementar ela? Veja que dá um erro quando coloco ela.

Os fontes atuais ainda são compatíveis com Delphi 7.

djsystem-logo.png
 youtube.png facebook.png instagram.png linkedin.png
André Ferreira de Moraes | Analista de Sistemas
www.djsystem.com.br | www.djpdv.com.br
www.tefhouse.com.br | www.lambretinha.com.br
Link para o comentário
Compartilhar em outros sites

  • Moderadores
3 minutos atrás, FRANCISCO908 disse:

Boa tarde!

André, obrigado pelo contato.

Por favor dê uma olhada na imagem anexa e me fale porque não consigo usar a função:

DistribuicaoDFePorUltNSU

Tenho que declarar alguma coisa?

De já agradeço muito.

Vc mesmo respondeu, vc está com os fontes desatualizados e essa função não existe nos seus fontes atuais. Atualize seus fontes e refaça os testes.

  • Curtir 1
djsystem-logo.png
 youtube.png facebook.png instagram.png linkedin.png
André Ferreira de Moraes | Analista de Sistemas
www.djsystem.com.br | www.djpdv.com.br
www.tefhouse.com.br | www.lambretinha.com.br
Link para o comentário
Compartilhar em outros sites

  • Membros Pro

André, primeiro quero agradecer sua colaboração.

Veja atualizei os fontes ok, porém continuo sem conseguir baixar os XML da NFe, veja um exemplo de código abaixo, e um arquivo anexo a este.

Var
  i: integer;
  cUFAutor, CNPJ, ultNSU, ANSU: string;
begin
  ConfigurarNFe;

  cUFAutor := SoNumeros(DTModule.QrEmpresaIBGE_UF.Text);
  CNPJ     := SoNumeros(DTModule.QrEmpresacnpj.Text);
  ultNSU   := '4331';

  // Tentei dessa forma e não baixo
  //DT_NFe.ACBrNFe1.DistribuicaoDFe(StrToInt(cUFAutor), CNPJ, ultNSU, '');

  // Tentei dessa forma e não baixo
  //DT_NFe.ACBrNFe1.DistribuicaoDFePorUltNSU(StrToInt(cUFAutor), CNPJ, ultNSU);

  // Tentei dessa forma e não baixo
  DT_NFe.ACBrNFe1.DistribuicaoDFePorNSU(StrToInt(cUFAutor), CNPJ, ultNSU);


  case DT_NFe.ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.cStat of
  138: begin
    for I := 0 to DT_NFe.ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Count - 1 do
    begin
      case DT_NFe.ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items.schema of
        schprocNFe: ;       // NF-e
        schresNFe: ;        // Resumo de NF-e
        schresEvento: ;     // Resumo de Evento
        schprocEventoNFe: ; // Evento
      end;
    end;
  end;
  137: ; // Nenhum documento retornado
end;

Importante: Já consulta pela chave tá baixando normal o xml

DT_NFe.ACBrNFe1.DistribuicaoDFePorChaveNFe(StrToInt(cUFAutor),CNPJ,SoNumeros(CDSNotasChave.Text));

 

20170714011816-dist-dfe.xml

Link para o comentário
Compartilhar em outros sites

  • Moderadores

A consulta ACBrNFe1.DistribuicaoDFe(StrToInt(cUFAutor), CNPJ, ultNSU, ''); deve ser feita enquanto o ultNSU for menor que o maxNSU para que todos os arquivos sejam baixados. Todos os demais comandos irão baixar documentos específicos ligados ao NSU ou a chave.

Se vc recebeu o resumo de uma NFe no NSU X e depois fez a manifestação, a nota completa estará em outro NSU, não adianta tentar baixar o mesmo NSU para obter o XML completo.

 

  • Curtir 1
djsystem-logo.png
 youtube.png facebook.png instagram.png linkedin.png
André Ferreira de Moraes | Analista de Sistemas
www.djsystem.com.br | www.djpdv.com.br
www.tefhouse.com.br | www.lambretinha.com.br
Link para o comentário
Compartilhar em outros sites

  • Membros Pro

A consulta ACBrNFe1.DistribuicaoDFe(StrToInt(cUFAutor), CNPJ, ultNSU, ''); deve ser feita enquanto o ultNSU for menor que o maxNSU.

André fiz conforme você orientou, porém continuo na mesma a cada click em consultar recebo 50 resumos iniciados a partir do dia 03/04/2017.

E assim sigo pegando um ultimo NSU e incluindo na nova consulta até que chega os resumos do dia 01/07/2017.

Ao chegar nesse dia recebo 38 arquivos xml completos mas todos referentes ao mês de abril de 2017.

Você falou que devo consultar enquanto o ultNSU for menor que o MAXnsu, porem quando recebo os resumos do dia 01/07/2017 junto com os xml de abril posso clicar quantas vezes eu quiser em nova consulta que o NSU não muda continua sempre o mesmo.

veja arquivo anexo.

 

20170714235924-dist-dfe.xml

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Francisco,

Eu faria o seguinte:

Passo 1. Executar o DistribuicaoDFePorUltNSU (terá como resposta no máximo 50 documentos);

Passo2. Desses até 50 documentos identificar os que são resumos de notas e apresenta-los em um Grid.

Passo3. Manifestar cada uma dessas notas listadas no Grid.

Passo4. Voltar ao Passo1 enquanto o UltNSU for menor que MaxNSU.

Dentro desse Loop é importante salvar no banco de dados o valor do UltNSU e permitir que o usuário sai dele a qualquer momento.

E ao executar novamente essa rotina sempre levar em conta o valor do UltNSU salvo no banco de dados.

Outra dica, existe um arquivo TXT chamando DistribuicaoDFe dentro da pasta: ...\Exemplos\ACBrDFe\ACBrNFe, esse fragmento de código se utiliza do método DistribuicaoDFe mas aconselho a utiliza o método DistribuicaoDFePorUltNSU.

Espero ter ajudado.

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

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Boa noite!

Executei DistribuicaoDFePorUltNSU, salvei a lista no BD em seguida fiz o manifesto, consultei...

Continuo repetindo o processo com o objetivo de que fiquem iguais  UltNSU e MaxNSU, porem sem sucesso pois posso clicar quantas vezes eu quiser mais quando chega nas ultimas notas ele nao muda. Vejam arquivos anexos.

Por enquanto só tá funcionando DistribuicaoDFePorChaveNFe.

20170721002858-con-dist-dfe.xml

20170721002902-dist-dfe.xml

20170721002908-con-dist-dfe.xml

20170721002912-dist-dfe.xml

20170721002942-con-dist-dfe.xml

20170721002945-dist-dfe.xml

20170721002947-con-dist-dfe.xml

20170721002951-dist-dfe.xml

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde Francisco,

Você abriu os XMLs (*-con-dist-dfe.xml) através de um navegador?

Se sim, notou que todas as 4 consultas você esta passando sempre o valor 4631 como sendo o último NSU?

Acredito que você ainda não entendeu como é que a coisa funciona.

Vou pegar o retorno da primeira consulta, ou seja, o XML: 20170721002902-dist-dfe.xml

Nele consta: 

(...)

<ultNSU>000000000004801</ultNSU>

<maxNSU>000000000005502</maxNSU>

(...)

O NSU do primeiro documento retornado nesse XML é: 4752 e o último é: 4801

Se fizermos o seguinte calculo 4801 - 4752 + 1 = 50, ou seja, foram retornado 50 documentos conforme já explicado.

Sendo assim a próxima execução do DistribuicaoDFePorUltNSU deveremos informar o valor 4801 e não 4631.

Passando o valor 4801 como sendo o ultNSU teremos mais 50 documentos numerados de 4802 a 4851 e nas Tag ultNSU e maxNSU teremos os valores 4851 e 5502 (ou maior).

Consequentemente a próxima execução do DistribuicaoDFePorUltNSU deveremos informar o valor 4851 como sendo o valor de ultNSU (terceiro parâmetro).

 Espero ter passado de forma mais clara agora.

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

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

×
×
  • 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...