
Ya están disponibles en la página de descargas los componentes actualizados a la revisión Velneo V7 7.14.2. También está disponible la actualización para los servidores de Velneo Cloud desde el panel de control.Recuerda que si eres suscriptor tienes actualizados todos los componentes correspondientes a tu nivel y que si actualizas el servidor, en Windows los componentes Velneo vClient V7, Velneo vWebClient V7, Velneo vAdmin V7 y Velneo vDevelop V7 se actualizarán automáticamente al detectar Velneo vClient V7 la nueva versión del servidor, siempre y cuando estén instalados en una carpeta independiente a los componentes de pago correspondientes a tu nivel.Recomendamos la actualización a esta nueva revisión para aprovechar las siguientes mejoras:
Lista de novedades 7.14.2
Velneo vClient V7
469 – Error de funcionamiento de la instrucción de procesos SDV: Renombrar o mover fichero en el servidor
Al usar el comando para renombrar o mover un fichero en el servidor por SDV, si usábamos sendas, no tenía efecto, pero si usábamos nombres de fichero, aunque renombraba, lo movía incorrectamente de situación.Solucionada la incidencia, el comando acepta sendas relativas o nombres de fichero, renombrando o moviendo correctamente el fichero en cada caso, mejorando la funcionalidad de SDV.

1807 – Los formularios mostrados con los comandos Modificar ficha con formulario no aplican los estilos
Cuando aplicábamos estilos CSS en el inicio del marco AUTOEXEC, estos no se aplicaban en formularios abiertos con el comando de instrucción Modificar ficha con formulario.CSSSolucionada la incidencia, se aplican los estilos CSS también a los formularios abiertos con este comando de instrucción. También se ha programado para los formularios que se muestran con Disparar objeto o el comando de instrucción Mensaje. De esta forma, se facilita la personalización la interfaz de nuestras aplicaciones, evitando repetir código.
2003 – Cuando intentamos modificar una ficha bloqueada con la rejilla editable, no devuelve el error
Cuando intentábamos modificar una ficha en una rejilla editable y la ficha ya ha sido bloqueada previamente, aunque no permitía modificar el registro, podíamos no saber a qué se debia.Solucionada la incidencia, cuando se produce un bloqueo en este punto se muestra un mensaje al usuario, indicándole que está intentando modificar una ficha que ya está siendo modificada por otro usuario y evitando confundir al usuario informándole adecuadamente.
2379 – En la toolbar que especificamos en la propiedad toolbar de una vista de datos, no se muestra el texto de los menú en stock, sólo el icono
En una toolbar usada en una vista de datos para la que habíamos especificado la forma en que se presenta el icono y el texto (sólo texto, sólo icono, icono y texto), no se aplicaba esta propiedad, con lo que únicamente se presentaba el icono.Solucionada la incidencia, se aplica la configuración elegida, con lo que se mostrará icono o texto en función de nuestra selección, permitiéndonos personalizar el interfaz según nuestras necesidades.
2385 – No funcionan las teclas aceleradoras de copiar, pegar, deshacer y rehacer en el editor de dibujos
Las teclas aceleradoras de las funciones copiar, pegar, deshacer y rehacer del editor de dibujos no eran funcionales.Solucionada la incidencia, las teclas aceleradoras correspondientes a estas funciones estarán disponibles para su uso, mejorando la experiencia de usuario.

2515 – Variable local EVENT_PARAMS no retorna nada en las posiciones 1 y 2 con las señales de Item (activado, simple-click y doble click)
La variable local EVENT_PARAMS no mostraba información acerca de las posiciones con las señales del grupo Ítem.Solucionada la incidencia, se informará de la fila o columna en función del objeto que emita las señales, lo que nos permitirá dotar a nuestra aplicación de mayor funcionalidad aprovechando la información que se suministra.
2843 – Cuando asignamos la función currentUTCDateTime() a un campo de tipo tiempo el dato resultante es la fecha/hora local, no UTC
Cuando utilizábamos el resultado de la función currentUTCDateTime() como contenido inicial de un campo de tipo tiempo, el resultado era la fecha y hora locales, el tiempo en UTC.Solucionada la incidencia, el resultado es el esperado, guardará el tiempo correspondiente en UTC, que podremos usar cuando sea necesario conocer ese dato.
2908 – Las teclas aceleradoras no son funcionales en un control de formulario botón SVG
Cuando asociábamos una tecla aceleradora a un control SVG, en ejecución, al pulsar las tecla aceleradora no se disparaba el comando asociado al control.Solucionada la incidencia, la tecla aceleradora correspondiente dispara correctamente el comando asociado, dotando de mayor funcionalidad a los botones SVG.
2984 – Cuando resolvemos un puntero indirecto real con un valor constante, éste no se resuelve en ejecución
Cuando resolvíamos un puntero indirecto real con un valor constante, en ejecución no era resuelto.Solucionada la incidencia, los nuevos registros que se creen en las tablas se resolverán correctamente, aún usando valores constantes, evitando dejar vacía la resolución en ejecución debido a este comportamiento no esperado.Los registros ya existentes en las tablas para que resuelvan bien deberían modificar el valor del campo volviendo a modificarlo con el mismo valor.
3110 – En una tabla con un enlace maestro a sí misma, al añadir una ficha desde un alternador o multivista, se induce la ficha seleccionada en el objeto activo
Cuando teníamos una tabla enlazada consigo misma, y en pantalla tenemos un alternador o un multivista, si en el objeto de lista del alternador (por ejemplo, una rejilla o un casillero), tenemos seleccionado un ítem y creamos una nueva ficha, veremos que el campo puntero a la misma tabla es inducido con el código del registro seleccionado en la vista activa del alternador o multivista.Solucionada la incidencia, no se inducirá la ficha seleccionada en el objeto activo, evitando un comportamiento no esperado.

3145 – Que se distinga visualmente en los calendarios desplegables desde controles de edición fecha la fecha del sistema
En el calendario desplegable del control de edición de fecha no aparecía resaltado el día en curso.Solucionada la incidencia, se mostrará en negrita y en color verde el día de hoy, lo que facilitará su localización en el calendario.
3148 – Formularios: Si a un control de tipo pila de formularios le asignamos borde = «ninguno» y tamaño borde = 0, en ejecución se pinta un borde igualmente
Cuando en un formulario asignamos a la propiedad borde el valor ninguno y configuramos el tamaño del borde igual a 0, en ejecución se pintaba un borde igualmente, independientemente del estilo visual seleccionado.Solucionada la incidencia, cuando asignemos el valor ninguno a la propiedad borde, no se pintará, permitiéndonos personalizar completamente el diseño de nuestros formularios.
3406 – Si en la fórmula filtro de una búsqueda utilizamos una variable local, al ejecutar la búsqueda se muestra el mensaje «Error de sintaxis: ID VARIABLE»
Cuando en una fórmula filtro de una búsqueda utilizamos una variable local, al ejecutar la búsqueda se muestra el mensaje «Error de sintaxis: ID_VARIABLE», siendo ID_VARIABLE el identificador de la variable declarada en la búsqueda. Si la búsqueda se ejecutaba en tercer plano, el servidor rompía.Solucionada la incidencia, podremos hacer uso sin problemas de variables locales en el filtro de la búsqueda, tanto en el cliente como en el servidor, con lo que podemos ampliar la funcionalidad de nuestras búsquedas.

3526 – El comando de instrucción de proceso V7 «Seleccionar ficha de la lista» muestra una rejilla de escasa anchura
El comando de instrucción de proceso V7 «Seleccionar ficha de la lista» mostraba una rejilla de una anchura escasa que impide mostrar todas las columnas y no se ajusta a la configuración de la rejilla.Solucionada la incidencia, el comportamiento es similar al que se produce en la rejilla de un localizador, que se ajusta a lo definido en la rejilla, mejorando la experiencia de usuario.
3536 – Clase VAbstractListDataView al usar setCurrentSelect( VRegister ) con parámetro VRegister da «Error en script: TypeError: ambiguous call of overloaded function»
Al usar en un manejador de evento la función de API setCurrentSelect( VRegister ) con parámetro VRegister daba «Error en script: TypeError: ambiguous call of overloaded function …»Solucionada la incidencia, podremos usar la función correspondiente haciendo uso de un registro como parámetro de la función, y no sólo del index, para posicionar la selección, permitiéndonos ampliar la funcionalidad de nuestros scripts.
3544 – No es posible maximizar la presentación preliminar de un informe cuando es abierta en cuadro de diálogo
Cuando abrimos la presentación preliminar de un informe en cuadro de diálogo, no es posible maximizar la ventana haciendo uso de las opciones habituales en la barra de título de la ventana.Solucionada la incidencia, aparecen en la barra de título de la ventana las opciones correspondientes de maximización de la ventana, facilitando la experiencia de usuario.
3554 – El comando «exportar informe a fichero» en 2º plano no imprime las imágenes
Cuando ejecutábamos un proceso en segundo plano que usaba el comando «exportar informe a fichero» los dibujos que éste tenía definidos (tanto imágenes estáticas como campos de tipo objeto dibujo), no se imprimían.Solucionada la incidencia, la impresión incluirá las imágenes provenientes tanto de objeto dibujo como de campos objeto dibujo, por lo que podremos hacer uso de informes que contengan estos objetos en procesos en segundo plano.
3561 – El comando Cargar plurales de una tabla de extensión de una tabla de un proyecto heredado no devuelve registros, tampoco el comando de lista de navegante
Cuando en un proceso usábamos el comando Cargar plurales de una tabla de extensión de un proyecto heredado, o bien a través del menú de Navegante seleccionamos los plurales, la lista resultante estaba vacía.Solucionada la incidencia, la carga de plurales de tablas de extensión de un proyecto heredado son funcionales tanto en cliente como en el servidor, tanto usando el comando de instrucción como el comando de lista de navegante, con lo que podremos ampliar las funcionalidades de nuestra aplicación.
3574 – Refresco de ficha en edición en rejilla editable
En una rejilla editable, tras la modificación del registro en curso mediante un manejador de evento con el comando de intrucción Interfaz: Obtener ficha en edición no se refrescaba la modificación, si el manejador se dispara desde un botón o una señal que no fuera «Perder foco» o «Ganar foco».Solucionada la incidencia, el refresco se produce nada más ejecutarse el manejador de evento, actualizándose la información en la fila en curso de la rejilla, por lo que podremos hacer uso de estos manejadores para modificar información de la fila según nuestras necesidades.

3578 – Error al recalcular un árbol visor de tablas con orden alfabético con el comando de interfaz Recalcular tras seleccionar un registro hijo en el árbol
Cuando usábamos el comando de interfaz: Recalcular sobre un árbol visor de tablas con orden alfabético tras seleccionar un registro hijo en el árbol, dependiendo de la selección el cliente podía romper.Solucionada la incidencia, podemos mostrar tablas con el árbol visor de tablas ordenado alfabéticamente sin ningún problema en nuestras aplicaciones.
3588 – vClient rompe despues de cerrar una pestaña de la ventana principal en determinadas circunstancias
Se producía un error en Velneo vClient V7 al ejecutarse un manejador de eventos que modificaba variables globales cuando se disparaba la señal on Show de un formulario.Solucionada la incidencia, se retarda el refresco de las variables globales para evitar problemas con la sincronización de variables globales en ejecución.
3589 – «TCP: Recibir hasta caracter marca» retorna hasta 8kb si no encuentra el caracter marca y es necesario volver a leer hasta recibir el caracter marca
Los comandos «TCP: Recibir hasta caracter marca» y «TCP: Recibir línea» retornaban hasta 8kb si no encontraban el caracter marca y era necesario volver a leer hasta recibir el caracter marca o fin de línea.Solucionada la incidencia, se elimina la limitación de 8kb, gestionándose de forma dinámica la longitud del buffer enviado, con lo que no necesitaremos programación extra para recibir los paquetes TCP completos.
3596 – Asistente de fórmulas: Si creamos en una fórmula un contenido de más de 32767 caracteres se corta su contenido
Asistente de fórmulas: Si creábamos en una fórmula un contenido de más de 32767 caracteres se cortaba a este tamaño, limitado por la capacidad del control.Solucionada la incidencia, se aumenta la capacidad del control permitendo hasta 131072 caracteres.
3601 – Modificando un maestro en un formulario mediante un manejador de evento, los controles de campos objeto continúan mostrando los del anterior
En un formulario en el que mostrábamos dibujos y textos de un maestro del registro en curso, por medio de un botón que dispara un manejador de evento modificábamos el maestro que enlaza. Veíamos entonces que los controles que mostraban la información del maestro se actualizaban mostrando la información del maestro exceptuando los controles que contenían objetos texto, texto enriquecido o dibujo del maestro, que seguían mostrando el maestro anterior.Solucionada la incidencia, cuando se realice una modificación de un maestro se actualizarán todos los controles que contengan información del maestro, tanto campos de la tabla como campos objeto.

3610 – La función load de la clase VRegisterList siempre devuelve false incluso cuando devuelve registro correctamente
Cuando usábamos la función load de la clase VRegisterList para cargar una lista de registros, el retorno de la función siempre era false, aunque la función funcionara correctamente y la lista fuera cargada.Solucionada la incidencia, el retorno de la función será true en el caso de que se haya podido lanzar la función correctamente, por lo que podremos usar el retorno para gestionar el flujo de nuestro proceso javascript.
3615 – Los botones de formulario no cogen como origen una ficha de extensión en ejecución
En un formulario en que teníamos declarada una ficha de extensión y esa ficha tenía un campo enlazado a un maestro, incluíamos botones o acciones con comandos para Localizar, Editar o crear un maestro. Estas opciones, en ejecución, no se disparaban.Solucionada la incidencia, los botones o acciones que programemos permitirán trabajar con los maestros de una ficha de extensión, permitiendo dotar de facilidades para asignar maestros a las fichas de extensión en formularios.
3616 – Las funciones isOk() y errorNumber() de la clase VRegister al hacer el mismo modifyRegister() devuelven valores diferentes si se hace en primer plano o 3P
Cuando usábamos las funciones isOk() y errorNumber() de la clase VRegisterList tras modificar registros con la función modifyRegister() el retorno era distinto en función de si la ejecución se realizaba en 1º o 3º plano, es decir, en el cliente o en el servidor devuelven valores diferentes, en el caso de registros que finalmente no eran modificados ya que el valor introducido se correspondía con el anterior.Solucionada la incidencia, el retorno de las funciones isOk() y errorNumber() tanto en 1º como 3º plano son coherentes y nos permitirán conocer si realmente se ha producido modificación o no en ambos casos, informando en caso de que sea necesario del error producido.
3617 – El comando Cesta: agregar a la lista en curso limpia los registros de la cesta local de origen si ya existen en la lista de destino
Trabajando con cestas locales, cuando usábamos el comando de instrucción «Cesta: agregar a la lista en curso» y agregábamos registros, en el caso de que ya existiesen previamente en la lista de destino, se quitaban de la cesta además de añadirlos a la lista en curso. Esta incidencia no afectaba al uso del objeto Cesta, únicamente a cestas locales creadas en procesos o manejadores de evento.Solucionada la incidencia, cuando agreguemos registros de la cesta a la lista en curso no se quitarán de la cesta, por lo que el comando «Cesta: agregar a la lista en curso» dejará de afectar al contenido de la cesta y podremos seguir usándola en nuestro proceso.

3618 – Estando abierto el cuadro de diálogo de impresión de un informe en presentación preliminar si un manejador o proceso cambian una variable global se imprime
Cuando teníamos abierto el cuadro de diálogo de impresión de un informe en presentación preliminar, y se ejecutaba un proceso en segundo plano o un manejador de evento disparado con la señal Timer, que a su vez modificaran una variable global, se disparaba la impresión del informe.Solucionada la incidencia, se evita este comportamiento no esperado de la impresión de informes.
3620 – Cuando en un formulario A incluimos un formulario B que a su vez contiene al formulario A, en ejecución rompe vClient
Cuando en un formulario A incluimos un formulario B que a su vez contenía al formulario A, se producía un error en Velneo vClient V7.Solucionada la incidencia, aún habiendo diseñado de esta forma un formulario, se evita el error, mejorando la experiencia de usuario. Además, también se avisa en el desarrollo, de esta circunstancia (1260).
3622 – En alta de formulario con bloqueo duro emular el bloqueo duro aunque no exista la ficha
Cuando nos encontramos en un alta usando un formulario con bloqueo duro, no se producía realmente el bloqueo duro al no existir la ficha previamente, con lo que la ficha no estaba realmente bloqueda, agrupando el resto de operaciones en una única transacción como sí sucedía en modificación.Solucionada la incidencia, en alta de formulario con bloqueo duro se emula el bloqueo duro aunque no exista la ficha, por lo que también se agrupan el resto de operaciones en una única transacción, homogeneizando el funcionamiento del bloqueo duro en ejecución.
3624 – El comando de instrucción cargar maestros no devuelve registros cuando el campo es puntero a tabla maestra de extensión, puntero indirecto real o puntero indirecto virtual
El comando de instrucción Cargar maestros cuando se usaba con un campo puntero a tabla maestra de extensión, un puntero indirecto real o un puntero indirecto virtual no retornaba registro alguno aunque sí tuviese registros enlazados.En el combo de selección sí que aparecía el campo puntero a la tabla maestra de extensión, pero en ejecución no daba ningún error o aviso, simplemente no devolvía registros.Solucionada la incidencia, se han incluido en la funcionalidad la posibilidad de acceder a los punteros a extensión, y ambos tipos de punteros indirectos, reales y virtuales. También se han añadido a la opción Maestros del menú de Navegante, con lo que el usuario final también podrá navegar a maestro haciendo uso de estos mismos campos punteros.

3627 – La función setField de la clase VRegister al asignar valor a un campo de tipo hora, lo graba dependiendo de la configuración del sistema operativo del equipo
La función setField de la clase VRegister al pasarle una hora como parámetro, la admitía dependiendo de la configuración del sistema operativo del equipo. Esto hacía complicado introducir datos en un campo de tipo hora desde JavaScript. Por ejemplo, en Windows admitía poner «23:45:56″, pero así fallaba en Linux y Mac. En Mac permitía 23:45», pero así fallaba en Windows y Linux. Finalmente en Linux admitía poner «11:45 PM» pero así fallaba en Windows y Mac. Además, en el caso de Linux y Mac no es posible pasarle los segundos y los milisegundos.Solucionada la incidencia, podemos pasar la hora como parámetro en alguno de los siguientes formatos que son aceptados para todos los sistemas operativos:
- horas:minutos:segundos:milisegundos
- horas:minutos:segundos
- horas:minutos
- horas
Además, los valores no necesitan llevar un cero delante para ajustarlo a dos dígitos, aunque si lo llevan también los acepta.Ejemplos:
- reg.setField(«HORA»,»23:30″); // 23 horas 30 minutos
- reg.setField(«HORA»,»23:3″); // 23 horas 3 minutos
- reg.setField(«HORA»,»3:3″); // 3 horas 3 minutos
- reg.setField(«HORA»,»03:3″); // 3 horas 3 minutos
- reg.setField(«HORA»,»03:03″); // 3 horas 3 minutos
- reg.setField(«HORA»,»23:30:03″); // 23 horas 30 minutos 3 segundos
- reg.setField(«HORA»,»23:30:3:5″); // 23 horas 30 minutos 3 segundos 5 milisegundos
3632 – Las funciones fieldToInt y fieldToBool de la clase VRegister cuando se les pasa como parámetro el número de un campo booleano siempre devuelven 0 ó false
Las funciones de VRegister fieldToInt y fieldToBool cuando eran usadas para retornar el valor de un campo booleano devolvían false ó 0 siempre que se usaban con el número de campo como parámetro. En el caso de que usaras el identificador como parámetro, devolvían el valor correctamente.Solucionada la incidencia, podremos usar las funciones fieldToInt y fieldToBool, usando como parámetro tanto el número de campo como el identificador para indicar el campo cuyo valor queremos obtener, lo que nos facilitará la programación de javascript sobre todo cuando queramos obtener datos de forma dinámica.
3634 – En el asistente de fórmulas Javascript, cuando seleccionamos un campo booelano, genera la función: theRegister.fieldToInt(«ID CAMPO») en lugar de fieldToBool()
En el asistente de fórmulas para Javascript, cuando seleccionábamos un campo booleano generaba la función: theRegister.fieldToInt(«ID CAMPO») en lugar de la función correspondiente para booleanos: fieldToBool().Solucionada la incidencia, cuando usemos el asistente y seleccionemos un campo de tipo booleano nos incluirá la función theRegister.fieldToBool(), lo que facilitará el trabajo con booleanos y evitará errores de uso.

3636 – El comando de instrucción de proceso «Get item de variable local array de objeto» no es funcional
El comando Get ítem de variable local array de objeto no podía ser usado cuando trabajábamos con el grupo de comandos de instrucción de Objeto, para obtener los valores de una variable de tipo array.Solucionada la incidencia, podremos usar la función Get ítem de variable local array de objeto para obtener cada uno de los valores que contiene una variable tipo array del objeto disparado, tras su ejecución.
3637 – Si desde un manejador de evento de un formulario asignamos un valor a un edit numérico con decimales y le establecemos el foco, no selecciona bien su contenido
Cuando desde un manejador de evento de un formulario asignábamos un valor a un edit numérico con decimales y le establecíamos el foco, no seleccionaba bien su contenido, manteniendo la selección el número de caracteres seleccionado correspondiente al dato anterior a la modificación.Solucionada la incidencia, tras modificar el dato que mostramos en un edit numérico se selecciona todo el dato, mejorando la experiencia de usuario.
3638 – En un formulario mostrado con el comando de botón «mostrar subformulario modal» no se aplican los estilos sin menú, sin botones, sin título…
En un formulario mostrado con el comando de botón «mostrar subformulario modal» no se aplicaban los estilos de formulario que afectan a la barra de título de la ventana y que incluye las opciones de no mostrar el menú, los botones de maximizar, minimizar y cerrar, el título, etc.Solucionada la incidencia, podremos hacer uso de los estilos del formulario para personalizar la forma en que se presenta un formulario mostrado con el comando de botón «Mostrar subformulario modal», indicando si queremos que muestre el menú, los botones, el título, etc.
Velneo vDevelop V7
714 – El cuadro de diálogo de creación de una solución muestra una lista de servidores con servidores a los que no está conectado
El cuadro de diálogo de creación de una solución mostraba una lista de servidores que incluía servidores a los que no estábamos conectado, con lo que podemos tratar de crear una solución en un servidor sin conexión, aunque al final nos indicara un mensaje nuestro error.Solucionada la incidencia, la lista muestra únicamente los servidores a los que estamos conectados como opción para seleccionar, evitando la confusión de mostrar servidores no disponibles en ese momento.
828 – Botón crear indice del campo seleccionado, se activa con cualquier tipo de campo
Al seleccionar un campo, de cualquier tipo, este botón aparecía activo aunque no fuera funcional.Solucionada la incidencia, el botón únicamente se mostrará activo cuando sea funcional, es decir, para campos que sean indexables. De esta forma evitamos equívocos sobre cuales son los campos indexables.

1260 – Error cuando en un formulario A incluimos un formulario B que a su vez contiene a A
Cuando por error incluimos un formulario de forma recursiva, usando para ello separadores de pestañas, pilas o cajas de formularios o splitters, esto provocaba que el cliente que lo ejecute rompa.Solucionada la incidencia, se controla en edición y se avisa de la circunstancia, y además se evita en ejecución que el cliente rompa en este caso (3620), mejorando la experiencia de usuario.
1643 – Comando Disparar objeto: Condicionar modos de ejecución en función del objeto seleccionado
Cuando habíamos de seleccionar el modo de ejecución en el comando de instrucción Disparar objeto del grupo Comandos de objeto, mostraba todas las opciones disponibles pero no se discriminaba los modos en función del objeto a disparar.Solucionada la incidencia, se mostrarán los tres planos disponibles para procesos, que son los objetos que permiten seleccionar un plano, indicando en el caso del resto de objetos seleccionados que esta propiedad no se aplica, con el fin de facilitar el desarrollo y evitar errores.
2106 – Copiar y pegar tablas e índices no genera los enlaces de plural
Cuando copiábamos y pegábamos tablas e índices que generan nuevos enlaces de plural, estos no eran generados. Debíamos cerrar el proyecto y volverlo a abrir para que se recalcularan.Solucionada la incidencia, no será necesario cerrar el proyecto y volverlo a abrir para que se recalcule, ya que serán creados y calculados de forma automática al pegar las tablas e índices, evitando tareas innecesarias y facilitando el uso de los enlaces de plural correspondientes.
2162 – Bloc de formularios: No es funcional el menú de contexto
Los menús de contexto no tienen sentido en bloc de formularios, ya que se actúa sobre el formulario en curso, pero estaba permitido definir uno.Solucionada la incidencia, no se muestra la opción de incluir un menú de contexto para evitar llevar a error cuando estamos programando.
