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?
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.
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?
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.
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.
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
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
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.
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.
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.
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().
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.
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ó.