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
Problema com CALCULATION_MODE
-
- 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
Programador Junior
Parobé RS
[]s
-
- 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!!!
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...

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

-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes