Ir para conteúdo
  • Cadastre-se

dev botao

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


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

Recommended Posts

  • Membros Pro
Postado

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

  • Membros Pro
Postado

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');

 

  • Membros Pro
Postado

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.

  • Consultores
  • Solution
Postado

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

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