Ir para conteúdo
  • Cadastre-se

dev botao

Consultar NFs emitidas contra o meu CNPJ


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

Recommended Posts

Postado

Bom dia pessoal,

Surgiu a necessidade de se fazer uma consulta de todas as NFs emitidas contra o meu CNPJ. Alguém já precisou ou passou por algo parecido que possa compartilhar o caminho?

 

Qualquer ajuda será bem vinda!

 

Obrigado.

 

Marcelo Vicente

  • Consultores
Postado

Bom dia Marcelo,

Primeiramente o movi a sua postagem pois você postou em ACBrMDFe que não tem nada haver com o que você deseja.

Segundo, você utiliza os componentes ACBr?

Se sim, então o caminho das pedras é o programa exemplo do ACBrNFe.

Nele você vai encontrar um botão que exemplifica o método DistribuicaoDFe que lhe fornece uma lista de até 50 documentos (resumos de notas) a cada execução.

De posse dessa lista (resumos) você vai ser capaz de identificar se realmente comprou ou não de um determinada empresa.

O passo seguinte é enviar o evento de Manifestação do Destinatário.

Na verdade são 4 tipos de eventos onde você vai informar ao Fisco se comprou, se não comprou, se a mercadoria chegou e se a mercadoria chegou mas não é o que você pediu o se ocorreu algum problema na entrega dela.

No programa exemplo também temos um botão que exemplifica o evento: Ciência da Operação.

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

Bom dia Italo!

 

Sim, eu uso o ACBNFe. Vou fuçar no fonte de exemplo e tentar montar o que eu preciso.

 

Muito obrigado pela informação, já deu uma boa clareada.

 

Abraço.

  • 2 semanas depois ...
Postado

Caro amigo mlsvicente,

Como fui ajudado aqui por diversas vezes com exemplos de código, segue uma pequena contribuição;

Esta rotina que desenvolvi e está funcionando perfeitamente.

Se os moderadores acharem conveniente, podem anexar este código a um novo botão no fonte do exemplo do acbrNFe, criando uma nova funcionalidade.

Espero que ajude.

Abraços a todos

 

// busca os 50 próximos xmls do Ambiente Nacional s grava em uma pasta derminada

// Para rodar este exemplo, deverão serem prenchidas as seguintes propriedades do ACBrNFE propriedades 

{

  // padrao do certificado A1

  ACBrNFe1.Configuracoes.Geral.SSLLib         := libOpenSSL;                     
  ACBrNFe1.Configuracoes.Geral.SSLCryptLib    := cryOpenSSL;               
  ACBrNFe1.Configuracoes.Geral.SSLHttpLib     := httpOpenSSL;
  ACBrNFe1.Configuracoes.Geral.SSLXmlSignLib  := xsLibXml2;
  ACBrNFe1.SSL.SSLType                        := LT_TLSv1_2;

  // configurando certificado
  ACBrNFe1.Configuracoes.Certificados.ArquivoPFX    := Empresa.FieldbyName('CER_PATH').AsString;
  ACBrNFe1.Configuracoes.Certificados.Senha         := Empresa.FieldbyName('CER_PASS').AsString;

  // Define local para salvar os arquivos
  ACBrNFe1.Configuracoes.Arquivos.PathNFe            := Empresa.FieldbyName('XML_PATH').AsString;
  ACBrNFe1.Configuracoes.Arquivos.PathSchemas        := Empresa.FieldbyName('SCHEMAS').AsString;
 

}

procedure TfrmPrincipal.btIniciandoBuscaClick(Sender: TObject); //
var
  sChave, cUFAutor, CNPJ, ultNSU, ANSU: string;
  iQtdBuscou,  i : Integer;
  LDocZip: TdocZipCollectionItem;
begin
  cUFAutor := '';

  ACBrNFe1.DistribuicaoDFe(Empresa.FieldByName('UF').AsInteger,
                          Empresa.FieldByName('CNPJ').AsString,
                          Empresa.FieldByName('ULT_NSU').AsString,
                          '');

  Memo1.Lines.Text := ACBrNFe1.WebServices.DistribuicaoDFe.RetWS;
  memo2.Lines.Text := ACBrNFe1.WebServices.DistribuicaoDFe.RetornoWS;

  LoadXML(ACBrNFe1.WebServices.DistribuicaoDFe.RetWS, WBResposta);

  iQtdBuscou := ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Count;
  for i := 0 to Pred(iQtdBuscou) do
  begin
    LDocZip := ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip[i];
    ultNSU := LDocZip.NSU;

    if (LDocZip.schema = schprocNFe) then // separa somente xml de nfe
    begin
        ACBrNFe1.NotasFiscais.Clear;
        acbrNFE1.NotasFiscais.LoadFromString(LDocZip.XML, true   );
        sChave := ACBrNFe1.NotasFiscais.Items[0].NFe.procNFe.chNFe;
        ACBrNFe1.NotasFiscais.GravarXML(sChave+'.XML');
    end;

  end;
  if Empresa.RLock(empresa.RecNo) then
  begin
     Empresa.Edit;
     Empresa.FieldByName('ULT_NSU').AsString := ultNSU;
     Empresa.Unlock(Empresa.RecNo);
  end;

End;

  • Curtir 3
  • 5 meses depois ...
  • Membros Pro
Postado
Em 20/10/2020 at 13:09, Leandro Miler Santana disse:

Caro amigo mlsvicente,

Como fui ajudado aqui por diversas vezes com exemplos de código, segue uma pequena contribuição;

Esta rotina que desenvolvi e está funcionando perfeitamente.

Se os moderadores acharem conveniente, podem anexar este código a um novo botão no fonte do exemplo do acbrNFe, criando uma nova funcionalidade.

Espero que ajude.

Abraços a todos

 

// busca os 50 próximos xmls do Ambiente Nacional s grava em uma pasta derminada

// Para rodar este exemplo, deverão serem prenchidas as seguintes propriedades do ACBrNFE propriedades 

{

  // padrao do certificado A1

  ACBrNFe1.Configuracoes.Geral.SSLLib         := libOpenSSL;                     
  ACBrNFe1.Configuracoes.Geral.SSLCryptLib    := cryOpenSSL;               
  ACBrNFe1.Configuracoes.Geral.SSLHttpLib     := httpOpenSSL;
  ACBrNFe1.Configuracoes.Geral.SSLXmlSignLib  := xsLibXml2;
  ACBrNFe1.SSL.SSLType                        := LT_TLSv1_2;

  // configurando certificado
  ACBrNFe1.Configuracoes.Certificados.ArquivoPFX    := Empresa.FieldbyName('CER_PATH').AsString;
  ACBrNFe1.Configuracoes.Certificados.Senha         := Empresa.FieldbyName('CER_PASS').AsString;

  // Define local para salvar os arquivos
  ACBrNFe1.Configuracoes.Arquivos.PathNFe            := Empresa.FieldbyName('XML_PATH').AsString;
  ACBrNFe1.Configuracoes.Arquivos.PathSchemas        := Empresa.FieldbyName('SCHEMAS').AsString;
 

}

procedure TfrmPrincipal.btIniciandoBuscaClick(Sender: TObject); //
var
  sChave, cUFAutor, CNPJ, ultNSU, ANSU: string;
  iQtdBuscou,  i : Integer;
  LDocZip: TdocZipCollectionItem;
begin
  cUFAutor := '';

  ACBrNFe1.DistribuicaoDFe(Empresa.FieldByName('UF').AsInteger,
                          Empresa.FieldByName('CNPJ').AsString,
                          Empresa.FieldByName('ULT_NSU').AsString,
                          '');

  Memo1.Lines.Text := ACBrNFe1.WebServices.DistribuicaoDFe.RetWS;
  memo2.Lines.Text := ACBrNFe1.WebServices.DistribuicaoDFe.RetornoWS;

  LoadXML(ACBrNFe1.WebServices.DistribuicaoDFe.RetWS, WBResposta);

  iQtdBuscou := ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Count;
  for i := 0 to Pred(iQtdBuscou) do
  begin
    LDocZip := ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip[i];
    ultNSU := LDocZip.NSU;

    if (LDocZip.schema = schprocNFe) then // separa somente xml de nfe
    begin
        ACBrNFe1.NotasFiscais.Clear;
        acbrNFE1.NotasFiscais.LoadFromString(LDocZip.XML, true   );
        sChave := ACBrNFe1.NotasFiscais.Items[0].NFe.procNFe.chNFe;
        ACBrNFe1.NotasFiscais.GravarXML(sChave+'.XML');
    end;

  end;
  if Empresa.RLock(empresa.RecNo) then
  begin
     Empresa.Edit;
     Empresa.FieldByName('ULT_NSU').AsString := ultNSU;
     Empresa.Unlock(Empresa.RecNo);
  end;

End;

@Leandro Miler Santana

Na unit pcnConversaoNFe onde está declarado o tipo schprocNFe, a linha está comentada, portanto não tem como utilizar conforme  abaixo:

TSchemaNFe = (schErro, schNfe, schcancNFe, schInutNFe, schEnvCCe,
                schEnvEventoCancNFe, schEnvConfRecebto, schEnvEPEC,
//                schresNFe, schresEvento, schprocNFe, schprocEventoNFe,
                schconsReciNFe, schconsSitNFe, schconsStatServ, schconsCad,
                schenvEvento, schconsNFeDest, schdownloadNFe, schretEnviNFe,
                schadmCscNFCe, schdistDFeInt, scheventoEPEC, schCancSubst,
                schPedProrrog1, schPedProrrog2, schCanPedProrrog1,
                schCanPedProrrog2, schManifDestConfirmacao,
                schManifDestCiencia, schManifDestDesconhecimento,
                schManifDestOperNaoRealizada, schCompEntrega, schCancCompEntrega,
                schAtorInteressadoNFe);

Nesse caso, qual devo utilizar para pegar o XML?

  • Moderadores
Postado
5 minutos atrás, DOCFABIO disse:

Bom Dia Amigos.
Como posso apenas identificar se o destinatário fez a Manifestação de destinatário confirmando a operação.

Você quer saber do ponto de vista do destinatário da nota, que enviou o evento de manifestação, ou do ponto de vista do emitente da nota?

Se for o destinatário da nota, não é possível, se ele enviou o evento já deve ter essa informação, e o XML do evento.

Se for o emitente da nota, o evento de manifestação emitido pelo destinatário é disponibilizado pra ele pelo método DistribuicaoDFe.

40 minutos atrás, jean_peixoto disse:

Na unit pcnConversaoNFe onde está declarado o tipo schprocNFe, a linha está comentada, portanto não tem como utilizar conforme  abaixo:

A propriedade é do tipo TSchemaDFe, unit pcnConversao.

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

Projeto ACBr

 

 

  • Moderadores
Postado
5 minutos atrás, DOCFABIO disse:

Sou o emitente da nota.
Após executar o método DistribuicaoDFe, como identifico se o destinatário confirmou a operação ou não confirmou.

Baseado no código do @Leandro Miler Santana:

Se LDocZip.schema = schprocEventoNFe...

ACBrNFe1.Evento.Clear;

ACBrNFe1.Evento.LerXMLFromString(LDocZip.XML);

case ACBrNFe1.EventoNFe.Evento[0].InfEvento.tpEvento of
  teManifDestConfirmacao: ;
  teManifDestCiencia: ;
  teManifDestDesconhecimento: ;
  teManifDestOperNaoRealizada: ;
end;

 

Lembrando que podem haver outros eventos, como cancelamento, carta de correção, MDFe autorizado, registro de passagem...

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

Projeto ACBr

 

 

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

Baseado no código do @Leandro Miler Santana:

Se LDocZip.schema = schprocEventoNFe...

ACBrNFe1.Evento.Clear;

ACBrNFe1.Evento.LerXMLFromString(LDocZip.XML);

case ACBrNFe1.EventoNFe.Evento[0].InfEvento.tpEvento of
  teManifDestConfirmacao: ;
  teManifDestCiencia: ;
  teManifDestDesconhecimento: ;
  teManifDestOperNaoRealizada: ;
end;

 

Lembrando que podem haver outros eventos, como cancelamento, carta de correção, MDFe autorizado, registro de passagem...

Legal, acho que é isso mesmo, vou testar.
Obrigado.

 

  • Moderadores
  • Solution
Postado
9 minutos atrás, jean_peixoto disse:

Nesse caso, são as ultimas 50 notas emitidas para o CNPJ do destinatário, no caso o meu cliente?

São os primeiros 50 documentos dos últimos 90 dias, a partir do UltNSU informado.

Os documentos podem ser a NFe completa, resumo da NFe, resumo de evento ou evento completo.

9 minutos atrás, jean_peixoto disse:

Como faço pra baixar o xml completo?

Enviar a manifestação caso ainda não o tenha feito, e continuar consultando pelo UltNSU retornado na última consulta ao DistribuicaoDFePorUltNSU, eventualmente vai receber o XML completo.

Sugiro que leia a NT 2014.002, com atenção.

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

Projeto ACBr

 

 

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