Ir para conteúdo
  • Cadastre-se

dev botao

Notas destinadas!


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

Recommended Posts

Postado

Olá pessoal, sei que o assunto é antigo, mas eu tenho um código que estava consultando normalmente as notas destinadas contra um cnpj, mas de uns tempos para ca, alguns clientes começaram a reclamar que algumas notas não estavam aparecendo na consulta, e quando ele ia no ambiente nacional, a mesma estava lá...  pedi para eles verificarem com a sefaz, e a mesma respondeu isso:

Então as empresas destinatárias poderão fazer download de todas as NF-e de seus fornecedores?

Não. O emitente da NF-e tem obrigação de enviar o arquivo XML para o destinatário da mercadoria, conforme definido pela legislação vigente. O sistema só permitirá o download, pelo destinatário, de um percentual da média mensal do volume total de suas NF-e.

isso mudou? alguém sabe alguma coisa sobre isso?

Obrigado desde já!

Postado

Abaixo o meu código da consulta...

  if ConexaoAtiva then
  begin
    try
      empresainfo := dtmCheca.ChecaEmpresa(dblcbEmpresa.KeyValue);

      vNSU := empresainfo.NSUultimo;

      dtmSysMsg.Aguarde(cxgrdNFVenda,'Consultando NF-e destinadas');

      k := 0;
      repeat
        inc(k);

        // Consultar Notas Destinadas
        with dtmCompra.ACBRNFeTriviaDownload do
        begin
          DistribuicaoDFePorUltNSU(StrToInt(empresaInfo.PessoaInfo.EnderecoPrinc.Estado.CODESTADOIBGE),
                                            empresaInfo.pessoaInfo.cnpjCpf,
                                            vNSU);
        end;

        vStat := IntToStr(dtmCompra.ACBRNFeTriviaDownload.WebServices.DistribuicaoDFe.retDistDFeInt.cStat);
        vMotivo := dtmCompra.ACBRNFeTriviaDownload.WebServices.DistribuicaoDFe.retDistDFeInt.xMotivo;

        if dtmCompra.ACBRNFeTriviaDownload.WebServices.DistribuicaoDFe.retDistDFeInt.cStat = 137 then
          vTemMais := 'N'
        else
          vTemMais := 'S';

        vUltNsu := dtmCompra.ACBRNFeTriviaDownload.WebServices.DistribuicaoDFe.retDistDFeInt.ultNSU;

        vNSU := vUltNsu;

        // Atualizando a NSU na tabela empresa
        with dtmCompra do
        begin
          with isqAtualizaNsuEmpresa do
          begin
            ParamByName('nsu').AsString := vUltNsu;
            ParamByName('Id_Empresa').AsInteger := empresaInfo.pessoaInfo.id_pessoa;
            ExecQuery;
          end;

          isqAtualizaNsuEmpresa.Transaction.CommitRetaining;
        end;
        // Fim Atualização

        if dtmCompra.ACBRNFeTriviaDownload.WebServices.DistribuicaoDFe.retDistDFeInt.cStat = 138 then
        begin
          j := dtmCompra.ACBRNFeTriviaDownload.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Count - 1;

          for i := 0 to j do
          begin
            // Gravando as Notas Destinadas no Banco
            try
              with dtmCompra do
              begin
                if dtmCompra.ACBRNFeTriviaDownload.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].resDFe.chDFe <> '' then
                begin
                  vChave := dtmCompra.ACBRNFeTriviaDownload.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].resDFe.chDFe;

                  with iqrConsChaveNFeDestinadas do
                  begin
                    Close;
                    ParamByName('Id_Empresa').AsInteger := empresaInfo.pessoaInfo.id_pessoa;
                    ParamByName('Chave').AsString := vChave;
                    Open;
                  end;
                  
                  if iqrConsChaveNFeDestinadas.IsEmpty then
                  begin
                    idsNFeDestinadas.Open;
                    idsNFeDestinadas.Insert;
                    dtmGeral.CheckEditState(idsNFeDestinadas);

                    idsNFeDestinadasID_PESSOA_EMP.AsInteger  := empresaInfo.pessoaInfo.id_pessoa;
                    idsNFeDestinadasCHAVENFE.AsString := vChave;
                    idsNFeDestinadasDIGCHAVENFE.AsString := ACBRNFeTriviaDownload.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].resDFe.digVal;
                    idsNFeDestinadasNSU.AsString := ACBRNFeTriviaDownload.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].NSU;
                    idsNFeDestinadasVALORNFE.AsFloat := ACBRNFeTriviaDownload.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].resDFe.vNF;
                    idsNFeDestinadasDATARECEB.AsDateTime := ACBRNFeTriviaDownload.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].resDFe.dhRecbto;
                    idsNFeDestinadasDATAMANIFESTO.AsDateTime := dtmGenIbx.GetDBNow;
                    idsNFeDestinadasPENDENTEDOWNLOAD.AsInteger := 0;
                    idsNFeDestinadasDATAEMISSAO.AsDateTime := ACBRNFeTriviaDownload.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].resDFe.dhEmi;
                    idsNFeDestinadasNUMNF.AsString := Copy(vChave, 26, 9);
                    idsNFeDestinadasSERIENF.AsString := Copy(vChave, 23, 3);
                    idsNFeDestinadasCNPJEMITENTE.AsString := ACBRNFeTriviaDownload.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].resDFe.CNPJCPF;
                    idsNFeDestinadasINSCESTEMITENTE.AsString := ACBRNFeTriviaDownload.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].resDFe.IE;
                    idsNFeDestinadasRAZAOSOCIALEMITENTE.AsString := ACBRNFeTriviaDownload.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].resDFe.xNome;

                    case ACBRNFeTriviaDownload.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].resDFe.tpNF of
                      tnEntrada: idsNFeDestinadasTIPONOTA.AsString := 'E';
                      tnSaida:   idsNFeDestinadasTIPONOTA.AsString := 'S';
                    end;

                    case ACBRNFeTriviaDownload.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].resDFe.cSitDFe of
                      snAutorizado: idsNFeDestinadasID_NFESTATUS.AsInteger := Integer(snfvAutorizada);
                      snDenegado:   idsNFeDestinadasID_NFESTATUS.AsInteger := Integer(snfvDenegada);
                      snCancelado:  idsNFeDestinadasID_NFESTATUS.AsInteger := Integer(snfvCancelada);
                    end;

                    idsNFeDestinadasID_NFESTATUSMANISFESTO.AsInteger := Integer(smdtIndefinida);
                    idsNFeDestinadasLANCCOMPRAS.AsInteger := 0;

                    idsNFeDestinadas.Post;

                    idsNFeDestinadas.Transaction.CommitRetaining;

                    // Manifestação Destinatário
                    vIdLote := 1;
                    vCNPJ := empresainfo.pessoaInfo.cnpjCpf;
                    vOrgao := 91; // Nacional
                    nSeqEvento := 1;

                    dtmCompra.ACBRNFeTriviaDownload.NotasFiscais.Clear;
                    dtmCompra.ACBRNFeTriviaDownload.EventoNFe.Evento.Clear;

                    with dtmCompra.ACBRNFeTriviaDownload.EventoNFe.Evento.Add do
                    begin
                      InfEvento.cOrgao := vOrgao; // Nacional
                      InfEvento.chNFe := vChave;
                      InfEvento.CNPJ := vCNPJ;
                      InfEvento.nSeqEvento := nSeqEvento;
                      InfEvento.dhEvento := dtmGenIbx.GetDBNow;
                      InfEvento.tpEvento := teManifDestCiencia;
                    end;

                    dtmCompra.ACBRNFeTriviaDownload.EnviarEvento(vIdLote);
                    // Fim Manifestação

                    // Atualizando o status da NFEDestinadas
                    with dtmCompra do
                    begin
                      with isqAlteraStatusNFeDestinadas do
                      begin
                        ParamByName('id_nfestatusmanisfesto').AsInteger := Integer(smdtCiente);
                        ParamByName('pendentedownload').Clear;
                        ParamByName('Id_Empresa').AsInteger := empresainfo.pessoaInfo.id_pessoa;
                        ParamByName('Chave').AsString := vChave;
                        ParamByName('lanccompras').Clear;
                        ExecQuery;
                      end;

                      isqAlteraStatusNFeDestinadas.Transaction.CommitRetaining;
                    end;
                    // Fim Atualização
                  end;
                end;
              end;
            except
              On E: Exception do
              begin
                if dtmCompra.idsNFeDestinadas.Transaction.Active then
                  dtmCompra.idsNFeDestinadas.Transaction.RollbackRetaining;
              end;
            end;
          end;
          // Fim Gravação
        end
        else if dtmCompra.ACBRNFeTriviaDownload.WebServices.DistribuicaoDFe.retDistDFeInt.cStat = 656 then
        begin
          dtmSysMsg.FimAguarde;
          ShowWarningMessage('Rejeição: Consumo Indevido!', Self.Caption);
          Exit;
        end
        else if dtmCompra.ACBRNFeTriviaDownload.WebServices.DistribuicaoDFe.retDistDFeInt.cStat = 593 then
        begin
          dtmSysMsg.FimAguarde;
          ShowWarningMessage('Rejeição: CNPJ-Base consultado difere do CNPJ-Base do Certificado Digital!', Self.Caption);
          Exit;
        end
        else if dtmCompra.ACBRNFeTriviaDownload.WebServices.DistribuicaoDFe.retDistDFeInt.cStat = 137 then
        begin
          dtmSysMsg.FimAguarde;
          ShowWarningMessage('Nenhum documento localizado!', Self.Caption);
          Exit;
        end
        else
        begin
          dtmSysMsg.FimAguarde;
          ShowWarningMessage('Não foi possível realizar a consulta, erro: ' + vStat + ' - ' + vMotivo + '!', Self.Caption);
          Exit;
        end;

        dtmSysMsg.FimAguarde;

      until (vTemMais = 'S');
    except
      on E : Exception do
      begin
        dtmSysMsg.FimAguarde;
        ShowErrorMessage(E.Message, Self.Caption);
      end;
    end; // try

    ExecutaBusca;
  end;  // if
 

 

  • Consultores
  • Solution
Postado

Boa noite,

Em 24/04/2023 at 14:27, Márcio Antônio disse:

tenho um código que estava consultando normalmente as notas destinadas contra um cnpj

Se baixa alguns registros, provavelmente seu código está ok.

Por via das dúvidas, crie um log para armazenar todos os NSUs recebidos, se não falhar a sequência, está ok.

Obs: não cole conteúdos grandes de fontes, dificulta a leitura do tópico, quando necessário, anexe um arquivo com o conteúdo.

Em 24/04/2023 at 14:27, Márcio Antônio disse:

alguns clientes começaram a reclamar que algumas notas não estavam aparecendo na consulta, e quando ele ia no ambiente nacional, a mesma estava lá.

A sefaz pode ter demorado para distribuir a NFe para o seu cliente, talvez aguardando mais um tempo ela esteja disponível.

Em 24/04/2023 at 14:27, Márcio Antônio disse:

isso mudou? alguém sabe alguma coisa sobre isso?

Não houve, que me lembre, nenhuma NT com esta informação.

  • Curtir 1
Postado
11 horas atrás, Renato Rubinho disse:

Boa noite,

Se baixa alguns registros, provavelmente seu código está ok.

Por via das dúvidas, crie um log para armazenar todos os NSUs recebidos, se não falhar a sequência, está ok.

Obs: não cole conteúdos grandes de fontes, dificulta a leitura do tópico, quando necessário, anexe um arquivo com o conteúdo.

A sefaz pode ter demorado para distribuir a NFe para o seu cliente, talvez aguardando mais um tempo ela esteja disponível.

Não houve, que me lembre, nenhuma NT com esta informação.

Perdão pela cola do código grande...

Na minha tabela, eu gravo o nsu da nota recebida, e vez ou outra, não fica na sequência... mas eu fico na dúvida, pq eu só gravo na tabela se atender essa minha condição abaixo:

if dtmCompra.ACBRNFeTriviaDownload.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].resDFe.chDFe <> '' then

 

  • Consultores
Postado
5 horas atrás, Márcio Antônio disse:

Na minha tabela, eu gravo o nsu da nota recebida, e vez ou outra, não fica na sequência... mas eu fico na dúvida, pq eu só gravo na tabela se atender essa minha condição

Com isso você não tem todos os NSUs, a rotina devolve outros tipos de registros também, veja no exemplo, retorna também resumo de eventos e eventos.

Melhor gerar um log para acompanhar tudo.

4 horas atrás, Márcio Antônio disse:

Será que esse ".items" está quebrando?

Não, retorna a mesma informação.

Postado

Show Renato, agora esta gravando tudo em sequência, mas o que importa para realizar as manifestações são os Resumo da Nota e a Nota Completa, por que os outros 2, são eventos vinculados a essas notas e aos outros processos, como por exemplo algum MDFe da empresa... né isso?

  • 2 semanas depois ...
  • Este tópico foi criado há 566 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.