Ir para conteúdo
  • Cadastre-se

dev botao

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


Ver Solução Respondido por Daniel Simoes,

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)

Expandir  

 

  • 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.

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.