Utilizando arredondamento de valores

O padrão de arredondamento de valores no Report Builder é diferente do padrão de arredondamento do SisPetro.

No Report Builder segue as seguintes regras:

  • Menor ou igual a 5: não arredonda, mantendo o número imediatamente anterior
  • Maior que 5:  arredonda, somando 1 ao número imediatamente anterior

No SisPetro as regras para arredondamento seguem o que está definido pela ABNT (Associação Brasileira de Normas Técnicas):

Para uso no Report Builder foi criada a função FormatCurrencyDecimalsExtended, que segue as mesmas regras utilizadas no SisPetro.

A função deve ser informada com os parâmetros FormatCurrencyDecimalsExtended(eValor,bDecimalsCorrente,iTypeDecimals), onde:

  • eValor: cálculo de valores

  • bDecimalsCorrente:
    • true: utilizar somente com orientação da Futura
    • false: utilizar na grande maioria dos casos

  • iTypeDecimals: define o tipo de decimais conforme tabela abaixo

    Valor para iTypeDecimals

    Definição

    0

    Sistema Operacional: o que está definido nas configurações do Windows

    1 (Padrão)

    Casas decimais padrão do SisPetro: 2 casas decimais

    2

    Casas decimais utilizadas em Vendas: conforme definido no perfil de sistema > aba Vendas

    3

    Casas decimais utilizadas em Compras: conforme definido no perfil de sistema > aba Compras

    4

    Casas decimais utilizadas em Frete: conforme definido no perfil de sistema > aba Fretes

    5

    Casas decimais utilizadas em Custos: 6 casas decimais

    6

    Casas decimais utilizadas em Taxas de Conversão de Moeda: até 6 casas decimais

    7

    As casas decimais são truncadas: não é feito arredondamento. Exemplo: 1,65 fica 1

Exemplo de uso da função em um campo para calcular o valor do complemento de ICMS:

  • No OnCalc do campo ComplementoICMS (criado no relatório):

    begin
    // Complemento o campo AjusteICMSSubst é salvo negativo. Quando positivo é ressarcimento e não precisa imprimir
      if (NaturezaOperacaoEmp['GeraICMSRetidoFonte']= 1) and (ItensNF['ajusteICMSSubst']< 0) then begin
          Value := FormatCurrencyDecimals(((ItensNF['ajusteICMSSubst']* ItensNF['qtde']) * -1),false,1);
      end else begin
          Value:= 0;
      end;
    end;
  • Onde FormatCurrencyDecimals(((ItensNF['ajusteICMSSubst']* ItensNF['qtde']) * -1),false,1);
    • eValor: ((ItensNF['ajusteICMSSubst']* ItensNF['qtde']) * -1)
    • bDecimalsCorrente: false
    • iTypeDecimals: 1
  • Considerando que no campo AjusteICMSSubst foi salvo o valor de -0,859874 e no campo Qtde foi salvo o valor de 5.177:
    • (-0,859874 * 5177) * - 1 = 4.451,567968 > aplicando a função FormatCurrencyDecimals, o valor no relatório é apresentado como 4.451,57