Ir para conteúdo
  • Cadastre-se

dev botao

Download de XML Duvida


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

Recommended Posts

  • Membros Pro
Postado

Boa Noite...

eu criei uma tela onde eu faço a consulta de todas as notas , e apos isso manifesto todas e depois faço o download do xmls com certificado digital utilizando o exemplo do acbrnfe.download.

minha duvida é...

existem casos qeu da erro 215 : erro de schema. e percebo que sao as notas com mais de 15 dias....

existe alguma outra forma de se fazer o download dos xmls com maior prazo ?

 

att

Tiago Passarella

  • 2 semanas depois ...
  • Consultores
Postado

Boa noite Tiago,

Você deve estar usando o trio: NFeConsultaDest, Manifestação do Destinatário e DownloadNFe, correto?

Pois bem, trate de mudar isso, não se deve mais usar o NFeConsultaDest e DownloadNFe e sim o DistribuicaoDFe.

Favor ler com muita atenção a Nota Técnica 2014/002 versão 1.01 que trata sobr o Web Service: Distribuição DF-e.

Esse recuso já existe no ACBrNFe a 2 anos.

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

entao eu estou fazendo o procedimento da seguinte forma...

1 - faço a consulta utilizando a DistribuicaoDFE onde volta todas as notas corretamente...

2 - faço a manifestação das notas utilizando o TDataModule.ACBrNFe1.EnviarEvento(StrToInt('1'));

onde esta manifestando e retornando corretamente a manisfestação.

3 - efetuo o download conforme codigo abaixo...

 

 TDatamodule.ACBrNFe1.DownloadNFe.Download.CNPJ := CNPJEmpresa.Replace('.','').Replace('-','').Replace('/','');
                       with TDatamodule.ACBrNFe1.DownloadNFe.Download.Chaves.Add do
                       begin
                             chNFe := cdsManifestoCHAVE.AsString;
                       end;
                       try
                              TDatamodule.ACBrNFe1.Download;
                              cstat :=                       TDatamodule.ACBrNFe1.WebServices.DownloadNFe.retDownloadNFe.retNFe[0].cStat;
                              if cstat<>632 then
                              BEGIN
                                    if cdsManifestoBAIXADO.AsString<>'B' then
                                    BEGIN
                                        Qry.SQL.Text := 'UPDATE TBMANIFESTO SET BAIXADO=''B'' WHERE ID=:p1';
                                        Qry.ParamByName('p1').AsInteger := cdsManifestoID.AsInteger;
                                        Qry.ExecSQL();
                                    END;
                              END;
                       except
                             // cstat := TDatamodule.ACBrNFe1.WebServices.DownloadNFe.retDownloadNFe.cStat;
                            //  motivo := TDatamodule.ACBrNFe1.WebServices.DownloadNFe.retDownloadNFe.xMotivo;
                            //  ShowMessage(PWideChar(IntToStr(cstat) + ' - ' + motivo));

                       end;

mas tipo de cada 50 notas... baixa umas 7 somente e tudo dentro do prazo...

alguem pode me ajudar ?

 

att

Tiago Passarella

  • Consultores
Postado

Bom dia Tiago,

Você leu a minha postagem anterior?

Vou repetir: 

Pois bem, trate de mudar isso, não se deve mais usar o NFeConsultaDest e DownloadNFe e sim o DistribuicaoDFe.

E você continua usando o DownloadNfe.

Pedi para você ler a Nota Técnica, leu?

O método DistribuicaoDFe nos retorna os resumos das NF-e, ou seja, faz a mesma coisa que o método ConsultaNFeDest e também nos retorna os XML completos da NF-e, ou seja, faz a mesma coisa que o método Download.

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
3 horas atrás, Italo Jurisato Junior disse:

Bom dia Tiago,

Você leu a minha postagem anterior?

Vou repetir: 

Pois bem, trate de mudar isso, não se deve mais usar o NFeConsultaDest e DownloadNFe e sim o DistribuicaoDFe.

E você continua usando o DownloadNfe.

Pedi para você ler a Nota Técnica, leu?

O método DistribuicaoDFe nos retorna os resumos das NF-e, ou seja, faz a mesma coisa que o método ConsultaNFeDest e também nos retorna os XML completos da NF-e, ou seja, faz a mesma coisa que o método Download.

Bom dia Italo, também estou com um pouco de duvidas de como funciona a Distribuição DFE

procurei no Demo, achei um pouco limitado, se não for te incomodar muito, poderia colocar um breve

exemplo de como utilizar as tags?

Grato

  • Consultores
  • Solution
Postado

Bom dia a todos,

Vocês chegaram a notar que existe um arquivo chamado DistribuicaoDFe.txt dentro da pasta: ...\Exemplos\ACBrDFe\ACBrNFe ?

Vocês leram a NT que mencionei em postagens anteriores?

Você entenderam que ao executar pela primeira vez o DistribuicaoDFe o que se obtêm são os resumos das notas (semelhante ao ConsultarNFeDest)?

E que ao executar o DistribuicaoDFe pela segunda (ou terceira) vez o que se obtêm são os XML completos das notas manifestadas (semelhante ao Download)?

Exemplo pratico:

Suponha que foram emitidas 70 notas contra o seu CNPJ.

UltNSU = 0

DistribuicaoDFe( cUF, CNPJ, UltNSU, '' ); // onde cUF e CNPJ são do destinatário da mercadoria

Teremos como resposta 50 resumos de notas

UltSU = ACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.ultNSU;

DistribuicaoDFe( cUF, CNPJ, UltNSU, '' );

Teremos como resposta os 20 resumos de notas restantes, uma vez que foram emitidas 70 notas contra o seu CNPJ, lembra?

UltSU = ACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.ultNSU;

Note que toda vez que executamos o DitribuicaoDFe devemos ler o valor de UltNSU pois sempre vamos usar essa informação na próxima vez que ele for executado.

Como eu sei que não tem mais resumos de notas, simples:

if ACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.cStat = 137
   then sTemMais := 'N'
   else sTemMais := 'S';

Se o Status for 137 significa que não tem mais documentos a serem lidos, logo devemos esperar por 1 hora para executar novamente o DistribuicaoDFe.

Bom, agora você deve realizar a manifestação das 70 notas cujos resumos foram retornados pelo DistribuicaoDFe.

Manifestado todas eles devemos executar:

DistribuicaoDFe( cUF, CNPJ, UltNSU, '' ); // lembre-se o valor de UltNSU se refere a última execução do DistribuicaoDFe, pois este sempre retorna o um novo valor para UltNSU, veja a linha abaixo.

UltSU = ACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.ultNSU;

As duas linhas acima deve-se serem executadas até que o Status seja 137.

Depois de manifestar as 70 notas (segundo o nosso exemplo) nessas ultimas execuções do DistribuicaoDFe podemos obter os XMLs completos dessas notas, bem como novos resumos de mais notas, resumos de eventos e até o XML completo de Eventos dessas notas manifestadas.

Os XML completos das notas, serão salvos em disco desde que a propriedade: Configuracoes.Arquivos.Salvar tenha o valor True e esses XML serão salvos na pasta pré definida em PathDownload.

Bom agora é com vocês, arregace as mangas e bom trabalho.

  • Curtir 5
  • Haha 1
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

Explicação muito boa e detalhada Italo! Parabéns. Um ultimo esclarecimento: caso o propriedade Configuracoes.Arquivos.Salvar esteja false, o componente simplesmente vai retornar apenas os resumos, ou terá alguma propriedade que retorna o xml tb?

Existe exemplo desses retornos para quem utiliza o Monitor no arquivo help do mesmo?

  • Moderadores
Postado

Bom dia,

Após chamar o DistribuicaoDFe você pode carregar o XML acessando a propriedade ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[ x ].XML.

Para saber o tipo do XML retornado - ele pode ser o resumo da NFe ou a NFe já autorizada, ou resumo de eventos, etc - consultar a propriedade ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[ x ].schema.

 

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

  • Membros Pro
Postado (editado)
8 horas atrás, Italo Jurisato Junior disse:

Bom dia a todos,

Vocês chegaram a notar que existe um arquivo chamado DistribuicaoDFe.txt dentro da pasta: ...\Exemplos\ACBrDFe\ACBrNFe ?

Vocês leram a NT que mencionei em postagens anteriores?

Você entenderam que ao executar pela primeira vez o DistribuicaoDFe o que se obtêm são os resumos das notas (semelhante ao ConsultarNFeDest)?

E que ao executar o DistribuicaoDFe pela segunda (ou terceira) vez o que se obtêm são os XML completos das notas manifestadas (semelhante ao Download)?

Exemplo pratico:

Suponha que foram emitidas 70 notas contra o seu CNPJ.

UltNSU = 0

DistribuicaoDFe( cUF, CNPJ, UltNSU, '' ); // onde cUF e CNPJ são do destinatário da mercadoria

Teremos como resposta 50 resumos de notas

UltSU = ACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.ultNSU;

DistribuicaoDFe( cUF, CNPJ, UltNSU, '' );

Teremos como resposta os 20 resumos de notas restantes, uma vez que foram emitidas 70 notas contra o seu CNPJ, lembra?

UltSU = ACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.ultNSU;

Note que toda vez que executamos o DitribuicaoDFe devemos ler o valor de UltNSU pois sempre vamos usar essa informação na próxima vez que ele for executado.

Como eu sei que não tem mais resumos de notas, simples:

if ACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.cStat = 137
   then sTemMais := 'N'
   else sTemMais := 'S';

Se o Status for 137 significa que não tem mais documentos a serem lidos, logo devemos esperar por 1 hora para executar novamente o DistribuicaoDFe.

Bom, agora você deve realizar a manifestação das 70 notas cujos resumos foram retornados pelo DistribuicaoDFe.

Manifestado todas eles devemos executar:

DistribuicaoDFe( cUF, CNPJ, UltNSU, '' ); // lembre-se o valor de UltNSU se refere a última execução do DistribuicaoDFe, pois este sempre retorna o um novo valor para UltNSU, veja a linha abaixo.

UltSU = ACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.ultNSU;

As duas linhas acima deve-se serem executadas até que o Status seja 137.

Depois de manifestar as 70 notas (segundo o nosso exemplo) nessas ultimas execuções do DistribuicaoDFe podemos obter os XMLs completos dessas notas, bem como novos resumos de mais notas, resumos de eventos e até o XML completo de Eventos dessas notas manifestadas.

Os XML completos das notas, serão salvos em disco desde que a propriedade: Configuracoes.Arquivos.Salvar tenha o valor True e esses XML serão salvos na pasta pré definida em PathDownload.

Bom agora é com vocês, arregace as mangas e bom trabalho.

Boa tarde Italo, muito obrigado pela ajuda, ja estou pelo menos tendo um norte para seguir.

Fiz as alterações que vc indicou, li tambem o arquivo txt onde tem instruções de como usar, me orientei por la e adaptei da seguiten maneira:

{if DM.AcbrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.cStat = 138
     then begin}

     ShowMessage(DM.ACBRNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Count.ToString());

     if DM.ACBRNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Count > 0 then begin

     j := DM.ACBRNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Count - 1;

     for i := 0 to j do
      begin
       sSerie   := '';
       sNumero  := '';
       sCNPJ    := '';
       sNome    := '';
       sIEst    := '';
       sNSU     := '';
       sEmissao := '';
       sTipoNFe := '';
       Valor    := 0.0;
       Impresso := ' ';

       Showmessage(DM.ACBRNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items.resNFe.chNFe);

       if DM.ACBRNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items.resNFe.chNFe <> ''
        then begin
         // Conjunto de informações resumo da NF-e localizadas.
         // Este conjunto de informação será gerado quando a NF-e for autorizada ou denegada.

         sChave := DM.ACBRNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items.resNFe.chNFe;

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

         case DM.ACBRNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items.resNFe.cSitNFe of
          snAutorizado: Impresso := 'Autorizada';
          snDenegado:   Impresso := 'Denegada';
          snCancelado:  Impresso := 'Cancelada';
         end;
        end;

        Qry.Close;
        Qry.SQL.Clear;
        Qry.SQL.Add('SELECT CODIGO AS CODIGO, CHAVE AS CHAVE FROM MANIFESTACAO WHERE CHAVE=:CHAVE');
        Qry.ParamByName('CHAVE').AsString:= sChave;
        Qry.Open;

        if Qry.FieldByName('chave').AsString = '' then begin

        IBManifestacao.Append;
        IBManifestacaoUltNSU.AsString := DM.ACBrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ultNSU;
        IBManifestacaoCNPJ.AsString := sCNPJ;
        IBManifestacaoEmitente.AsString := sNome;
        IBManifestacaoEmissao.AsDateTime := StrToDate(sEmissao);
        IBManifestacaoValor.AsFloat := Valor;
        IBManifestacaoCHAVE.AsString := schave;
        IBManifestacaoIE.AsString := sIEst;
        IBManifestacaoDataRecebto.AsDateTime := 0;
        IBManifestacaoSitNFe.AsString :=  Impresso;
//      IBManifestacaoSitConf.AsString := SituacaoManifesto[StrToInt(SituacaoManifDestToStr(cSitConf))];
        IBManifestacaoNUMNOTA.Value:= copy(schave,26,9);
        IBManifestacao.Post;
        end else begin
        if IBManifestacao.Locate('codigo', qry.fieldbyname('codigo').AsInteger, []) then begin
        IBManifestacao.Edit;
//      IBManifestacaoSitConf.AsString := SituacaoManifesto[StrToInt(SituacaoManifDestToStr(cSitConf))];
        IBManifestacaoNUMNOTA.Value:= copy(schave,26,9);
        IBManifestacao.Post;
        end;
       end;

      end; // Fim do For
    end
    else begin
     // Nenhum Documento Localizado para o Destinatário
     if DM.ACBRNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.cStat = 137
      then begin
       ShowMessage2(DM.ACBRNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.cStat.ToString() + '-Nenhum Documento Localizado para o Destinatário.')
      end
      else begin
       ShowMessage2('Falha ao Realizar Consulta: ' + DM.ACBRNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.cStat.ToString() + ':' + DM.ACBRNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.xMotivo);
      end;
    end;
 

Porém nos testes que fiz não retorna nenhum registro e vai direto para  cstat 137, mas

na pasta downloads ele baixou varios xmls.

O que sera que estou fazendo errado?

Grato

respostaDFE.png

Editado por rodrigoogioni
ERRO NO DIGITAR
  • Moderadores
Postado

Boa tarde,

No código de exemplo do ACBr tem um bloco repeat..until que executa até que o retorno seja 137, então só terá a mensagem de erro no final, mas executou todas as operações. Veja se não é esse o caso.

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

  • Membros Pro
Postado
58 minutos atrás, BigWings disse:

Boa tarde,

No código de exemplo do ACBr tem um bloco repeat..until que executa até que o retorno seja 137, então só terá a mensagem de erro no final, mas executou todas as operações. Veja se não é esse o caso.

Boa tarde! Sim, estou fazendo dessa forma:


     x := 0;
     erro:= 0;

     repeat
     // Rotina que vai realizar a consulta e armazenar no banco de dados os dados retornados da NFe encontrada
     // para futura Manifestação.

     Application.ProcessMessages;

     dm.ACBrNFe1.DistribuicaoDFe(verificacodigouf(dmx.TabEmpresaESTADO.Value), FMain.RemoveChar(dmx.TabEmpresaCNPJ.AsString), nsu.Text, '' );

     nsu.Text:= dm.ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.ultNSU;

     until dm.ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.cStat = 137;
 

Então ali no cstat não devia ser 137?

Grato

  • Moderadores
Postado

Pode usar dessa forma sim, sem problemas.

O que quis dizer é que as operações foram executadas, retornando o cStat 138, e no final do repeat..until retornou o 137, onde houve a mensagem de retorno.

As operações onde o cStat retornou 138 você só não viu acontecer, foi o que quis dizer.

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

  • Membros Pro
Postado
9 minutos atrás, BigWings disse:

Pode usar dessa forma sim, sem problemas.

O que quis dizer é que as operações foram executadas, retornando o cStat 138, e no final do repeat..until retornou o 137, onde houve a mensagem de retorno.

As operações onde o cStat retornou 138 você só não viu acontecer, foi o que quis dizer.

Boa noite!  Obrigado pela resposta.

Estou tentando descobrir onde pode estar a falha o que estou percebendo é que no trecho onde busca a chave de acesso esta retornando vazio, por isso os erros. Esta nesse trecho

if DM.AcbrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.cStat = 138
     then begin

     Showmessage('Chave de Acesso: ' + DM.ACBRNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items.resNFe.chNFe);

    // aqui retorna vazio

 

     j := DM.ACBRNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Count - 1;

     for i := 0 to j do
      begin
       sSerie   := '';
       sNumero  := '';
       sCNPJ    := '';
       sNome    := '';
       sIEst    := '';
       sNSU     := '';
       sEmissao := '';
       sTipoNFe := '';
       Valor    := 0.0;
       Impresso := ' ';

 

     // aqui ele faz tres vezes mas o chNFE retorna vazio.
       if DM.ACBRNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items.resNFe.chNFe <> ''
        then begin
     

 

    Tem alguma ideia do que posso estar fazendo errado?

 

Grato

 

  • Membros Pro
Postado
26 minutos atrás, BigWings disse:

Pode usar dessa forma sim, sem problemas.

O que quis dizer é que as operações foram executadas, retornando o cStat 138, e no final do repeat..until retornou o 137, onde houve a mensagem de retorno.

As operações onde o cStat retornou 138 você só não viu acontecer, foi o que quis dizer.

Boa noite, consegui fazer funcionar, ufa!

Agora uma duvida, as manifestações, continua como estavam antes certo?

Mas o download? Eu procuro naquela pasta aqueles arquivos baixados e uso eles, ou tenho que usar algum outro comando para para fazer o download original somente de uma nfe especifica?

Grato pela ajuda

  • Membros Pro
Postado
29 minutos atrás, rodrigoogioni disse:

Boa noite, consegui fazer funcionar, ufa!

Agora uma duvida, as manifestações, continua como estavam antes certo?

Mas o download? Eu procuro naquela pasta aqueles arquivos baixados e uso eles, ou tenho que usar algum outro comando para para fazer o download original somente de uma nfe especifica?

Grato pela ajuda

Por que nas pastas tem alguns xmls, mas por exemplo tem um xml em especifico que não foi encontrado. 

42161083064741000163550010004526401669635912-resNFe.xml

So veio esse arquivo.

Grato

  • Moderadores
Postado
29 minutos atrás, rodrigoogioni disse:

Por que nas pastas tem alguns xmls, mas por exemplo tem um xml em especifico que não foi encontrado. 

42161083064741000163550010004526401669635912-resNFe.xml

So veio esse arquivo.

Grato

Boa noite,

Esse é o resumo da NFe, você tem que fazer a manifestação se não foi feita e chamar o DistribuicaoDFe novamente para carregar o XML da nota autorizada.

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

  • Membros Pro
Postado
58 minutos atrás, BigWings disse:

Boa noite,

Esse é o resumo da NFe, você tem que fazer a manifestação se não foi feita e chamar o DistribuicaoDFe novamente para carregar o XML da nota autorizada.

Boa noite!

No meus testes deu certo, porem fui testar em um cliente, começou a fazer o processo e deu a mensagem de consumo indevido, para tentar depois de 1 hora.

Acho que ainda nao esta bem certo o meu codigo!

Tem alguma luz?

Grato

  • Consultores
Postado

Bom dia Rodrigo,

Nos seus testes, você usou o certificado do seu cliente?

Se sim, então você já baixou todos os resumos e notas destinadas a ele.

Toda vez que temos o status 137 temos que aguardar 1 hora antes de executar o processo novamente.

Isso evita o consumo indevido.

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
1 hora atrás, Italo Jurisato Junior disse:

Bom dia Rodrigo,

Nos seus testes, você usou o certificado do seu cliente?

Se sim, então você já baixou todos os resumos e notas destinadas a ele.

Toda vez que temos o status 137 temos que aguardar 1 hora antes de executar o processo novamente.

Isso evita o consumo indevido.

Bom dia Italo,

Como ja tinha uma rotina antes com a forma anterior de fazer o download, o ultimo NSU eu deixei o mesmo da outra rotina.

Acredito que ele tenha puxado todas as notas do cliente desde o começo de sua abertura porque baixou 572 notas.

Então deu a mensagem de consumo indevido. Na verdade não precisaria ter baixado as 572 notas porque elas ja

haviam sido baixadas. Tem alguma maneira de evitar isso?

Grato pela ajuda,

  • Consultores
Postado

Bom dia Rodrigo,

Sim, sempre utilizar o último NSU retornado na última execução do DistribuicaoDFe na próxima execução do mesmo.

Você pode também ler o valor de maxNSU e comparar com o ultNSU, se a diferença for muito alta algo em torno de 500, que seria necessário executar o DistribuicaoDFe 10 vezes para baixar tudo, faz com que a rotina baixe somente metade, e só depois de 1 hora baixe o resto.

Nesse meio tempo o usuário vai realizando a manifestação das novas notas.

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

 

3 horas atrás, Italo Jurisato Junior disse:

Bom dia Rodrigo,

Sim, sempre utilizar o último NSU retornado na última execução do DistribuicaoDFe na próxima execução do mesmo.

Você pode também ler o valor de maxNSU e comparar com o ultNSU, se a diferença for muito alta algo em torno de 500, que seria necessário executar o DistribuicaoDFe 10 vezes para baixar tudo, faz com que a rotina baixe somente metade, e só depois de 1 hora baixe o resto.

Nesse meio tempo o usuário vai realizando a manifestação das novas notas.

Obrigado Italo, BigWings pela ajuda!

Aparentemente esta tudo certo!

  • 4 meses depois ...
Postado
Em 18/01/2017 at 10:33, robert thallisson lopes disse:

sobre a questão de download tem como setar o diretório onde os xml baixados serão salvos;

Sim.

AcbrNFE1.Configuracoes.Arquivos.DownloadNFe.PathDownload := (LOCAL);

  • 1 mês depois ...
  • Membros Pro
Postado
Em 19/10/2016 at 12:39, BigWings disse:

Bom dia,

Após chamar o DistribuicaoDFe você pode carregar o XML acessando a propriedade ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[ x ].XML.

Para saber o tipo do XML retornado - ele pode ser o resumo da NFe ou a NFe já autorizada, ou resumo de eventos, etc - consultar a propriedade ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[ x ].schema.

 

Olá..

Caso retorno o xml completo a propriedade Schema vai ser igual a que ?

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