Problema com CALCULATION_MODE

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Bom dia.

Estou com um problema em um campo de somatorio deo forms.
Possuo uma tabela que grava percentuais de valores rateados com até 5 casas decimais e um forms que faz o calculo destes percentuais e uma validação em cima somatorio deles (o somatorio de todos percentuais deve ser = 1, sendo que um representa 100%).
Todos os campos que estão relacionados a estes valores estão com uma mascara de 5 casas decimais, mas possuo casos em que o rateio estrapola as cinco casas e vai fechar o 1 apenas após a nona casa, e ai encontro um problema pois nestes casos a minha validação sobre o somatório se perde pois a CALCULATION_MODE SUMMARY do forms faz por baixo o somatiorio de maneira correta quando deveria acusar um erro, já que com apenas 5 casas a soma não fecha um.

Ex: 8000 / 3 = 2666,666666666667

Logo para fechar os valores o usuario entraria duas vezes com 2666,6666 e uma vez com 2666,6668.
No entanto a conta que é feita em cima do campo para calcular o percentual retornaria :
2666,6666 / 8000 = 0,333333325
2666,6666/ 8000 = 0,333333325
2666,6668/ 8000 = 0,333333335

note que isto estrapolou as cinco casas, logo meu somatorio teria de ser:

0,33333 + 0,33333 + 0,33333 = 0,99999

porém o somatorio do forms trabalha por baixo dos panos com as demais casas e encontra a conta acima como sendo igual a 1, e acaba destruindo a minha validação e permitindo que o usuario insiria no banco valores que posteriormente geram outros erros no forms.

Estou pensando em eliminar a propriedade CALCULATION_MODE e fazer este somatorio na mão usando trunc ou um round para pegar apenas as 5 casas, mas por questões de padrão de desenvolvimento venho perguntar se existe alguma maneira de trabalhar com a CALCULATION_MODE usando apenas 5 casas decimais.

Obrigado
RodrigoValentim
Moderador
Moderador
Mensagens: 367
Registrado em: Ter, 25 Mar 2008 3:41 pm
Localização: Salvador - BA
Rodrigo Valentim
Analista de Sistemas
Oracle Developer

Campanha: Faça uma pesquisa antes de perguntar!!!

o Forms está trabalhando certo. O problema é que você esta ocultando o restante das casas decimais e pra ele, continua sendo exibido.... por isso que é Mascara Númerica! :)

A mesma coisa ocorre no Excel... você exibe somente 2 casas e no final das contas (de grandes quantidades) você percebe uma divergencia de alguns mil reais e na verdade, ao exibir as casas decimais, a divergencia se vai! já quebrei muita cabeça com isso... se quiser fazer na mão, boa sorte! acho até mais vantagem pois você terá total controle do que deseja...
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Que o forms esta trabalhando certo eu sei, porém na minha base eu vou inserir apenas cinco casas , e estou tentando fazer na mão, porém não tive sucesso usando trunc(campo,5) nem round(campo,5) agora estou tentando usar um to_char(campo,'9G999G999D99999') mas ainda estou com alguns problemas.

Por isso retorno a pergunta, o Forms não possui nenhuma opção para mim conseguir trancar o numero na quinta casa decimal sem ter de fazer isto na mão???
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

A principio não há nenhum recurso dentro do Forms para truncar ou mesmo arredondar um numero.
Resolvi meu problema truncando tudo na quinta casa, mas isto é um tanto trabalhoso já que é nescessário verificar todos campos , pois um campo que retorne algo a mais pode destruir todos outros trunc ou rounds que forem usados.
Não é pratico mas funciona, enquanto a oracle não desenvolve nada para fazer isto para nós de maneira automatica temos de nos contentar em verificar todo programa atras de bugs :(
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 16 visitantes