Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

  • Membros Pro
Postado (editado)

Boa tarde,

Estou querendo implementar a consulta de notas destinadas para posterior confirmações das operações das NFes pelo usuário.

Pelo que entendi, faz-se necessário buscar o último NSU disponível na receita. No caso, como é a primeira pesquisa, tenho que informar como último NSU = 0 para que sejam pesquisados os últimos 15 dias, está correto até aqui?

Muito bem. Faço a pesquisa por um loop que faz a consulta até que indCont <> icPossuiMaisDocumentos, sempre implementando o último NSU. Porém, cada loop, traz apenas 100 mil NSU. No terceiro ou quarto loop já dá erro de consumo indevido. Pelo que andei vendo nas NT, é preciso um intervalo de 3 minutos entre cada consulta. Mas acredito que nos últimos 15 dias tenham sido emitidas milhões e milhões de notas. Se eu definir mesmo esse intervalo 3 minutos no loop, a consulta demoraria dias, não é?

Como os colegas estão fazendo nesses casos?

Obrigado!

 

 

Editado por valdirdill

Valdir Dill

Rio de Janeiro - RJ

 

 

  • Consultores
Postado

Boa tarde Valdir,

Esqueça o método ConsultaNFeDest passe a usar o DistribuicaoDFe,

Mais detalhes leia o Manual ACBrNFe versão 1.04 que encontra-se dentro da pasta ...\Doctos\Manuais

Com o DistribuicaoDFe não vai ocorrer o problema de Consumo indevido.

  • Curtir 2
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

  • Membros Pro
Postado

Bom dia,

Iniciei a consulta pelo ACBrNFe1.DistribuicaoDFe(UF, CNPJ, 0, ''). Nesse passo tudo certo. Depois da execução desse comando, recebi o 20150814221822-dist-dfe.xml como retorno. 

Minha dificuldade está em como tratar esse arquivo, já que o conteúdo e sua tag <loteDistDFeInt>, que veio com 34 itens, está compactado.

Já li todos os post do fórum sobre o assunto e analisei o exemplo do Acbr, mas não estou conseguindo evoluir.

Por favor, gostaria de dicas sobre os próximos passos. Pelo que entendi, agora eu teria que descompactar o arquivo e depois varrer os itens para ver que tipo de documento é cada item, certo? Mas como fazer essa leitura? Quais os comandos?

Obrigado!

 

Valdir Dill

Rio de Janeiro - RJ

 

 

Postado

Valdirdill blz...

Tive as mesmas dificuldades que você no início do projeto e com a ajuda deste incrível fórum e em especial de algumas pessoas daqui, e... claro dos manuais e notas técnicas alem de todos os comentários e posts disponíveis aqui também, consegui evoluir e hoje está indo tudo como deveria... Como o gradeza desse fórum é compartilhar... segue um exemplo da maneira que eu faço (lembrando que pode talvez não ser a mais correta pois existem diversas formas de se construir uma ponte e cada um vai usar o seu conhecimento e tecnologia disponível para construí-la desde que fique firme e não vá cair não é mesmo...rsrsrs) 

wUtlNSU := Ultimo NSU pesquisado e gravado em alguma tabela do seu BD.
xUF := UF da empresa que usa seu aplicativo para realizar as pesquisas.
CNPJ := CNPJ da empresa que usa seu aplicativo = CNPJ do certificado digital.

xStat := 138;
while xStat = 138 do
begin
    ACBrNFe1.DistribuicaoDFe(xUF,CNPJ,wUltNSU,'');
    
    for i := 0 to ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Count - 1 do
    begin
      //A partir daqui vc extrai as informações retornadas de cada arquivo xml 
      //E se for o caso grava as informações em tabelas do seu banco de dados
      //para consultas posteriores das informações já armazenadas, não sendo 
      //necessário um nova pesquisa ao webserviceDFe para isso
      .
      .
      .
      //Aqui você deve gravar o ultimo nsu retornado em um campo de alguma tabela
      //do seu BD para que a próxima pesquisa seja a partir desse ultimo nsu
      wUltNSU  := ultNSU;
    end;
    
    // Aqui retorna o status da pesquisa e quando ele for diferente de 138 interrompe o loop... 
    // E nesse caso, aguardar o intervalo mínimo de 1 hora entre as pesquisas conforme
    // Manual de Integração evitando assim o bloqueio por consumo indevido
    xStat := ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.cStat;
end;

 É claro que você pode e deve ajustar da maneira que melhor lhe atender, incluindo blocos try except, separando informações resumidas das informações completas, extraindo se for o caso, as cartas de correções eletrônicas, etc... enfim, acredito que você agora consiga evoluir a partir desse raciocínio básico, o restante é usar a criatividade e sem dúvida o que te dará uma ampla visão é de fato conhecer os manuais e as notas técnicas que você vai encontrar tanto aqui no fórum quanto no site nfe.fazenda.gov.br.

Espero que te ajude.

 

Márcio M. Camilo

  • Curtir 6
  • Membros Pro
Postado (editado)

Boa tarde Marcio,

Obrigado pela dica. Até essa parte eu até tinha feito. Minha dificuldade maior é como saber o que é evento, o é nota de fato. Por exemplo, no arquivo anexo tem 50 linhas dentro da tag  <loteDistDFeInt>.  Algumas linhas com "<docZip NSU="000000000000059" schema="resNFe_v1.00.xsd">H4sIAA..." e outras " <docZip NSU="000000000000094" schema="procNFe_v3.10.xsd">H4sIAAAAAAAEA...".

Como tratar isso que está sendo minha dúvida. Tentei desta forma

 

Boa tarde Marcio,

Obrigado pela dica. Até essa parte eu até tinha feito. Minha dificuldade maior é como saber o que é evento, o é nota de fato. Por exemplo, no arquivo anexo tem 50 linhas dentro da tag  <loteDistDFeInt>.  Algumas linhas com "<docZip NSU="000000000000059" schema="resNFe_v1.00.xsd">H4sIAA..." e outras " <docZip NSU="000000000000094" schema="procNFe_v3.10.xsd">H4sIAAAAAAAEA...".

Como tratar isso que está sendo minha dúvida. Tentei desta forma

 for I := 0 to AcbrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Count-1 do
  begin               
   VChave := AcbrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items.resNFe.chNFe;
   if AcbrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items.resNFe.cSitNFe = snAutorizado then
    SituacaoNota := 'Autorizada';
  end; 

Nessa rotina acima, todas as alinhas são listadas como autorizadas e em duplicidade. Por exemplo, o NSU 59 e 94 têm a mesma nota. Já a nota 17022 do NSU 81 é uma nota cancelada. 

Poderia me dar uma dica sobre isso?

Obrigado!

 

 

20150818180402-dist-dfe.xml

Editado por valdirdill

Valdir Dill

Rio de Janeiro - RJ

 

 

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

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

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