Tengo un problema con una funcion, y despues de revisarla varias veces detenidamente, no veo la causa, y me gustaria saber si estoy haciendo algo mal, o es algun bug raro:
Desde un formulario sin origen, con 2 campos de edicion (en 2 variables "numericas" del formulario)
La variables estan definidas como Numericas con 2 decimales y signo=verdadero
Hay un evento del formulario que ejecuta la funcion y un boton en el formulario para ejecutar el evento
La funcion, le pasamos el VALOR1 (base imponible) como parametro, realiza un calculo (cuota de IVA) = VALOR1 * 0.16 y el resultado es VALOR2 que es la variable retornada por la funcion.
Para asegurarme de que es correcto el retorno, si le pasamos VALOR1=0, retorna VALOR2=0 y funciona correctamente
Pero si VALOR1 es cualquier otro numero, retorna siempre VALOR2 = VALOR1
Ya he realizado estas operaciones cientos de veces y me han funcionado bien, pero esta vez , me surge la necesidad de hacerlo con VARIABLES directamente, y no lo consigo (no puedo utilizar una tabla, no quiero utilizarla).
Seguramente es una tonteria, quiza error mio, pero solo queria asegurarme si alguien ha conseguido algo parecido con variables.
Jose Luis, comprendida la situación, pero ¿me puedes indicar como desde el evento del formulario llamas a la función?¿con que comando llamas a la función?
Jose Luis, a mi me funciona si en vez de poner VALOR1 * 0.16, pongo VALOR1 * (0.16) pero falla en los decimales, y me funciona perfectamente declaro una constante=0.16 y pongo VALOR1*constante
No entiendo por qué la función recibe dos parámetros. Si multiplicas siempre por 0.16, entonces la función debe recibir siempre un solo parámetro (VALOR1) y devuelve otro.
La función: tiene dos variables locales, una es el parámetro que recibe y otra es el valor que devuelve (lo podrías hacer con sólo una variable local, en vez de dos, pero quizá con dos es más claro).
En el evento imagino que tendrás que la variable global 2 es igual al valor que retorna la función.
Por otro lado: imagino que en el formulario sin origen tendrás las variables con controles microscrollers. Si fueran controles de edición, te convierte los valores en texto, porque los controles de edición son controles para texto.
Recibe 2 parametros porque en realidad , no multiplica por 0.16 , el valor lo recibe en una variable, pero eso da igual, lo que pretendia era explicar el concepto.
He puesto mensajes en la funcion para comprobar que los valores los recibe correctamente y asi es, tambien he puesto mensajes antes y despues de cada linea y el resultado es el mismo:
la multiplicacion no me retorna el resultado correcto
he probado a realizar la multiplicacion con la funcion ROUND( ) para redondear los decimales, y como no funcionaba, he quitado la funcion y multiplico sin redondear, pero el resultado me sigue saliendo el mismo
Yo acabo de hacer la prueba tal como dijiste (2 variables globales, llamada a una función, etc.), con la operación:
Set VALOR2, VALOR1 * 0.16
(dentro de la función)
Y funciona correctamente.
Creo que el problema que tienes es de tipos de variables. Aunque veas un mensaje correcto, nunca sabrás si el valor que te muestra es un texto o un número, porque lo ves siempre como un texto (al pasarlo al comando Mensaje, lo convierte a texto).
Comprueba:
- Que las variables globales son del tipo adecuado
- Que las editas con un microscroller
- Que las variables locales a la función son de tipo numérico
Si quieres editar números, debes usar un control microscroller.
Si quieres *mostrar* números, puedes usar lo que quieras.
Si metes un valor numérico (campo o variable) en un control de edición, te lo convierte a texto y lo muestra; y entiende que todo lo que le escribas es un texto (aunque lo reconvertirá a número si el contenido es una variable/campo numérico, pero hay una conversión).
El control microscroller tiene otros problemas (no tiene formato local, muestra unas flechas horribles) pero es el control pensado para mostrar números.
Control de <span class="vinfo-destacado">Edición que se usará principalmente para la edición del contenido de campos o variables alfanuméricas.
Este control no sirve para editar campos de tipo Objeto ya que existe un control específico para ello.
Tampoco se aconseja usarlo en modo lectura/escritura para la
introducción de campos de tipo booleanos, numéricos, fecha, hora y
tiempo. Existen controles específicos para esos tipos de campo.
Fallo mio, no habia caido en ese detalle, pero no entiendo tengo que utilizar obligatoriamente los Microscrollers, ¿que pasa si no quiero que aparezcan las flechitas?
Correcto, ahora si funciona:
Solo he cambiado el campo EDIT por MICROSCROLLER,
Conclusion: el manual INFO esta mal, se dice que no se aconseja su uso, cuando deberia decir, NO FUNCIONA con campos numericos
Deduccion: El control EDIT del formulario convierte en ALFANUMERICO todo lo que toca. :(
No defiendo lo que dice el manual, pero el gran problema de los controles de edición con números son los números con signo y los que tienen decimales. En caso contrario, no hay ningún problema en usar el control de edición: simplemente, hay que tener claro cómo funciona (me costó unos cuantos quebraderos de cabeza, no creas ;-) ). Al final, hay que quedarse con que es un control para editar texto y que, por tanto, lo convierte todo a texto. Nos cuesta más a los que venimos de 6.x, donde sólo había un tipo de control.
Los controles microscroller tienen sus pegas, pero imagino que las irán subsanando (no formato local, no posibilidad de quitar las flechas...). Al menos, funcionan bien.