Ir para conteúdo
  • Cadastre-se

dev botao

ExtrairNotasRetorno - extrai apenas a última (NFSe ACBrNFSeWebServices.pas)


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

Recommended Posts

Bom dia,

Estive tendo problemas com dois provedores que trabalho (ISSCuritiba e BHISS) durante a transmissão por queda de conexão ou timeout do provedor e precisei para corrigir em meu banco de dados números e outros dados do lote utilizar a função ConsultarLoteRps que traz as notas fiscais processadas em um lote de envio desde que eu informe um xml de RPS e número de LOTE e PROTOCOLO, mas estava me trazendo somente a última nota enviada, diferente até da nota gerada pelo RPS que selecionei, verifiquei e vi o seguinte na função ExtrairNotasRetorno da unit ACBrNFSeWebServices.pas :

Na condição para avaliar se abaixo se o RPS está na lista:

Citar

      if ((not (FProvedor in [proNFSeBrasil, proEL])) and
         ((StrToInt64Def(FNotasFiscais.Items[l].NFSe.IdentificacaoRps.Numero, 0) = StrToInt64Def(FRetornoNFSe.ListaNFSe.CompNFSe.Items.NFSe.IdentificacaoRps.Numero, 0)) and
           (FNotasFiscais.Items[l].NFSe.IdentificacaoRps.Serie = FRetornoNFSe.ListaNFSe.CompNFSe.Items.NFSe.IdentificacaoRps.Serie) and
           (FNotasFiscais.Items[l].NFSe.IdentificacaoRps.Tipo = FRetornoNFSe.ListaNFSe.CompNFSe.Items.NFSe.IdentificacaoRps.Tipo)) or
          (FNotasFiscais.Items[l].NFSe.InfID.ID = FRetornoNFSe.ListaNFSe.CompNFSe.Items.NFSe.InfID.ID)) or
         ((FProvedor in [proNFSeBrasil, proEL]) and
          (StrToInt64Def(FNotasFiscais.Items[l].NFSe.IdentificacaoRps.Numero, 0) = StrToInt64Def(FRetornoNFSe.ListaNFSe.CompNFSe.Items.NFSe.IdentificacaoRps.Numero, 0))) then

Falta um parenteses na condição OR que verifica  (FNotasFiscais.Items[l].NFSe.InfID.ID = FRetornoNFSe.ListaNFSe.CompNFSe.Items.NFSe.InfID.ID) e isto faz com que sempre exista apenas uma NOTAFISCAL na lista, corrigi para o código abaixo e funcionou para mim:

Citar

if (
            // Se o provedor não for NFSeBrasil ou EL compara se já esta adicionado comparando pelo número, série e (tipo ou InfId.ID)
                    (not (FProvedor in [proNFSeBrasil, proEL])) and
                    (
              (StrToInt64Def(FNotasFiscais.Items[l].NFSe.IdentificacaoRps.Numero, 0) = StrToInt64Def(FRetornoNFSe.ListaNFSe.CompNFSe.Items.NFSe.IdentificacaoRps.Numero, 0)) and
              (FNotasFiscais.Items[l].NFSe.IdentificacaoRps.Serie = FRetornoNFSe.ListaNFSe.CompNFSe.Items.NFSe.IdentificacaoRps.Serie) and
              ((FNotasFiscais.Items[l].NFSe.IdentificacaoRps.Tipo = FRetornoNFSe.ListaNFSe.CompNFSe.Items.NFSe.IdentificacaoRps.Tipo) or
              (FNotasFiscais.Items[l].NFSe.InfID.ID = FRetornoNFSe.ListaNFSe.CompNFSe.Items.NFSe.InfID.ID))
                    )
            ) or (
                  // Se o provedor for NFSeBrasil ou EL compara apenas o numero do RPS
                  (FProvedor in [proNFSeBrasil, proEL]) and
                  (StrToInt64Def(FNotasFiscais.Items[l].NFSe.IdentificacaoRps.Numero, 0) = StrToInt64Def(FRetornoNFSe.ListaNFSe.CompNFSe.Items.NFSe.IdentificacaoRps.Numero, 0))
             ) then

Deixei meio separado apenas para exemplificar, se os moderadores puderem conferir e dar um ok.

Este problema nunca irá ocorrer em versões anteriores do ACBr se o emitente enviar 1 nota por lote e consultar o retorno, mas se existirem mais de uma sempre aparecerá apenas a última enviada pois a váriavel NovoRetorno sempre será false e não incrementa a lista de notas fiscais.

Att,

 

 

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa noite Rubens,

Anexe a unit alterada para que possamos avaliar.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Em 2017-4-28 at 10:12, rubenstz disse:

Bom dia,

Estive tendo problemas com dois provedores que trabalho (ISSCuritiba e BHISS) durante a transmissão por queda de conexão ou timeout do provedor e precisei para corrigir em meu banco de dados números e outros dados do lote utilizar a função ConsultarLoteRps que traz as notas fiscais processadas em um lote de envio desde que eu informe um xml de RPS e número de LOTE e PROTOCOLO, mas estava me trazendo somente a última nota enviada, diferente até da nota gerada pelo RPS que selecionei, verifiquei e vi o seguinte na função ExtrairNotasRetorno da unit ACBrNFSeWebServices.pas :

Na condição para avaliar se abaixo se o RPS está na lista:

Falta um parenteses na condição OR que verifica  (FNotasFiscais.Items[l].NFSe.InfID.ID = FRetornoNFSe.ListaNFSe.CompNFSe.Items.NFSe.InfID.ID) e isto faz com que sempre exista apenas uma NOTAFISCAL na lista, corrigi para o código abaixo e funcionou para mim:

Deixei meio separado apenas para exemplificar, se os moderadores puderem conferir e dar um ok.

Este problema nunca irá ocorrer em versões anteriores do ACBr se o emitente enviar 1 nota por lote e consultar o retorno, mas se existirem mais de uma sempre aparecerá apenas a última enviada pois a váriavel NovoRetorno sempre será false e não incrementa a lista de notas fiscais.

Att,

 

 

 

ACBrNFSeWebServices.pas

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa noite Rubens,

Muito obrigado pela colaboração, fiz uma pequena alteração e ainda hoje estarei enviando para o repositório.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

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