Ir para conteúdo
  • Cadastre-se

dev botao

Possivel Bug.. em TNFSeConsultarSituacaoLoteRPS.TratarResposta: Boolean;


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

Recommended Posts

 Dando continuidade ao topico ::

http://www.projetoacbr.com.br/forum/topic/29936-provedor-salva-numero-da-nfse-mesmo-com-erro/?_fromLogin=1


Acho que descobri um BUG no componente para efetuar o que quero tive que alterar o componente

Na unit  "ACBrNFSeWebServices.pas";

Em varias Functions tem chamada para  "ExtrairNotasRetorno;"  como nessa  ::
 

function TNFSeConsultarLoteRPS.TratarResposta: Boolean;
begin
  FPMsg := '';
  FaMsg := '';
  FPRetWS := ExtrairRetorno;
  Result := ExtrairNotasRetorno;

  FPRetWS := ExtrairGrupoMsgRet(FPConfiguracoesNFSe.Geral.ConfigGrupoMsgRet.ConsLote);
end;

Porém  na Function ::

function TNFSeConsultarSituacaoLoteRPS.TratarResposta: Boolean;

Não existe a chamada para "ExtrairNotasRetorno;"
assim resolvi alterar ela apenas colocando uma chamada ficando assim
 


function TNFSeConsultarSituacaoLoteRPS.TratarResposta: Boolean;
begin
  FPMsg := '';
  FaMsg := '';
  FRetSitLote.Free;
  FRetSitLote := TretSitLote.Create;

  FPRetWS := ExtrairRetorno;

  ExtrairNotasRetorno;  <- Codigo Adicionado

  FRetSitLote.Leitor.Arquivo := FPRetWS;
  FRetSitLote.Provedor       := FProvedor;

  RetSitLote.LerXml;

  FPRetWS := ExtrairGrupoMsgRet(FPConfiguracoesNFSe.Geral.ConfigGrupoMsgRet.ConsSit);

  FSituacao := RetSitLote.InfSit.Situacao;
  // FSituacao: 1 = Não Recebido
  //            2 = Não Processado
  //            3 = Processado com Erro
  //            4 = Processado com Sucesso

  if (FProvedor in [proEquiplano, proEL]) then
    Result := (FSituacao = '1')  // Aguardando processamento
  else
    Result := (FSituacao = '2'); // Lote não Processado
end;

Depois disso esse código abaixo não dá mais erro :

Showmessage(ACBrNFSe1.WebServices.ConsSitLoteRPS.RetornoNFSe.ListaNFSe.MsgRetorno.Items[0].Correcao);

Agora se fiz algo errado qual seria o codigo correto para Eu ter acesso a Tag <Correcao>
Grato.

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...
  • Consultores

Bom dia Luciano,

A sua alteração esta errada, uma vez que o método ConsultarSituacaoLote só retorna a situação do lote enviado, ou seja, retorna se o mesmo esta sendo processado ainda, ou seja foi processado com sucesso ou com falha.

Sendo assim não existe nesse retorno o Notas para serem extraídas.

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 para o comentário
Compartilhar em outros sites

Boa noite Italo.

Sem essa alteração que fiz é impossível efetuar a captura dos retornos.

Ou seja esse código abaixo dá erro de AcessViolation

Showmessage(ACBrNFSe1.WebServices.ConsSitLoteRPS.RetornoNFSe.ListaNFSe.MsgRetorno.Items[0].Correcao);

Com essa alteração que fiz consigo capturar os 3 retornos

ACBrNFSe1.WebServices.ConsSitLoteRPS.RetornoNFSe.ListaNFSe.MsgRetorno.Items[0].Codigo;
ACBrNFSe1.WebServices.ConsSitLoteRPS.RetornoNFSe.ListaNFSe.MsgRetorno.Items[0].Mensagem;
ACBrNFSe1.WebServices.ConsSitLoteRPS.RetornoNFSe.ListaNFSe.MsgRetorno.Items[0].Correcao;

Isso já foi bem discutido nesse outro topico
http://www.projetoacbr.com.br/forum/topic/29936-provedor-salva-numero-da-nfse-mesmo-com-erro/?_fromLogin=1

E a unica solução foi essa que encontrei

Como então eu poderia fazer para capturar ?

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Luciano,

O método ConsultarSistuacao serve apenas para obter a situação do lote enviado, ou seja:

1 = Lote não recebido

2 = Lote em processamento

3 = Lote processado com erro

4 = Lote processado com sucesso.

No manual da ABRASF sobre a NFS-e versão 1.0 temos na página 29 a estrutura do XML de resposta ao realizar a Consulta a Situação do Lote.

Nessa estrutura temos os elementos: NumeroLote e Situação e o grupo ListaMensagemRetorno que contem 3 elementos: Codigo, Mensagem e Correção

Pois bem, existe um erro, pois no manual diz que o grupo ListaMensagemRetorno sempre vai estar presente, mas na verdade ele só aparece quando ocorre um erro ao executar a consulta.

Pelo menos a maioria dos provedores implementaram dessa forma.

Sendo assim se a situação for 2 devemos realizar uma nova consulta, por outro lado se a situação for 3 ou 4 devemos executar o método ConsultarLoteRps.

Desta forma vamos obter a lista de erros no caso da situação for 3 ou o XML da NFS-e caso a situação seja 4.

Lembre-se para os provedores que seguem a versão 1 do layout da ABRASF temos que:

Enviar, ConsultarSituacao e por fim ConsultarLoteRps.

Por outro lado os provedores que seguem a versão 2 temos que:

Enviar e ConsultarLoteRps.

Não versão 2 o ConsularLoteRps traz a situação a lista de erros caso ela seja 3 ou o XML da NFS-e caso seja 4.

Entendeu agora como é que a coisa funciona?

  • Curtir 1
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 para o comentário
Compartilhar em outros sites

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