Tengo un pequeño problema a la hora de introducir valores en controles desde JavaScript, en algunos casos me funciona correctamente y en otros no. Le he dado doscientas vueltas y no soy capaz de encontrar el motivo. ¿Alguien me puede apuntar en la dirección correcta para hacer esto? Bien sea ejemplos o tutoriales, ya que el Manual de Scripts oficial no me sirve de mucha ayuda en esto.
Aquí un ejemplo de código que funciona perfectamente:
La necesidad viene de que es un valor que se calcula desde otras fuentes y se rellena en el control como propuesta al usuario que está dando de alta o modificando un registro, pero que puede modificar dicho valor antes de efectuar el alta o modificación de la ficha.
Lo haría con nativo si hubiese alguna opción para hacer esto pero, hasta donde yo se, no se puede.
No se que otras fuentes tienes para rellenar la variable pero puedes anidar manejadores de eventos.
Puedes tener una principal que llame al javascript (tus fuentes) rellenar las variables y luego llamar a otro nativo que asigne el valor a los campos.
Por otro lado, si son valores propuestos al usuario, puedes ponerlo en el POS INI y así los tendrá cargados una vez abra el formulario.
De todas formas si lo quieres hacer así, según dice la documentación, updateControls trae la información del registro a los controles, es decir te va a traer el valor de los campos a los controles. Tu deberías usar updateRegister
Bueno, después de varias pruebas he descubierto dos cosas:
Utilizar la propiedad “value” o la función “setValue()” de un control solo sirve para aquellos que sean de edición numérica. Para los de edición alfabética no sirven, y si con éstos últimos usas la propiedad “text” o la función “setText()” se te mostrará el valor, pero nunca llegan a actualizar el valor de la variable o campo a la que apunta el control.
A pesar de todo ello, si el campo al que apunta el control de edición numérica es de tipo enlace tampoco funcionará.
Este bug o “mal comportamiento” de la función del API setText() ya está documentado desde hace por lo menos 4 años y está en la misma situación que otros muchos bugs de Velneo, totalmente ignorados versión tras versión.
Este era mi comunicado a soporte hace 4 años, en mayo de 2014:
Los controles vinculados a Variables o a campos de Tablas deben permitir la edición en los 2 sentidos, es decir, cambiando la variable/campo o introduciendo texto desde el Interfaz.
Además, el Control Edición de Texto está para editar la Variable/Campo, de lo contrario sería de Solo Lectura.
Por otro lado y para confirmar el mal funcionamiento de setText(), deja el control con el campo Contenido en blanco y verás que también se borra el texto cuando el control pierde el foco.
Lo grave de todo esto es que debe ser uno mismo el que, a base de mucho prueba y error, llegue a la conclusión absurda de que lo que parece decir la documentación, en realidad es mentira.
Conclusión, olvídate de usar la función setText(), no funciona como debería.
Desde el API establece nuevos valores directamente a las Variables Locales (con setVar()) y a los Campos de la Tabla (con setField()).
Los controles del formulario se refrescarán con updateControls() si están vinculados a campos de Tabla y de forma automática al cambiar de foco si están vinculados a Variables Locales.