Refrescar rejilla


([N4] SyP) #1

Supongo que será posible, pero he buscado por ahí y no encuentro como hacerlo.
Tengo un formulario, con un botón que genera x registros históricos. Dentro del formulario hay varios sub-formularios, uno de ellos con la rejilla del histórico. Si abro el formulario principal y me sitúo en el sub-formulario, cuando pulso el botón de generar, no me refresca la rejilla. He probado con Interfaz: Recalcular pero no funicona.


([N3] pacosatu) #2

Hola SyP.

El comando Interfaz: Recalcular (REJILLA) vuelve a ejecutar el proceso que alimenta la ReEjilla.

Por lo tanto, revisa el proceso que acompaña a la Rejilla en la Vista de datos del subformulario y comprueba que devuelve los registros del histórico.

Saludos
Paco Satué


([N4] SyP) #3

Gracias.
Es un formulario de vERP, el proceso de cargar lista, lo hace vacio y en el on_show, si no se ha cargado ya, realiza la carga. Si el botón lo pongo en el propio formulario, uso Interfaz: Ejecutar manejador de evento y lanzo la carga de la vista y funciona, pero como puedo hacer eso desde el formulario principal?


([N2] Esfero) #4

Puedes poner el manejador que carga la vista en el formulario principal, de esta forma puedes llamar al manejador cuando lo necesites.
1.- Cambia el manejador del sub-formulario al formulario principal
2.- Asocias el Botón que carga la vista en el sub-formulario a un manejador vacío
3.- En el formulario principal creas una conexión de evento asociado al botón del sub-formulario y al manejador que pasamos al formulario principal, para que cuando se pulse el botón capture el evento.

O bien si no quieres o no puedes cambiar el manejador:

Genera un manejador de evento en JavaStript en el formulario principal, con la siguientes instrucciones:

// Cargo la vista que contiene la rejilla
var subForm = theRoot.relativeControl(“CONTROL.CONTROL”);
// Selecciono el botón que tiene asociado el manejador que carga la vista
var btn = subForm.control(“NOM_BOTON”);
// Genero click
btn.click();


([N2] Esfero) #5

Perdón, me olvide del dataview()

// Cargo la vista que contiene la rejilla
var subForm = theRoot.dataview().relativeControl(“CONTROL.CONTROL”);
// Selecciono el botón que tiene asociado el manejador que carga la vista
var btn = subForm.control(“NOM_BOTON”);
// Genero click
btn.click();


([N3] pacosatu) #6

Hola Esfero.

Puedes obtener directamente el botón desde el formulario principal:

var oControl = theRoot.dataview().relativeControl("SEPARADOR.SUBFORM_1.NOM_BOTON")
oControl.click()

Para generalizar más esta técnica y no depender de la existencia de un botón, yo uso siempre el Timer del subformulario:

var oSubForm = theRoot.dataview().relativeControl("SEPARADOR.SUBFORM_1")
oSubForm.root().setVar("QUE_HACER", "REFRESCAR_LISTA")   // Aquí le indicamos al Timer qué es lo que tiene que hacer
oSubForm.startTimer(100)

En el manejador Timer del subformulario:

  • ejecutar siempre como primera línea un theRoot.dataView().stopTimer()
  • Leer la variable local QUE_HACER y actuar en consecuencia

Saludos
Paco Satué


([N4] SyP) #7

Muchas gracias Esfero.
Algo he hecho mal. En el formulario principal pongo un manejador de evento en JavaScript. Este manejador lo lanzo con interfaz ejecutar manejador.
En el subformulario pongo un botón que refresca la rejilla. El botón pulsado a mano funciona.
Cuando lanzo la generación no refresca y me aparece un error en la barra inferior (adjunto imagen).

Creo que el problema está en localizar el subformulario o el botón. He usado el asistente del indentificador de objeto y probado varias opciones pero nada.

// Cargo la vista que contiene la rejilla
var subForm = theRoot.dataview().relativeControl(“SEP.PAL”);
// Selecciono el botón que tiene asociado el manejador que carga la vista
var btn = subForm.control(“BTN_REF”);
// Genero click
btn.click();

No se si el nombre “SEP.PAL” o “PAL” o “velneo_verp_2_app/VTA_PED_LIN_G”, pero no funciona.
El formularios es VTA_PED_LIN_G, el separador de subformularios es SEP y el subformulario es PAL



([N4] SyP) #8

Gracias seh
He probado tu primera opción y aparece un error similar. La segunda opción si que no se por dónde cogerla


([N4] SyP) #9

Al final he puesto la primera opción que comentaba Esfero. Quería probar a hacerlo con JavaScript, pero de momento lo dejo así, aunque de todas formas me gustaría saber que estoy haciendo mal.

Muchas gracias por vuestro tiempo.


([N3] pacosatu) #10

Hola SyP.

Hay un error en la función dataview. Se debe escribir como dataView().

Estudia a fondo el API. Te permitirá solventar muchas carencias de Velneo nativo.

Saludos
Paco Satué


([N4] SyP) #11

Ok ahora si que funcionan las dos opciones, la tuya y la de Esfero.

Muchas gracias.


([N2] Esfero) #12

Gracias Paco por la aclaración.