Ir para conteúdo
  • Cadastre-se

dev botao

Problema ao carregar lista de notas na consulta de lote de RPS


marciost
  • Este tópico foi criado há 3196 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Pessoal, creio que haja um problema na forma como está implementada a rotina de carregamento da lista de notas ao efetuar consulta de lote de RPS.

Simulação de um caso que funciona:

- cliente envia lista de RPS em um lote.

- componente de Nfs-e efetua o envio, verifica que o lote foi processado com sucesso, faz a consulta de notas do lote e gera o arquivo individual de cada nota que é gravado dentro do diretório NFSe.

Nessa situação descrita acima, funciona perfeitamente. É o caso onde dentro do próprio envio o componente já consegue executar a consulta de lote de RPS.

Simulação de um caso que não funciona:

 

- cliente envia lista de RPS em um lote.

- componente de Nfs-e efetua o envio, verifica que o lote ainda não foi processado.

- cliente executa a consulta a situação de lote.

- componente retorna 'Processado com sucesso'.

- cliente executa a consulta de lote RPS.

- componente executa a consulta, XML retornado está OK, porém não carrega a lista de notas e não gera o arquivo individual por nota.

Esse é o caso de problema, quando o lote não é processado na hora e tenho que fazer uma consulta de lote posteriormente. No final, o que preciso mesmo é dos arquivos XML individual das notas, que nesse caso acabam não sendo gerados aparentemente por um problema no componente. Me corrijam se eu estiver errado.

Sei que eu posso ainda busca depois o XML, mas pensam que são vários arquivos em vários clientes. O ideal seria ajustar o componente mesmo.

Segue minha análise de onde está o problema - só não tenho sugestão de ajuste, pois não conheço a forma de cada provedor trabalhar - segue:

Arquivo: ACBrNFSeWebServices.pas, +- na linha 3660.

{Abaixo, rotina tenta localizar na lista de notas, as notas retornadas para então recarregar os dados por completo.
 Porém, na consulta de lote  FNotasFiscais está vazia, o que não ocorre quando a consulta é feita junto com o envio.
 No envio a lista já vem carregada com as notas que fazem parte do lote de RPS, por isso quando a consulta é feita
 junto com o envio o problema não ocorre. }

   while FRetListaNfse <> '' do
    begin
     j := Pos('</' + Prefixo3 +
                    DFeUtil.seSenao(FProvedor = proBetha, 'ComplNfse', 'CompNfse') + '>', FRetListaNfse);
     p := Length(trim(Prefixo3));
     if j > 0
      then begin
       for iNFRetorno := 0 to NFSeRetorno.ListaNfse.CompNfse.Count - 1 do
       begin
        for iNF := 0 to FNotasFiscais.Count - 1 do
        begin
         if FNotasFiscais.Items[iNF].NFSe.IdentificacaoRps.Numero = NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.IdentificacaoRps.Numero
          then begin
           FNotasFiscais.Items[iNF].Confirmada             := True;
           FNotasFiscais.Items[iNF].NFSe.CodigoVerificacao := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.CodigoVerificacao;
           FNotasFiscais.Items[iNF].NFSe.Numero            := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.Numero;
           FNotasFiscais.Items[iNF].NFSe.Competencia       := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.Competencia;
           FNotasFiscais.Items[iNF].NFSe.NfseSubstituida   := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.NfseSubstituida;
           FNotasFiscais.Items[iNF].NFSe.OutrasInformacoes := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.OutrasInformacoes;
           FNotasFiscais.Items[iNF].NFSe.DataEmissao       := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.DataEmissao;

           FNotasFiscais.Items[iNF].NFSe.Servico.xItemListaServico := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.Servico.xItemListaServico;

           FNotasFiscais.Items[iNF].NFSe.PrestadorServico.RazaoSocial  := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.RazaoSocial;
           FNotasFiscais.Items[iNF].NFSe.PrestadorServico.NomeFantasia := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.NomeFantasia;

           FNotasFiscais.Items[iNF].NFSe.PrestadorServico.IdentificacaoPrestador.Cnpj               := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.IdentificacaoPrestador.Cnpj;
           FNotasFiscais.Items[iNF].NFSe.PrestadorServico.IdentificacaoPrestador.InscricaoMunicipal := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.IdentificacaoPrestador.InscricaoMunicipal;

           FNotasFiscais.Items[iNF].NFSe.PrestadorServico.Endereco.Endereco        := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.Endereco.Endereco;
           FNotasFiscais.Items[iNF].NFSe.PrestadorServico.Endereco.Numero          := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.Endereco.Numero;
           FNotasFiscais.Items[iNF].NFSe.PrestadorServico.Endereco.Complemento     := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.Endereco.Complemento;
           FNotasFiscais.Items[iNF].NFSe.PrestadorServico.Endereco.Bairro          := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.Endereco.Bairro;
           FNotasFiscais.Items[iNF].NFSe.PrestadorServico.Endereco.CodigoMunicipio := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.Endereco.CodigoMunicipio;
           FNotasFiscais.Items[iNF].NFSe.PrestadorServico.Endereco.UF              := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.Endereco.UF;
           FNotasFiscais.Items[iNF].NFSe.PrestadorServico.Endereco.CEP             := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.Endereco.CEP;
           FNotasFiscais.Items[iNF].NFSe.PrestadorServico.Endereco.xMunicipio      := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.Endereco.xMunicipio;

           FNotasFiscais.Items[iNF].NFSe.PrestadorServico.Contato.Telefone := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.Contato.Telefone;
           FNotasFiscais.Items[iNF].NFSe.PrestadorServico.Contato.Email    := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.Contato.Email;

           FNotasFiscais.Items[iNF].NFSe.Tomador.Endereco.xMunicipio := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.Tomador.Endereco.xMunicipio;

           if FProvedor = proISSNet then
             FRetNfse := AnsiString(StringReplace(String(NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.XML), '<br>', '', [rfReplaceAll]))
           else
             FRetNfse := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.XML;
//             FRetNfse := ParseText(NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.XML);

           k :=  Pos('<' + Prefixo4 + 'Nfse', FRetNfse);
           FRetNfse := Copy(FRetNfse, k, length(FRetNfse));

           // Recoloca o prefixo4 quando o provedor for ISSNet
           if FProvedor = proISSNet
            then begin
             m := length(FRetNFSe);
             FRetNfse2 := '';
             l := 1;
             while l <= m do
              begin
               if FRetNFSe[l] = '<'
                then begin
                 if FRetNFSe[l+1] = '?'
                  then FRetNfse2 := FRetNfse2 + FRetNFSe[l]
                  else begin
                   if FRetNFSe[l+1] = '/'
                    then begin
                     FRetNfse2 := FRetNfse2 + '</' + Prefixo4;
                     inc(l);
                    end
                    else FRetNfse2 := FRetNfse2 + '<' + Prefixo4;
                  end;
                end
                else FRetNfse2 := FRetNfse2 + FRetNFSe[l];
               inc(l);
              end;
             FRetNFSe := FRetNfse2;
            end;

           if FProvedor = proSisPMJP then
             Prefixo3 := 'nfse:';

           FRetNFSe := FProvedorClass.GeraRetornoNFSe(Prefixo3, FRetNFSe, FNomeCidade);

//          if FConfiguracoes.Geral.Salvar
//           then begin

            if FConfiguracoes.Arquivos.EmissaoPathNFSe then
              PathSalvar := FConfiguracoes.Arquivos.GetPathNFSe(FNotasFiscais.Items[iNF].NFSe.DataEmissao)
            else
              PathSalvar := FConfiguracoes.Arquivos.GetPathNFSe(0);

            if FConfiguracoes.Arquivos.NomeLongoNFSe then
              NomeArq := NotaUtil.GerarNomeNFSe(UFparaCodigo(NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.Endereco.UF),
                                                NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.DataEmissao,
                                                NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.IdentificacaoPrestador.Cnpj,
                                                StrToIntDef(NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.Numero, 0)) + '-nfse.xml'
            else
              NomeArq := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.Numero + '-nfse.xml';

            FConfiguracoes.Geral.Save(NomeArq, FRetNfse, PathSalvar);
//                                      NotaUtil.RetirarPrefixos(FRetNfse), PathSalvar);
            if FNotasFiscais.Count>0
             then FNotasFiscais.Items[iNF].NomeArq := PathWithDelim(PathSalvar) + NomeArq;
//           end;

           FNotasFiscais.Items[iNF].XML_NFSe := FRetNfse;

           break;
          end;
        end;
       end;
       FRetListaNfse := Copy(FRetListaNfse, j + 11 + p, length(FRetListaNfse));
//      inc(i);
      end
      else FRetListaNfse:='';
    end;

Link para o comentário
Compartilhar em outros sites

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