Jump to content

dev botao

AcbrNfseX - IssDsf - Consulta Lote não está trazendo os n. de nota


Go to solution Solved by Italo Giurizzato Junior,
  • Este tópico foi criado há 781 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro

Até 6.a feira passada, o count do trecho abaixo (programa exemplo) trazia a quantidade de notas fiscais do lote. 
 

  for i := 0 to ACBrNFSeX1.NotasFiscais.Count -1 do
  begin
    memoLog.Lines.Add(' ');
    memoLog.Lines.Add('NFS-e Numero....: ' + ACBrNFSeX1.NotasFiscais.Items[i].NFSe.Numero);
    memoLog.Lines.Add('Cod. Verificacao: ' + ACBrNFSeX1.NotasFiscais.Items[i].NFSe.CodigoVerificacao);
    memoLog.Lines.Add('Prestador.......: ' + ACBrNFSeX1.NotasFiscais.Items[i].NFSe.Prestador.RazaoSocial);
    memoLog.Lines.Add('Tomador.........: ' + ACBrNFSeX1.NotasFiscais.Items[i].NFSe.Tomador.RazaoSocial);

    if ACBrNFSeX1.NotasFiscais.Items[i].NFSe.SituacaoNfse = ACBrNFSeXConversao.snCancelado then
      memoLog.Lines.Add('A Nota encontra-se Cancelada.');

    if ACBrNFSeX1.NotasFiscais.Items[i].NomeArq <> '' then
    begin
      memoLog.Lines.Add('Nome do arquivo.: ' + ACBrNFSeX1.Configuracoes.Arquivos.GetPathNFSe() + '\' +
                                               ACBrNFSeX1.NotasFiscais.Items[i].NomeArq);
      if ACBrNFSeX1.Configuracoes.Arquivos.Salvar then
        memoLog.Lines.Add('==> Xml da nota salvo na pasta e com o nome informado acima.')
      else
        memoLog.Lines.Add('==> Xml da nota não salvo em disco.');

      // Na propriedade XmlNfse temos o XML da NFS-e
      LoadXML(ACBrNFSeX1.NotasFiscais.Items[i].XmlNfse, WBXmlNotas);
    end;
  end;

 

No meu sistema uso o mesmo FOR do exemplo acima, porém buscando os campos n. da nf, data de emissão (pode variar caso a prefeitura só aceite no dia posterior à emissão), código de verificação e confirmação do valo rdo ISS apurado.

 

      recNFSeCampinasItem.confirmada            := true;
      recNFSeCampinasItem.NumeroNota            := strtoint(Items[i].NFSe.Numero);
      recNFSeCampinasItem.DataNota              := Items[i].NFSe.DataEmissao;
      recNFSeCampinasItem.CodigoVerificacao     := Items[i].NFSe.CodigoVerificacao;
      recNFSeCampinasItem.ValorIssApurado       := Items[i].NFSe.ValoresNfse.ValorIss;

 

Acontece que parou de funcionar esse trecho, o count vem ZERO e desde sexta-feira estamos tendo que oficializar nota manualmente.

 

Protocolo: 297091516

Lote: 161322

 

Atenc,

161322-env-lot-soap.xml 161322-rec.xml 161322-rec-soap.xml 297091516-con-lot.xml 297091516-con-lot-soap.xml 297091516-lista-nfse-con-lot.xml 297091516-lista-nfse-con-lot-soap.xml 161322-env-lot.xml

Link to comment
Share on other sites

  • Membros Pro

Italo,

Troquei a função para fazer um While nos RPS do lote, porém a função consultarNFSeporRps não está limpando o array.

Quando pesquiso a primeira, ok, preenche o items[0]. Quando pesquiso a segunda RPS, preenche o items[1].

Não era para limpar?

nfseAcbr.ConsultarNFSeporRps(cdsCadastro.FieldByName('numrps').asstring, '99', '1');

 

Link to comment
Share on other sites

  • Membros Pro

Testei e fechei a vesão para a cliente que está desde 6.a feira fazendo manual. Ficou assim:

  cdsCadastro.First;
  while not cdsCadastro.eof do
  begin
    try
      nfseAcbr.ConsultarNFSeporRps(cdsCadastro.FieldByName('numrps').asstring, '99', '1');
      ChecarResposta(tmConsultarNFSePorRps);
    except on e:Exception do
      LogEspecifico('MAGCAM','Except do nfseAcbr.ConsultarNFSeporRps '+e.Message);
    end;

    cdsCadastro.next;
  end;

 

Depois da consulta 1 a 1, carregou o array, continuei com o código antigo:

 

  with nfseAcbr.NotasFiscais do
  begin
    xQtdLst := Count;
    if xQtdLst = 0 then
    begin
      lbAguarde.caption := '*** Erro no Lote ***';

      cdsRel.append;
      cdsRel.fieldbyname('coderr').asinteger := 999;
      cdsRel.fieldbyname('msgerrorel').asstring := 'Lote não retornou nenhuma NF (Count = 0)';
      cdsRel.post;
      DisplayError(MsgErrNotasLote);
      EmiteRelatorio(-1);
      exit;
    end;

    lbAguarde.caption := 'Oficializando notas fiscais...';

    for J := 0 to xQtdLst - 1 do
    begin
      LimparNFSeAcbrItem(recNFSeCampinasItem);
      recNFSeCampinasItem.confirmada            := true;
      recNFSeCampinasItem.NumeroNota            := strtoint(Items[J].NFSe.Numero);
      recNFSeCampinasItem.DataNota              := Items[J].NFSe.DataEmissao;
      (...) etc

 

Caso mudem o código e limpem o array após a função ConsultarNFSeporRps, peço para se possível avisar no Discord.

Link to comment
Share on other sites

  • Consultores
  • Solution

Boa tarde,

A lista NotasFiscais não é limpa automaticamente antes de uma consulta, pois existem desenvolvedores que costumam carregar o XML do Rps (apesar de não ser preciso) antes de executar o método de consulta.

Sendo assim essa limpeza deve ser incluída na sua aplicação, caso você não costuma carregar o XML do Rps antes.

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

Link to comment
Share on other sites

  • Este tópico foi criado há 781 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.

The popup will be closed in 10 seconds...