Ir para conteúdo
  • Cadastre-se

dev botao

DFe - Download apenas dos resumos


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

Recommended Posts

Pessoal boa noite, gostaria de pedir ajuda de vocês, em tentar resolver uma dúvida que estou tendo, na verdade não estou conseguindo resolver. Já li a NT 2014.002, e alguns post, daqui do fórum, mas ainda não conseguir resolver.

Para baixar o xml completo, o 1º passo é dar o manifesto das notas, aguardar um tempo, só ai então poderá baixa-la. Até ai tudo bem, eu dei o manifesto, mas só está me retornando esses arquivos anexados. 

Já utilizei para baixar este método: ACBrNFe1.DistribuicaoDFePorChaveNFe(29,EdtCNPJ.Text,ChaveDeAcesso), mas não baixa o xml completo, apenas uns arquivos iguais aos anexados.

Também utilizei o método de consulta pelo NSU, mas ainda assim não consigo, ter um progresso. Para ficar melhor o entendimento, irei colocar, como estou fazendo para consultar pelo NSU. Lembrando que, a partir daí eu faço o manifesto.

Desde já, gostaria de agradecer ao apoio de todos.

procedure Tfrm_principal.SpeedButton44Click(Sender: TObject);
var
 CNPJ, Impresso, sChave, sEmissao, sCNPJ, sNome, sNumero, sSerie,
 sIEst, sNSU, sTipoNFe, ultNSU, sStat, sMotivo, sTemMais, sUltimoNSU, ANSU, utNSU,
 caminho, xml: String;
 Valor: Double;
 i, j, k, codcidade, iEvento, icount, codStatus, ult_cod: integer;
begin

  cdsManifestacao.EmptyDataSet;
  codcidade := 29;

 ibqUltNsu.Open;
 ultnsu := ibqUltNsuMAX.Text; 
 if not (InputQuery('Numero do ultimo NSU','',ultNSU)) then
   exit;
 ibqUltNsu.close;
 // ======== Dados do Emitente =============================================
 ibqEmpresaDFe.Close;
 ibqEmpresaDFe.Active:=True;
 ibqEmpresaDFe.Open;

 if copy(ibqEmpresaDFeCNPJ_EMPRESA.AsString,10,4) <> '0000'
  then CNPJ := Copy(ibqEmpresaDFeCNPJ_EMPRESA.AsString, 1, 14)
  else CNPJ := Copy(ibqEmpresaDFeCNPJ_EMPRESA.AsString, 1, 9) +
               Copy(ibqEmpresaDFeCNPJ_EMPRESA.AsString, 14, 1);

 MemoStatus.Lines.Add('------------------------------------------------------');
 MemoStatus.Lines.Add(' =>  Consultando NFe Destinadas');
 MemoStatus.Lines.Add('------------------------------------------------------');

 Memo1.Text := '';
 k := 0;
 repeat
   inc(k);
   ACBrNFe1.DistribuicaoDFePorUltNSU(codcidade, CNPJ, ultNSU);

   sStat   := IntToStr(ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.cStat);
   sMotivo := ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.xMotivo;

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

   sUltimoNSU := ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.ultNSU;

//   GravaUltimaConsulta;

   if ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.cStat = 138 then
     begin
     MemoStatus.Lines.Add(' Documento Localizado para o Destinatário');
     MemoStatus.Lines.Add(' Utilizar o número que esta no campo: Último NSU');
     MemoStatus.Lines.Add(' Para uma nova pesquisa.');
     MemoStatus.Lines.Add(' ');

     j := 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 := ' ';

       if ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items.resDFe.chDFe <> ''
        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 := ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items.resDFe.chDFe;

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

         case ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items.resDFe.cSitDFe of
          snAutorizado: Impresso := 'A';
          snDenegado:   Impresso := 'D';
          snCancelado:  Impresso := 'C';
         end;

        end;

       // Registra no Banco de Dados as Notas Retornadas pela Consulta


       cdsManifestacao.open;
       ult_cod := cdsManifestacaocodigo.Value + 1;
       cdsManifestacao.append;
       cdsManifestacaocodigo.Value := ult_cod;
       cdsManifestacaoDataEvento.Text := sEmissao;
       cdsManifestacaochave.Text := sChave;
       cdsManifestacaoProtocolo.Text := sNumero;
       cdsManifestacaocnpj.Text := sCNPJ;
       cdsManifestacaonome.Text := sNome;
       cdsManifestacaoIE.Text := sIEst;
       cdsManifestacaotipo.Text := sTipoNFe;
       cdsManifestacaoNSU.Text := sNSU;
       if Impresso = 'A' then
          begin
            cdsManifestacaosituacao.text := 'Autorizado';
          end;
       if Impresso = 'D' then
          begin
            cdsManifestacaosituacao.Text := 'Denegado';
          end;
       if Impresso = 'C' then
          begin
            cdsManifestacaosituacao.Text := 'Cancelado';
          end;

       cdsManifestacaovalor.Text := FloatToStr(valor);
       pgRespostas.ActivePageIndex := 11  ;

      end;

     end   // Fim do For

    else begin
     // Nenhum Documento Localizado para o Destinatário
     if ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.cStat = 137
      then begin
       MemoStatus.Lines.Add(' Nenhum Documento Localizado para o Destinatário');
       MemoStatus.Lines.Add(' Utilizar o número que esta no campo: Último NSU');
       MemoStatus.Lines.Add(' Para uma nova pesquisa ('+edtUltNSU.text+').');
       MemoStatus.Lines.Add(' ');
      end
      else begin
       MemoStatus.Lines.Add(' Falha ao realizar a consulta.');
       MemoStatus.Lines.Add('  ' + sStat + ' - ' + sMotivo);
       MemoStatus.Lines.Add(' ');
      end;
    end;

//   MontaChkLista;
 until (k = strtointDef(edtConsultas.text,1)) or (sTemMais = 'S');

 if sTemMais = 'S'
  then Memo1.Text := IntToStr(k) + ' Consultas Realizadas e tem mais Documentos.'
  else Memo1.Text := IntToStr(k) + ' Consultas Realizadas e não tem mais Documentos.';

// AtivaBotao;
//end;
   if messagedlg('Deseja gravar nota?',mtConfirmation,[mbYes,mbNo], 0) =mryes then
       begin
          cdsManifestacao.First;
          while not cdsManifestacao.Eof do
             begin
              dm_dados.tbl_dfe.open;
           if dm_dados.tbl_dfe.Locate('NSU_DFE',cdsManifestacaoNSU.Text,[loCaseInsensitive,loPartialKey]) then
              begin
                Showmessage('NSU existente no banco de dados');
              end;
            if not (dm_dados.tbl_dfe.Locate('NSU_DFE',sNSU,[loCaseInsensitive,loPartialKey])) then
              begin
                dm_dados.tbl_dfe.open;
                dm_dados.tbl_dfe.Last;
                ult_cod := dm_dados.tbl_dfeCOD_DFE.Value+1;
                dm_dados.tbl_dfe.insert;
                dm_dados.tbl_dfeCOD_DFE.Value := ult_cod;
                dm_dados.tbl_dfeDTMANISFESTO_DFE.Text := cdsManifestacaoDataEvento.Text;
                dm_dados.tbl_dfeCHAVE_DFE.Text := cdsManifestacaochave.Text;
                dm_dados.tbl_dfeCODSEG_DFE.Text := cdsManifestacaoProtocolo.Text;
                dm_dados.tbl_dfeCNPJ_DFE.Text := cdsManifestacaocnpj.Text;
                dm_dados.tbl_dfeNOME_DFE.Text := cdsManifestacaonome.Text;
                dm_dados.tbl_dfeIE_DFE.Text := cdsManifestacaoIE.Text;
                dm_dados.tbl_dfeTIPO_DFE.Text := cdsManifestacaotipo.Text;
                dm_dados.tbl_dfeNSU_DFE.Text := cdsManifestacaoNSU.Text;
                dm_dados.tbl_dfeVALOR_DFE.Text := FloatToStr(valor);
                if Impresso = 'A' then
                  begin
                   dm_dados.tbl_dfeSITUACAO_DFE.text := 'Autorizado';
                  end;
                if Impresso = 'D' then
                  begin
                    dm_dados.tbl_dfeSITUACAO_DFE.text := 'Denegado';
                  end;
                if Impresso = 'C' then
                  begin
                    dm_dados.tbl_dfeSITUACAO_DFE.text := 'Cancelado';
                  end;
              end;
                cdsManifestacao.Next;
             end;
                  dm_dados.tbl_dfe.post;
                  pgRespostas.ActivePageIndex := 11;

       end else begin

       end;

end;

 

   

20200829222623-con-dist-dfe.xml 20200829222623-con-dist-dfe-soap.xml 20200829222626-dist-dfe.xml 20200829222626-dist-dfe-soap.xml

Link para o comentário
Compartilhar em outros sites

  • Consultores
  • Solution

Bom dia Adalto,

Primeiramente, não cole código como parte do texto, procure sempre anexar como você fez com os XMLs.

A minha sugestão é usar somente o método DistribuicaoDFePorUltNSU, pois este baixa tanto os resumos quanto os XMLs completos da notas.

Lembrando que para baixar o XML completo de uma nota é preciso enviar o evento de Manifestação do Destinatário.

A liberação do XML completo da nota não é rápido, pode levar segundos ou até horas, sendo assim não recomento o uso do método DistribuicaoDFePorChaveNFe.

Agora em Outubro, mas precisamente os dias 6, 7 e 8 temos o Dia do ACBr on-line.

Se eu fosse você não perderia, pois no dia 6 as 20:00 eu e o Bruto do Delphi vamos fazer uma palestra exatamente sobre esse assunto.

https://www.diadoacbr.com.br/

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

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