Ir para conteúdo
  • Cadastre-se

Sugestão de melhoria para evitar Exception chata ao receber com PayGo


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

Recommended Posts

Postado

Em ambiente de testes/homologação (não testei em produção) ao finalizar o recebimento no TEF PayGo o Delphi reporta 4 vezes a exceção:

EConvertError

'' is not a valid integer value

Essa exceção ocorre na unit ACBrBase, classe TACBrInformacao, método GetAsDate, ao executar StrToInt:

function TACBrInformacao.GetAsDate : TDateTime;
var
   DataStr, AnoStr: String;
begin
  DataStr := OnlyNumber( Trim(fInfo) );

  if (Length(DataStr) = 6) then // DDMMYY, converte para DDMMYYYY
  begin
    AnoStr := IntToStr(YearOf(Today));
    DataStr := copy(DataStr,1,4) + copy(AnoStr,1,2) + copy(DataStr,5,2);
  end;

  try
    Result := EncodeDate( StrToInt(copy(DataStr,5,4)), // EXCEÇÃO AQUI !!!
                          StrToInt(copy(DataStr,3,2)),
                          StrToInt(copy(DataStr,1,2)) ) ;
  except
    Result := 0 ;
  end;
end;

A exceção é tratada no bloco try..except então ela não propaga para quem chamou.

Mas o fato de ela acontecer pelo menos 4 vezes em uma operação que foi bem sucedida é um pouco chato.

Uma solução simples seria:

function TACBrInformacao.GetAsDate : TDateTime;
var
   DataStr, AnoStr: String;
begin
  DataStr := OnlyNumber( Trim(fInfo) );
  
  // ********* SUGESTÃO *********
  Result := 0;
  if Trim(DataStr) = '' then exit;
  // ********* SUGESTÃO *********

  if (Length(DataStr) = 6) then // DDMMYY, converte para DDMMYYYY
  begin
    AnoStr := IntToStr(YearOf(Today));
    DataStr := copy(DataStr,1,4) + copy(AnoStr,1,2) + copy(DataStr,5,2);
  end;

  try
    Result := EncodeDate( StrToInt(copy(DataStr,5,4)),
                          StrToInt(copy(DataStr,3,2)),
                          StrToInt(copy(DataStr,1,2)) ) ;
  except
    Result := 0 ;
  end;
end;

 

  • Curtir 1
 
 
 
 
  • Fundadores
Postado

O código já é tratado por Try/Except

try
    Result := EncodeDate( StrToInt(copy(DataStr,5,4)), // EXCEÇÃO AQUI !!!
                          StrToInt(copy(DataStr,3,2)),
                          StrToInt(copy(DataStr,1,2)) ) ;
  except
    Result := 0 ;  // <------ AQUI --------
  end;
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado (editado)

@Daniel Simoes se fosse uma exceção mais específica (algo como ACBrExceptionAlgumaCoisa), até concordaria com você.

Mas a exceção em questão é EConvertError, uma exceção genérica e que pode ser levantada em outros lugares no código.

Ignorar essa exceção poderia mascarar problemas em outros pontos do código.

Editado por Clayton Alves
grafia errada
  • Curtir 1
 
 
 
 
  • 2 semanas depois ...
  • Fundadores
  • Solution
Postado

Enviei ao SVN, modificações para acabar com os Exceptions silenciosos.. Commit [r39439]

Citar

-- ACBrBase --
[*] Ajustes em métodos de TACBrInformacao: GetAsDate, GetAsTime, GetAsTimeStamp,
    GetAsTimeStampSQL, para evitar Exception silenciosa.
    (por: DSA)

 

  • Curtir 2
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

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