Hola a todos, tengo un detalle con un IF que no se como arreglar
resulta que tengo un campo comision y en algunos casos es muy baja, debajo del 1, osea 0.90, 0.30, etc, etc.
para validar los campos requeridos tengo esto y manda mensaje si hay campos vacios
El detalle es que la comision siempre me la marca como vacia aunque sea mayor a cero, digo hablando logicamente un valor 0.60 es mayor a un valor 0.00 o no ??
if ( #comision = 0 )
Set(Validar, 1)
Libre
if ( isEmpty(#decripcion) )
Set(Validar, 1)
Libre
if ( Validar = 1 )
Mensaje("hay campos vacios")
set retorno "NO"
etc
else
procesar boton Aceptar para que guarde
libre
El planteamiento lo tienes bienes realizado pero si te para a leer la condición dice:
if ( #comision = 0 )
O lo que es lo mismo:
Sí #comision es exactamente igual a 0
Sin embargo lo que tú quieres saber es:
Sí #comision es menor que 0
Para esto tendrías que poner:
if ( #comision < 0 )
A todos nos pasa de vez en cuando que no leemos bien el código y andamos dando vueltas hasta que damos con ello.
También recuerda que no es lo mismo compara contra un valor entero “0, 1, 2, 3,…” que contra un valor con decimales “0.00, 1.00, 2.00, …” al fin y al cabo los números, o mas bien, las variables que contengan esos números, pueden tener o no decimales, todo depende de como declares.
Vamos a ver, (#comision = 0) es Verdadero si (#comision = 0) y es siempre falso si (#comision = 0.60).
No hay fantasmas ni comportamientos extraños, de lo contrario deberíamos dejar de usar Velneo inmediatamente y pedir daños y perjuicios.
Revisa tu código (la variable Validar se pone a 1 de varias maneras), revisa los decimales que admite el campo #comision, revisa el control numérico que usas para editar el campo #comision, etc.
pues ya lo solucione, talvez no de la mejor manera, pero ya …
PERO QUE MAL… QUE TE DIGA QUE ES " CERO " CUANDO ES 0.63 0.99 ETC., EN FIN
P.D. ya estaba revisado el campo en la B.D., tambien el control de edicion numerica, incluso cree una variable comision y le asigne el dato 0.63 y el if (comision = 0) y entra…
Set ( MILLAS_STR, numberToString(#PRECIO_MILLAS, "f", 2) )
Set ( POS_PUNTO, indexOfString(MILLAS_STR, ".", 0, 0) )
Set ( ENTEROS, stringToNumber(mid(MILLAS_STR, 0, POS_PUNTO)) )
Set ( DECIMALES, stringToNumber(mid(MILLAS_STR, POS_PUNTO+1, 2)) )
ASI SI FUNCIONO
If ( ( ENTEROS = 0) & ( DECIMALES = 0) )
Viendo tu código para determinar si un valor numérico decimal es cero, solo se me ocurren 2 palabras im…presionante.
Por favor, no cuentes a la competencia cómo resolvemos este problema, porque las risas se van a oir desde muy lejos.
Sigo insistiendo, la condición (#CAMPO = 0) debe funcionar correctamente, de lo contrario tienes un Bug.
Creo que no es problema de comas ni puntos.
Los valores numéricos literales en Velneo, como en la mayoría de las plataformas, se introducen con el punto como separador decimal.
El comando Set (IMPORTE, 0,63) te tiene que dar error.
Otra cuestión es la presentación de los datos numéricos en pantalla o el uso de comandos StringToNumber o NumberToString, donde los puntos y las comas sí que tienen importancia.
De todas formas, si esto fuera de otro modo, tendría que revisar urgentemente todos mis programas.
[quote quote=43961]El comando Set (IMPORTE, 0,63) te tiene que dar error.
[/quote]
En teoría sí y en teoría no.
Si nos damos cuenta cuando usamos NumbreToString tenemos varias formas de indicar como queremos la conversión del número, esto también ataña a la forma en la que se gestiona en las comparativas.
Al usar el numero 0.63 si lo esta haciendo bien puesto que no es 0, pero por el contrario si comparamos 0,63 da positivo ya que solo esta comparando el primer carácter y entiende que lo que hay después de la coma es otra cosa, parámetros por decirlo a groso modo.
Pero para realizar bien la comparación, como dije antes, es mejor usar mayor o menor si sabes que puedes encontrarte decimales y usar solo el igual para casos en los que los valores a comparar sean absolutos.
De esta manera te puedes evitar muchos quebraderos de cabeza.
set(IMPORTE, 0,63)
Da error en el inspector de errores.
Así que queda claro que los números literales en código deben ir con punto.
Leonardo, usa el debug para verificar lo que estás comparando, además revisa si el campo está declarado de manera correcta. Faltaría más que una plataforma especializada en aplicaciones empresariales tenga errores con estas cosas
Hola Leonardo Daniel Velasques Fuentes y demas colegas.
He realizado la prueba con un campo númerico que contiene decimales y me funciona sin problemas. En una tabla tengo un campo llamado TARIFA_CREE al que le he asignado un valor de 0.8 que al validarlo, segun se muestra en la parte derecha del archivo adjunto, entra por donde debe ser, presentando el mensaje correcto para cada caso.
La imagen tambie presenta, del lado izquierdo, como tengo definido el campo.