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á 639 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
  Em 18/10/2016 at 11:07, 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.

Expandir  

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)
  Em 19/10/2016 at 11:13, 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.

Expandir  

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
  Em 19/10/2016 at 19:48, 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.

Expandir  

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
  Em 19/10/2016 at 21:15, 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.

Expandir  

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
  Em 19/10/2016 at 21:15, 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.

Expandir  

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
  Em 19/10/2016 at 21:43, 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

Expandir  

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
  Em 19/10/2016 at 22:13, 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

Expandir  

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
  Em 19/10/2016 at 22:44, 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.

Expandir  

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
  Em 20/10/2016 at 10:55, 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.

Expandir  

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

 

  Em 20/10/2016 at 13:42, 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.

Expandir  

Obrigado Italo, BigWings pela ajuda!

Aparentemente esta tudo certo!

  • 4 meses depois ...
  • 1 mês depois ...
  • Membros Pro
Postado
  Em 19/10/2016 at 14: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.

 

Expandir  

Olá..

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

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

The popup will be closed in 10 segundos...