Refrescar fecha-hora en formulario sin efectos de timer


([N1] aztecmexico) #1

Jajajajaja, me siento NEOvato pero ahi voy,

¿Como refrescar la fecha y hora en un formulario sin los efectos “colaterales” de un timer?

Y cuando digo efectos “colaterales” me refiero a que necesito que se ejecute el timer cada segundo, sin embargo cada que se refresca, si estoy editando algún campo se me borra y como si acabara de ganar el foco.

Saludos.

Martin Ibarra.


([N3] pacosatu) #2

Hola Martín.

Creo que ese efecto colateral no tiene nada que ver con el TIMER. Seguramente tienes el campo de edición sin vincular a Variable o Campo (propiedad Contenido vacía).
Esto provoca su vaciado cada vez que se refresca el formulario, cosa que ocurre en el evento Timer entre otros.

Saludos
Paco Satué


([N1] imesacodabar-es) #3

Yo me estoy encontrando con algo similiar, pero con una caja de texto.
Cada segundo, el cursor se va al inicio de la caja.

Además, otra que no he podido es cambiar la fuente de letra.

¿Podría tratarse de un error?


([N1] imesacodabar-es) #4

Amplio la información:
Me pasa al mostrar el contenido de una variable. Al tratar de bajar con la scroll bar, siempre me manda arriba.
Una vez que edito el campo, ese efecto desaparece, y deja de “reinicializarse”.
Saludos.


([N1] aztecmexico) #5

Hola Paco,

No es eso, los campos de edición están correctamente vinculados.

Si estoy escribiendo en un momento dado dentro de un campo o buscando algún valor (con propiedad autocompletado), el comportamiento es que o me borra todo el contenido al activarse el timer, o me regresa al contenido anterior, y, en muy contadas ocasiones me permite (si lo hago con la suficiente rapidez entre cada ciclo del timer) que quede el valor que yo deseo.

Dado que no me es posible aplicar el timer solo a un control específico del formulario pues haber si por ahí alguien tiene algún método que pudiera compartir.

Saludos.

Martin Ibarra.

P.D. Intenté meter el control que se refresca en otro formulario, luego visualizar dicho formulario en el principal mediante una vista de datos (son dos objetos distintos, uno embebido en el principal), pero el efecto es el mismo.


([N1] wikan) #6

Podrías mostrar la fecha y la hora, quizás con un label.
Y sino, sin usar timers con un html que muestre la hora cálculada por javascript


([N1] aztecmexico) #7

Gracias Manuel,

Precisamente lo tengo en un label o texto estático pero sigo con el problemilla.

Me gusta tu propuesta del html, voy a probarla y les cuento.

Saludos.

Martin Ibarra.


([N1] aztecmexico) #8

Pues si, Gracias Manuel.

Incrustando el visor html queda.

Saludos.

Martin Ibarra.


([N1] wikan) #9

Perfecto, una cosa menos entonces


([N3] pacosatu) #10

Hola Martin.

Entonces solo falla en los campos vinculados a Maestro y será porque interfiere con el evento Value Changed.
¿Esto es un bug de ahora a ha existido siempre?

Saludos
Paco Satué


([N1] aztecmexico) #11

Hola Paco,

Mmmmmmm, en mi experiencia siempre he tenido ese tipo de problemas al utilizar un timer (Creo que desde V6) en un formulario con el objetivo de estar refrescando horas, minutos y segundos.

No había caido en cuenta que con campos no enlazados a maestros no sucede eso, pero si en los enlazados.

Sinceramente creo es un punto de mejora, a menos que se pueda hacer con vJavaScript, cosa que no he revisado ni probado.

Esperemos opiniones de otros colegas que nos pudieran dar más luz al respecto, o puede que solo me suceda a mi por que omito “algo” que no tengo NPI de qué pueda ser.

De momento me sirve usar el visor HTML y el código javascript para resolverlo.

Saludos.

Martin Ibarra.


([N3] pacosatu) #12

Hola Martín.

Este fallo ocurre solo con Activar el Timer en el formulario, no es necesario que tengas que refrescar nada. Afecta claramente a la búsqueda en los controles vinculados a Maestro.

En mi caso, necesito el Timer para muchas cosas, no solo para mostrar la hora.

Ya lo he comunicado a soporte, a ver que me contestan.

Saludos
Paco Satué


([N3] pacosatu) #13

Hola.

Bueno, en soporte me han confirmado que el efecto colateral es debido efectivamente al refresco que realiza el Timer, en este caso cada segundo.

Entonces, lo de la HORA podemos solucionarlo de la siguiente forma:

  • Añadimos un objeto Variable Global THORA en memoria
  • Añadimos un Dock al Autoexec con el Timer activado y refrescando la variable THORA cada segundo. Podemos incluso tener oculto este Dock.
  • Ya podemos añadir un Texto Estático a cualquier formulario con el contenido de THORA y teóricamente sin el problema colateral en los controles Maestros.

Saludos
Paco Satué


([N3] pacosatu) #14

Hola.

Olvidaros del ejemplo anterior.
El efecto colateral sigue existiendo aun cuando el Timer esté en otro formulario y el intérvalo sea largo (10 segundos).

Cada vez que se ejecuta el evento Timer y éste refresca la variable Global, se produce a su vez el refresco del formulario activo y como consecuencia algunos controles tiene un comportamiento extraño.

Por lo tanto esto es un Bug.

Saludos
Paco Satué


([N1] imesacodabar-es) #15

Yo el timer lo uso para mostrar mensajes durante unos segundos.
La verdad, me ha descolocado un poco, ya veré cómo lo soluciono.
Saludos,
Iván.


([N3] pacosatu) #16

Hola Iván.

Para mostrar mensajes durante unos segundos no hay problema.
Te montas una función de Velneo que haga uso de las funciones del API VAbstractDataView.startTimer(msec) para mostrarlo y VAbstractDataView.stopTimer() para ocultarlo.

Saludos
Paco Satué


([N3] pacosatu) #17

Hola.

Aún a riesgo de ser un poco pesado, pongo la siguiente nota publicada por Rafael Cueto (https://velneo.zendesk.com/entries/20249068-%C3%81mbito-de-las-variables) que aclara totalmente el efecto colateral en algunos controles cuando actualizamos variables glabales, por ejemplo desde un Timer.

Dado el carácter de globalidad de este tipo de variables, debemos tener en cuenta que cada vez que modifiquemos su valor se sincronizarán las propiedades fórmula de los elementos que intervengan en la aplicación. Por ejemplo, si en un proceso ejecutado en primer plano modificamos el valor de una variable global, se sincronizarán todas las propiedades que sean fórmula en todos los elementos de interfaz activos.

Vaya tela, ¡¡ y solo queríamos mostrar la hora en un formulario !!

Saludos
Paco Satué


([N1] aztecmexico) #18

Hola Paco,

Pues tambien si lo hago con variables locales me la aplica igual, o sea, no habrá manera de un timer “local”, jajajajaja, vamos, “focalizar” el efecto del timer o tener más control sobre él, digamos pudiendo ver la señal timer y aplicarla a un control específico del formulario.

Por otra parte no sabía que los enlaces a maestros fuerán considerados fórmula, toda vez que tengo un ID en la tabla, y como tal no lo calcúlo en ningún momento, bueno así lo veo yo.

Habrá que trabajar por parte de nuestros amigos de Velneo en pulir y mucho el timer, porque si te platicara lo que pienso hacer con él (con el timer), vamos, si funcionara mejor podríamos hacer muchas cosas interesantes.

El punto aquí es, que refresques lo que refresques, sean campos, rejillas, variables, etc. hay efectos indeseados porque el timer “jode” a todos los controles de tipo fórmula de una interfaz activa, valiendole sorbete si “value changed” o no, “chanclas diabólicas”, nunca espere que los efectos de la globalización “política” aplicaran igual a la globalización o efecto global de las variables globales y sus primos, los controles tipo fórmula que yo no sabía que lo eran o así se consideraban.

Bueno, después de esta buena cantinfleada a seguirle dando que hay que comer.

Saludos.

Martín Ibarra.

Paco, gracias por tu valioso tiempo en investigar y probar al respecto.


([N1] imesacodabar-es) #19

Mil gracias Paco por allanarme el camino.
Saludos.
Iván.