Problema en funcion


([N1] Pepeto) #1

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.

 

un saludo

Jose Luis




([N1] agustin) #2

Ein?????


([N4] ikonos) #3

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?


([N1] Pepeto) #4

Se trata de una funcion de proceso (Objeto FUNCION)

Realiza una multiplicacion y retorna el resultado

Se ejectura desde un EVENTO del formulario

El evento se ejecuta desde un BOTON del formulario

Y la funcion recibe 2 parametros para realizar la multiplicacion

mas sencillo imposible

 

torpe de mi, no se multiplicar!

un saludo

Jose Luis


([N1] Pepeto) #5

El formulario tiene 2 variables LOCALES

y le pasamos estas variables a la funcion

 

POLTERGEIST! o EXPEDIENTE X!


([N1] alamillos) #6

Buenas tardes Pepeto.

Quieres decir que la primera vez que ejecuta el evento da correcto y la segunda vez no te tiene en cuenta la multiplicación de VALOR1 * 0.16?

sería posible que en alguna linea del evento el valor de la variable sea cero.

Saludos.

Juan Diaz.


([N4] ikonos) #7

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


([N4] eic) #8

Hola, José Luis.

(Hombre, Agustín, tú por aquí)

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.

¿Es esto lo que tienes? 

Con todo esto, a mí me funciona correctamente.

Saludos,

Fran Varona

 


([N1] Pepeto) #9

Funcion:

IF ( VALOR1 = 0 )

---  VALOR2 = 0

ELSE

---  VALOR2 = VALOR1 * 0.16

 

Resultado:

Si VALOR = 0 .... resultado = 0 (correcto)

Si VAOR = 234 ... resultado = 234 (incorrecto)

 

 


([N1] alamillos) #10

Lo has intentado asi?

VALOR2=(VALOR1*0.16)

 


([N1] Pepeto) #11

@Fran Varona

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

VALOR1 * IVA = VALOR1  ¿?


([N4] eic) #12

Hola, José Luis.

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

Saludos,

Fran Varona

 


([N1] agustin) #13

Hola Fran Varona.

Nunca me fui, es que estoy fuera de juego :-)

No estaba muerto, que estaba de parranda.......:-)


([N1] Pepeto) #14

@Fran Varona

 

¿Que quieres decir con el EDITAR con MICROSCROLLER?

No utilizo MICROSCROLLER, utilizo un EDIT normalito con la VARIABLE en contenido inicial

¿Es que un campo EDIT normal no vale para editar una variable NUMERICA?

 


([N1] alamillos) #15

Si que vale, el unico problema es que te saca un monton de decimales.


([N4] eic) #16

Hola.

No, no vale.

Un control de edición sirve para editar texto.

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.

Saludos,

Fran Varona

 


([N1] Pepeto) #17

Cierto,

El manual de la zona INFO dice textualmente:

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 lo entiendo

un saludo y gracias a todos

Jose Luis


([N1] alamillos) #18

El que sabe, sabe .....

y el que no ..... a pedir socorro, como yo por ejemplo. Tranqui Pepeto, verás como sale.


([N4] eic) #19

Hola.

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.

Saludos,

Fran Varona

 


([N1] Pepeto) #20

Pues imaginate como estoy:

Hacer un programita muy chulo: 2 horas :D

Conseguir que la funcion para multiplicar 2 variables : 4 horas :(

La cara que se me queda al no saber multiplicar : ¡NO TIENE PRECIO!

 

un saludo y gracias de nuevo

Jose Luis