Proteger el cambio de la fecha de sistema


([N1] rafadp) #1

Hola a todos. Estoy haciendo una aplicacion en la que utilizo calendario y fechas concretas controlando los dias segun la fecha de sistema. Mi problema es que en este control, cualquiera puede cambiar la fecha de sistema de su ordenador y meter la pata o engañar al programa

 

Hay alguna posibilidad de comprobar que la fecha del ordenador cliente es igual que la fecha real en la que estamos o la fecha del servidor?

 

Un saludo.


([N1] Pepeto) #2

Si que lo puedes comprobar,

Si ejecutas un proceso en 3 plano, puedes capturar la fecha del servidor y retornarla al cliente para realizar la comprobacion,

o enviar la fecha del cliente al servidor para realizar la comprobacion en el servidor,

En cualquier caso necesitaras un proceso en 3 plano.

un saludo

Jose Luis

 


([N1] rafadp) #3

Hola Jose Luis. He hecho pruebas haciendo lo que me dices y no me funciona. Te explico

Ahora mismo estoy creando el programa con el servidor de velneo en la nube.

El caso es que ejecuto el proceso para que me pase la fecha de sistema en una variable y que me devuelva esta variable en un mensaje.

Si ejecuto el proceso en primer plano me da correcta la fecha. pero la fecha de mi ordenador. Si cambio mi fecha me da la fecha cambiada.

Si ejecuto el proceso en tercer plano no me devuelve nada


(Tony Diana) #4

Yo hago eso mismo y funciona siempre, revisa tu proceso


([N1] rafadp) #5

hola tondiana.

He hecho una prueba muy simple. Te explico

- He creado un proceso con una linea que muestra un mensaje("Prueba")

- he creado un boton que ejecuta un evento el cual ejecuta el proceso en tercer plano.

Pues no muestra el mensaje al ejecutarlo.

Sin embargo si esta en primer plano si lo muestra.

 

¿Es posible que el tercer plano no se ejecute al trabajar en la nube de velneo?

No entiendo otro motivo

Gracias


([N4] eic) #6

Hola.

En los procesos que se ejecutan en el servidor (3º y 4º plano) no puedes ejecutar comandos que muestren algo al usuario o pidan su intervención (Mensaje, Pedir dato, etc.), porque se ejecutan en el servidor y no los verás.

Lo que puedes hacer en ese caso es cambiar el valor de una variable global en disco (no en memoria), y lo lees después en el proceso que lo llama.

Saludos,

Fran Varona

 


([N1] rafadp) #7

Ya lo he conseguidooooooo!!!!!. Gracias Fran. El problema que tenia es que aparte de intentar sacar un mensaje para ver si funcionaba, es que la variable con la que estaba probando era en memoria, y no en disco. Por eso no me mostraba nada.

 

Ahora estoy viendo que con la variable en disco saco la fecha hora de sistema del servidor y va con una hora de retraso. 

Me lo podeis confirmar?

Supongo que se tendra que notificar a velneo, noo?

 

Gracias


([N1] Pepeto) #8

Hola,

Ten en cuenta que trabajas en la nube, y la hora del servidor es correcta, y dependera de la ubicacion fisica de los servidores.

Incluso , cuando los servidores sean propios, deberas tener en cuenta el horario de la ubicacion del servidor, porque podrias tener enganches internacionales.

No se que tipo de comprobacion necesitaras realizar, pero lo logico, es utilizar siempre la fecha del servidor, y no la del cliente.

No tiene sentido controlar la fecha del cliente, cuando no sabes desde donde se realizara la conexion, y aunque lo sepas, tampoco tiene mucho sentido.

un saludo

Jose Luis

 


([N1] rafadp) #9

Entiendo Pepeto. Te explico.

Necesito digamos la fecha y la hora real de donde se encuentra el cliente para realizar un pedido. El primero que me pida es el primero en servir. Pero no me pueden hacer trampa adelantando el reloj del sistema de su maquina. por eso necesito una fecha hora de sistema real en el momento y que sea para la ciudad o pais en el que se utiliza la aplicacion.

 

gracias






([N1] Pepeto) #10

Pues, con mas razon,

Si controlas la hora del servidor, el primero en pedir sera siempre el primero, y la hora del servidor no podran cambiarla.

Te da igual en que ciudad este el cliente, lo importante es saber quien accede primero al servidor, no necesitas la hoar del cliente para nada

un saludo

Jose Luis

 


([N1] rafadp) #11

y como saco la fecha hora segun la zona horaria de donde nos encontremos?. He visto las funciones tiempo pero no me aclaro. No doy con la opcion de crear la fecha hora segun la zona horaria del pais donde me encuentro

 

gracias


([N1] Pepeto) #12

En tu pregunta esta la respuesta,

Lo importante no es la hora del cliente que realiza el pedido,

Lo importante es la hora a la que tu recibes el pedido,

 

Un cliente en españa, te hace un pedido a las 17:00 , correcto

Un cliente en el caribe, te hace otro pedido a las 14:00, el mismo dia, bien

¿Cual sirves primero?

Segun tu razonamiento, sirves primero el pedido que viene del Caribe, ¿no?

Segun mi razonamiento, debes servir primero el pedido de España

¿Por que?

No porque sea en españa, debes servir el pedido de España, porque ha realizado el pedido, 3 horas antes que el cliente que realizo el pedido en el Caribe, pero eso solo lo sabras si controlas la hora internacional, es decir si realizas la comprobacion en el servidor que recibe los datos, que es el unico que tiene la verdadera hora de cada uno de los pedidos.

un saludo

Jose Luis

 

P.D. Si necesitas algun mensajero para llevar el pedido al Caribe, cuenta conmigo, :D

 


([N1] Pepeto) #13

No necesitas funciones ni procesos para eso,

Solo necesitas un campo de tipo TIME , o un campo fecha y otro hora con contenido inicial , la fecha y la hora del sistema, asi todos los pedidos tendran la fecha y la hora real del servidor.

y bastara con ordenar por estos campos para comprobar a quien debes servir primero.

 

un saludo

Jose Luis


([N1] fjvila) #14

Hola:

Si necesitas saber quien te ha realizado antes el pedido para servir... porque no usas el campo código de la tabla? El código mas bajo será el primero que debas servir según tu razonamiento. Así te olvidas del formateo de las horas.

Un saludo


([N1] Pepeto) #15

@FJVila,

 

Es otra forma correcta de hacerla, como dices,

Pero no sirve si el tipo de tabla que estas utilizando es "historica", :)

un saludo

Jose Luis

 


([N1] rafadp) #16

Lo siento pero no lo consigo!!

Lo que necesito es que el servidor me de la fecha y la hora donde me encuentro que es ahora mimo en España y la fecha me da correcta pero la hora me da una menos.

utilizo tanto el currendate() como el currentime() y nada.

me da una hora menos.

necesito pasar los valores a una variable de tipo fecha en disco y otra de tipo hora en disco tambien.

Y con esas variables ya trato los campos de tablas.

pero sin esas fechas no soy capaz de continuar.

Quiero lloraaaaarrr!!!!!!!

gracias


([N4] eic) #17

Hola.

No lo he probado, pero pienso que puedes hacer lo siguiente: antes de llamar a tu proceso en 3º plano, deberás saber cuál es la diferencia entre el tiempo del usuario y el tiempo UTC. Eso lo sabrás por la zona horaria del usuario, que es un dato que quizá puedas almacenar en su ficha (si tienes tabla para los usuarios) o en una variable. Y luego aplicas esa zona horaria a la hora que te devuelve el proceso en 3p. 

Recuerda que en el asistente de fórmulas puedes evaluar expresiones (si escribes, por ejemplo, currentUTCDateTime() y pulsas el botón Verificar (F9), te da el resultado). Yo probaría las funciones currentUTCDateTime(), currentDateTime(), y dateTimeToLocale().

Saludos,

Fran Varona

 


(Chema) #18

Veamos. Lo primero es que no necesitas variables en disco para todo eso. Te creas un proceso que ponga en una variable local el datetime con CurrentDateTime(). Llamas a ese proceso en 3º plano usando "Crear manejador de objeto" de tal manera que después de llamarlo rescates el valor de la variable local. Ya tienes la fecha y hora del servidor.

Por otro lado, desde mi punto de vista lo que necesitas es que todos se rigan por el mismo horario. Los servidores de la nube están en hora GMT+0. Esa puede ser la zona horaria de referencia. Si para todos los pedidos utilizas la hora del servidor, te entraran ordenados que es como los quieres.

 

Saludos


([N1] fjvila) #19

Debo estar muy espeso.... Sigo sin entender para que quieres la fecha y hora del servidor.

Yo es que sigo hablando de mi libro... Si es una tabla maestra de pedidos con un campo código (porque no creo que sea histórica como decía Pepeto) lo mas fácil es que uses el propio campo código para saber cual fue el primer pedido que se grabó.

Un saludo


(Chema) #20

Lo que propone fjvila es lo mejor. Ahí no hay fallo!!

 

Saludos