Ir para conteúdo
  • Cadastre-se

dev botao

Recommended Posts

Postado

Problema ao gerar mensagem padrão boleto na função TACBrBoleto.CalcularPercentualValor

em um teste efetuado passando a variável AValorPercentual = 10 e a AValorDocumento = 5,

o valor de desconto ate o vencimento deveria ser: 5 * 10% = 0,5;

a função antes da ultima alteração calculava da seguinte forma:

Result := (AValorPercentual / 100) * AValorDocumento;

(10/100) *5 = 0,5; Resultado correto.

a nova alteração esta calculando da seguinte forma:

Result := (AValorPercentual / AValorDocumento) * 100 ;

(10/5) * 100 = 200; Resultado incorreto.

Ouve alguma alteração na forma de preencher o componente?

o exemplo esta sendo preenchido com:

Titulo.ValorDesconto := 10;

Titulo.TipoDesconto := tdPercentualAteDataInformada;

 

Postado

Sim a mensagem é gerada através da função do ACBR GerarMensagemPadraoDesconto, onde considera 3 parâmetros:

"ATipoDesconto" que esta preenchido com "tdPercentualAteDataInformada"

"AValorDesconto" que esta preenchido com "10"

"ADataDesconto" que é usada para montar a mensagem

case ATipoDesconto of
    tdPercentualAteDataInformada,
    tdPercentualSobreValorNominalDiaCorrido,
    tdPercentualSobreValorNominalDiaUtil :
      begin
        ValorDesconto := CalcularPercentualValor(AValorDesconto, ATitulo.ValorDocumento);
      end;
    else
      ValorDesconto := AValorDesconto;
  end;

a função deveria calcular o valor correspondente ao percentual, porem após a modificação da função este calculo não faz sentido.

Fiz o mesmo teste para o boleto Sicredi para verificar se poderia ser alguma particularidade, e apresenta o mesmo problema cai nas mesmas funções para gerar a mensagem.

o calculo que esta sendo utilizado acredito que seja para calcular quando o valor "AValorDesconto" corresponde em percentual sobre o valor "ATitulo.ValorDocumento",

porem o calculo não condiz com o escopo da função que esta sendo usado onde ele deveria calcular o valor correspondente ao percentual e não o percentual correspondente ao valor sendo que todo o retorno da função se da em valor "R$"

 

function TACBrBoleto.GerarMensagemPadraoDesconto(const ATipoDesconto : TACBrTipoDesconto; AValorDesconto : Double; ATitulo : TACBrTitulo; ADataDesconto : TDateTime = 0): String;
var ValorDesconto : Double;
begin

  case ATipoDesconto of
    tdPercentualAteDataInformada,
    tdPercentualSobreValorNominalDiaCorrido,
    tdPercentualSobreValorNominalDiaUtil :
      begin
        ValorDesconto := CalcularPercentualValor(AValorDesconto, ATitulo.ValorDocumento);
      end;
    else
      ValorDesconto := AValorDesconto;
  end;
  case ATipoDesconto of
    tdValorFixoAteDataInformada,
    tdPercentualAteDataInformada :
      begin
        if ADataDesconto > 0 then
          Result := ACBrStr('Conceder desconto de ' +
                            FormatFloatBr(ValorDesconto, 'R$ #,##0.00') +
                            ' para pagamento até ' +
                            FormatDateTime('dd/mm/yyyy',ADataDesconto)
                   );

      end;
    tdValorAntecipacaoDiaCorrido,
    tdPercentualSobreValorNominalDiaCorrido :
      begin
        Result := ACBrStr('Conceder desconto de ' +
                          FormatFloatBr(ValorDesconto, 'R$ #,##0.00') +
                          ' por dia de antecipaçao corrido.'
                  );

      end;
    tdValorAntecipacaoDiaUtil,
    tdPercentualSobreValorNominalDiaUtil :
      begin
        Result := ACBrStr('Conceder desconto de ' +
                          FormatFloatBr(ValorDesconto, 'R$ #,##0.00') +
                          ' por dia de antecipaçao útil.'
                  );

      end;
    tdNaoConcederDesconto :
      begin // depreciado... retrocompatibilidade com a implementação antiga
            // utilizar os enumeradores corretos quando houver descontos a exibir.
        if ADataDesconto > 0 then
          Result := ACBrStr('Conceder desconto de ' +
                            FormatFloatBr(ValorDesconto, 'R$ #,##0.00') +
                            ' para pagamento até ' +
                            FormatDateTime('dd/mm/yyyy',ADataDesconto)
                   )

        else
        if ValorDesconto > 0 then
          Result := ACBrStr('Conceder desconto de ' +
                          FormatFloatBr(ValorDesconto, 'R$ #,##0.00') +
                          ' por dia de antecipaçao corrido.'
                  );

      end;
  end;
end;

Postado

Acredito que o pessoal possa não estar usando, pois como mencionei acima, não faz sentido calcular um percentual se o valor devolvido é em R$, vejo que seria interessante deixarmos a função calculando corretamente, para quem for utilizar tal recurso.

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.