Ir para conteúdo
  • Cadastre-se

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

Recommended Posts

  • Consultores
Postado

Fala pessoal! 

Citar

Alguns usuários podem notar comportamento como CodigoMoraJuros após atualização passou a ser Isento. (como default)

Na revisão 44798 foi realizada uma alteração importante para corrigir um erro no processo de inicialização das variáveis dentro das classes do ACBrBoleto. Até então, algumas propriedades tinham o valor definido como Default, mas não tinham uma inicialização no Create. 

Assim, o valor definido como default no DFM servia apenas para exibição no designer, mas não garantia a inicialização efetiva da propriedade em tempo de execução. Isso acontece porque inicializar uma propriedade corretamente ela deve ser inicializada na classe (veja a nota na documentação do Delphi).

O detalhe é que ao corrigir esse problema, isso talvez gere um efeito colateral no seu código.

Com essa mudança, as variáveis não assumem mais automaticamente o primeiro item de um enumerado por exemplo, mas sim, o valor que está explícito na classe como default.

Assim, se seu aplicativo assume que outro valor é o padrão, talvez por não inicializar as propriedades, vai ser necessário que verifique e inicializar explicitamente as propriedades no seu código.

Queremos deixar claro no entanto que, na aplicação de Exemplo do ACBrBoleto, sempre foi exemplificado que as propriedades deveriam ser inicializadas corretamente. Você pode conferir isso no código que faz uma inclusão de titulo.

Exemplo prático

Imagine que seu código ao incluir um título sempre considerou que o valor padrão era ter um juros mensais. Ou seja, com a propriedade Titulo.CodigoMoraJuros não era preenchida.

Agora você precisa passar um valor para essa propriedade, porque o valor padrão para ela é cjIsento.

Então, se antes seu código era assim:

  Titulo.DataMulta         := incday(StrToDate(edtVencimento.Text),1);
  Titulo.MultaValorFixo    := true;
  Titulo.PercentualMulta   := StrToCurrDef(edtMulta.Text,0);
  Titulo.DataMoraJuros     := StrToDateDef(edtDataMora.Text, 0);
  //note que não tem o CodigoMoraJuros aqui!!! ???
  Titulo.ValorMoraJuros    := StrToCurrDef(edtMoraJuros.Text,0);

Precisará mudar para:

  Titulo.DataMulta         := incday(StrToDate(edtVencimento.Text),1);
  Titulo.MultaValorFixo    := true;
  Titulo.PercentualMulta   := StrToCurrDef(edtMulta.Text,0);
  Titulo.DataMoraJuros     := StrToDateDef(edtDataMora.Text, 0);
  Titulo.CodigoMoraJuros   := cjValorMensal; //Linha adicionada agora <-------
  Titulo.ValorMoraJuros    := StrToCurrDef(edtMoraJuros.Text,0);

Resumindo

  • Antes: valores vinham do índice 0 ou da sujeira da memória.
  • Lembre-se: é responsabilidade do desenvolvedor configurar os dados necessários caso sejam diferentes do default da classe .
  • Benefício: maior previsibilidade e controle sobre o comportamento das propriedades, evitando resultados inesperados.

Boa prática de programação

Sempre configure as propriedades relevantes logo no início do uso. Isso pode ser feito diretamente no código ou por meio de uma classe/método que centralize essas configurações. Faça isso não só para títulos, boletos e bancos, mas para qualquer componente ou objeto que for criado.

  • Curtir 3
Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

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

  • Daniel InfoCotidiano changed the title to ACBrBoleto: correção na inicialização de propriedades que podem gerar mudança de comportamento.
×
×
  • 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.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...