Ir para conteúdo
  • Cadastre-se

dev botao

Tratamento Para Rejeição - "consumo Indevido - 656"


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

Recommended Posts

Postado

Estou implementando o Manifesto no sistema da empresa em que trabalho.

Ao efetuar uma série de testes, obtive a rejeição 656.

 

Decidi aproveitar o ocorrido, para tratar esta rejeição.

 

Ao analisar o fonte da ACBrNfeWebServices, no método TNFeConsNFeDest.Executar, percebi que o Result só será True, quando o cStats do retorno da operação for 137 ou 138.

 

No método TACBrNFe.ConsultaNFeDest, da unit ACBrNFe, se o resultado do método anterior for False, ele vai dar um Raise EACBrNFeException.

 

Essa exceção está vindo sem mensagem, impossibilitando a identificação do erro no meu programa.

 

Gostaria de saber se alguém já teve este problema, e gostaria de saber se tem alguma solução, sem precisa editar os fontes da ACBr.

 

 

  • 4 meses depois ...
Postado (editado)

Boa tarde...

 

Ao consultar dessa forma: dtmDados.ACBrNFe.DistribuicaoDFe(StrToInt(gerEmpresa.est_numero),sCnpj,'0','') , quandoi der o except devido ao 656, eu não estou conseguindo pegar o retorno com o cStat 656...  

 

já tentei dessa forma para verificar, mas mesmo assim ele não entra caso der cStat 656:

    if not(dtmDados.ACBrNFe.DistribuicaoDFe(StrToInt(gerEmpresa.est_numero),sCnpj,'0','')) then
    begin
      Showmessage(IntToStr(dtmDados.ACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.cStat));
      exit;
    end;

Como vcs fizeram??...

 

desde já agradeço!!

Editado por Daniel Caus

Att.:

Daniel

Postado

Daniel debuga o teu código e vai dando F7 até chegar na linha:  raise EACBrNFeException.Create(WebServices.DistribuicaoDFe.Msg); aqui pra mim é a linha 886 da unit ACBrNFe, antes de dar F7 novamente passe o cursor sobre a propriedade DistribuicaoDFe ou na linha acima na mesma propriedade e veja o que elas contém se for 656 você verá, passei por isso, e na realidade cheguei a conclusão, no meu caso que não há o que fazer, pois a SEFAZ deve estar limitando o número de consultas ao novo WebService.

 

Espero ter ajudado.

Postado (editado)

Daniel debuga o teu código e vai dando F7 até chegar na linha:  raise EACBrNFeException.Create(WebServices.DistribuicaoDFe.Msg); aqui pra mim é a linha 886 da unit ACBrNFe, antes de dar F7 novamente passe o cursor sobre a propriedade DistribuicaoDFe ou na linha acima na mesma propriedade e veja o que elas contém se for 656 você verá, passei por isso, e na realidade cheguei a conclusão, no meu caso que não há o que fazer, pois a SEFAZ deve estar limitando o número de consultas ao novo WebService.

 

Espero ter ajudado.

 

Olá Tiago... eu verifiquei isso, somente gostaria de tratar o erro, conforme o Victor mencionou, pois mostra uma mensagem em branco ...

 

 

No método TACBrNFe.ConsultaNFeDest, da unit ACBrNFe, se o resultado do método anterior for False, ele vai dar um Raise EACBrNFeException.

 

Essa exceção está vindo sem mensagem, impossibilitando a identificação do erro no meu programa.

 

Gostaria de saber se alguém já teve este problema, e gostaria de saber se tem alguma solução, sem precisa editar os fontes da ACBr.

 

Gostaria de saber se tem como pegar o valor de cStat antes de dar esta except, sem precisar modificar os fontes do ACBr, é claro...

 

Ele está caindo nesta except conforme a imagem:...

 

Retirando esta linha, aí sim é possível tratar e pegar o retorno...

post-15026-0-47466800-1423159314_thumb.p

Editado por Daniel Caus

Att.:

Daniel

Postado

Esta except não poderia ser retirada e ser tratada de outra forma?

 

Pois a função DistribuiçãoDFe já retorna um boolean, possibilitando pegar o retorno e tratar em caso de rejeição 656.

Att.:

Daniel

Postado (editado)

Sim já testei e funciona tranquilo...

 

Não descobri se poderá impactar em algum outro lugar esta alteração.

 

Aí consigo comparar com o retorno conforme abaixo:

if not(dtmDados.ACBrNFe.DistribuicaoDFe(StrToInt(gerEmpresa.est_numero),sCnpj,'0','')) then
    begin
      Mensagem.Free;
      Screen.Cursor := crDefault;
      if intToStr(dtmDados.ACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.cStat) = '656' then
      begin
        informacao('656 - Rejeição: Consumo Indevido. Aguarde 1 hora para realizar nova consulta','Aviso');
        exit;
      end;

      informacao(intToStr(dtmDados.ACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.cStat)+' - '+dtmDados.ACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.xMotivo,'Aviso');

      exit;
end;
Editado por Daniel Caus

Att.:

Daniel

Postado (editado)

Bom a solução que encontrei foi tratar o xml de retorno da Sefaz, com este cara:

 

 ACBrNFeConsulta.WebServices.ConsNFeDest.retConsNFeDest.XML

 

 

Mas o problema agora é o seguinte:

 

Estou utilizando um framework chamado mORMot, onde a requisição da consulta é feita no cliente, e a consulta é feita pelo servidor.

 

 

Caso o Result naquela situação seja false, esse Raise, esta ferrando comigo. (Mesmo que seja um retorno válido, EX: Rejeição 213)

 

 

Se tiver como alterar para considerar valido as rejeições, e como Exception apenas erros, seria bom.

 

 

Estarei aguardando pelo ajuste nesse método.

Editado por Victor Tadashi
Postado (editado)

Referente ao problema que o Victor relatou sobre o retorno em branco do erro, esta retornando em branco devido não estar sendo alimentado em nenhum lugar a property FMsg (da classe base).

Essa situação foi solucionada alterando o método TratarResposta da classe TNFeConsNFeDest, atribuindo o valor do xMotivo a property FMsg.

 

Para o caso do Daniel Caus foi alterado o método TratarResposta da classe TDistribuicaoDFe, atribuindo também o valor do xMotivo a property FMsg, conforme já é realizado em outras classes por exemplo: TNFeRecepcao, TNFeRetRecepcao, TNFeRecibo etc.

 

Daniel trate sua aplicação com try except, coloque os tratamentos realizados da rejeição 656 dentro da exceção (EACBrNFeException).

 

Em anexo fonte com solução.

 

Obs: Em analise no fonte da ACBrNFe, onde é gerado exceção retornando a property FMsg foi identificado que além das classes TNFeConsNFeDest (problema do Victor) e TDistribuicaoDFe (problema do Daniel) existem as classes TAdministr e TNFeDownloadNFe que geram exceção e não tem tratamento de retorno para a mensagem, então foi ajustado essas quatro classes para retornar a mensagem corretamente.

Nesse fonte encontra-se juntamente a alteração do tópico: 

 

Alterações previstas em relação à revisão 8330 do svn.

ACBrNFeWebServices.pas

Editado por Vanessinha Mocellin
  • Curtir 1

Att. Vanessa Mocellin | Arquiteta de Sistemas 
Sysmo Sistemas Ltda
São Miguel do Oeste - SC | Filial: Itajaí - SC
Fone: 49 3631.0600 | Ramal: 612

www.sysmo.com.br

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