Ir para conteúdo
  • Cadastre-se

dev botao

Erro de acesso a memória na classe TACBrSATMFe_integrador_XML


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

Recommended Posts

Olá, fiz uma pequena correção nos métodos  EnviarPagamento, EnviarStatusPagamento, VerificarStatusValidador, RespostaFiscal da classe TACBrSATMFe_integrador_XML.

Adicionei uma verificação da variável Result antes de ler a propriedade Result.XML, pois em casos de exceção por parte do componente FIntegrador, essa variável retorna nil. O que ocasiona um erro de acesso à memória ao ler o XML, ficando assim o módulo SAT travado, pois não executou o método FinalizaComando.

Estou anexando a correção e gostaria que ela fosse integrada ao fonte do projeto.

try

.... 

finally
    if Assigned(Result) then
      TACBrSAT(Owner).FinalizaComando( Result.XML )
    else
      TACBrSAT(Owner).FinalizaComando( '' );
end;


 

ACBrSATMFe_integrador.pas

Editado por Nilson Sérgio
Erro de ortografia
Link para o comentário
Compartilhar em outros sites

  • Moderadores

Como vc simula erro nesses comandos?

Pois chamar o FinalizaComando com o conteúdo vazio pode causar outros erros.

djsystem-logo.png
 youtube.png facebook.png instagram.png linkedin.png
André Ferreira de Moraes | Analista de Sistemas
www.djsystem.com.br | www.djpdv.com.br
www.tefhouse.com.br | www.lambretinha.com.br
Link para o comentário
Compartilhar em outros sites

Para simular basta fechar o integrador no momento da chamada de um desses metódos. Na verdade descobri por acaso por causa de uma exception na unit ACBrIntegrador, linha 292.

  if EstaVazio(RespostaIntegrador) then
  begin
    FErroTimeout := True;
    DoException('Sem Resposta do Integrador');
  end;

outra correção seria retornar um objeto válido nos métodos abaixo, mesmo em caso de exception.

    function EnviarPagamento(Pagamento: TEnviarPagamento): TRespostaPagamento;
    function EnviarStatusPagamento(StatusPagamento: TStatusPagamento): TRespostaStatusPagamento;
    function VerificarStatusValidador(AVerificarStatusValidador: TVerificarStatusValidador):
      TRespostaVerificarStatusValidador;
    function RespostaFiscal(ARespostaFiscal: TRespostaFiscal): TRetornoRespostaFiscal;

Do jeito que o fonte estava NÃO aparecia a mensagem de erro "'Sem Resposta do Integrador'". Em vez disso aparecia um erro de acesso à memória, como eu disse anteriormente.

Eu entendendo que nos casos de exception nesses métodos específicos, realmente o retorno para o object ACBrSAT deve sem vazio, pois não há nada a retornar.

Editado por Nilson Sérgio
correção
Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...
  • Este tópico foi criado há 2268 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.