Evitar cargar históricos en subformularios

Hola, un saludo a toda la comunidad.

Repasando el rendimiento de mis formularios observo que al entrar en un maestro de artículos se disparan las búsquedas en todas las pestañas con rejillas de presupuestos, pedidos, albaranes, …
Esto ocurre por el item cambio de seleccionado y luego si entro en un subformulario me vuelve a disparar la búsqueda porque tengo la señal on show activada.

¿Cómo puedo hacer que solo busque cuando entro en el subformulario y detecte el item del cambio seleccionado sin que se disparen el resto de búsquedas?

Espero haberme explicado, gracias.

Hola. Imagino que te refieres a cuando, por ejemplo, abres una ficha de un artículo. Se muestra entonces el formulario que tenga asignada la rejilla para las modificaciones en una nueva pesataña.
Entonces, supongo, se te disparan las búsquedas en todas las pestañas de los subformularios que tienen rejillas con datos que guardan relación con el artículo accedido.
Y cuando abres un subformulario de rejilla se vuelve a realizar la carga de la rejilla.
Y supongo también que las rejillas se muestran con una vista de datos donde el primer objeto es un proceso (el que carga los registros a mostrar en su salida) y donde el segundo objeto es la rejilla.
Pues imagino que la solución sería cambiar la propiedad “modo de carga” en la vista de datos.
Opción1 - para que solo se efectúe al mostrar la primera vez
Opción2 - para que se ejecuta cada vez que se muestra
… o bien alguna de las otras opciones. Y quitar el on_show.
Pero si quieres trabajar la lista con on_show, creo que debes hacer que el primer objeto de la vista de datos (el proceso que entrega la lista de registros a mostrar) no haga nada.
Según mi experiencia con vERP, ese proceso queda vacío, sin programación y entrega a su salida una lista vacía.
Lo mismo me he explicado tan mal que no te he liado más. En fin.

Hola carlosan.

Si es correcto lo que supones, además tengo el primer objeto un proceso vacío y el modo de carga es siempre que se muestre. Por eso en el on_show hago la búsqueda que me interesa, la misma que utilizo para el item: cambio de seleccionado (siguiente / anterior artículo).

“Yo” creo que debería ejecutarse la búsqueda en el momento en que se muestre ese subformulario y lo hace en todos los subformularios cuando abro la ficha. Lo compruebo poniendo un mensaje en cada búsqueda y van saltando los mensajes.

No sé, he hecho la consulta a soporte a ver que me dicen.

Gracias.

Hola de nuevo,
me comentan desde soporte que ese comportamiento no se puede evitar.

Al final lo he resuelto y de la manera más fácil… parezco un juvenil, jajjajaja:
En el evento on_show del subformulario hago la búsqueda y pongo la variable ESTOY=1.
En el on_hide ESTOY=0.
En el item cambio de selección IF ESTOY=0 Finalizar proceso ELSE lanzo la búsqueda.
De esta manera cuando entra en la ficha del artículo NO lanza la búsqueda en todos los subformularios.

Salud y buen fin de semana.

Hola process.

No entiendo el problema, seguramente porque me faltan datos.

Creo que lo que planteas, bien explicado, es:

  • Tengo un formulario con Origen Ficha de Artículos. Este formulario permite la navegación por la tabla de Artículos cambiando el Item seleccionado en el Origen.
  • Hay un conjunto de Pestañas con sus respectivos subformularios con los Plurales de presupuestos, pedidos, albaranes, …
  • En cada subformulario se ha definido una Conexón de evento a la señal Item: Cambio de seleccionado y el Manejador de evento es BUSQUEDA.
  • También hay una Conexón de evento a la señal On Show de cada subformulario y el Manejador de evento es también BUSQUEDA.

Con este diseño, cada vez que se produce la señal Item: Cambio de seleccionado del formulario principal se dispararán todos los Manejadores BUSQUEDA de los subformularios, además de ejecutarse cuando se activa la pestaña. Esto en Cloud puede saturar el hilo principal del formulario y empeorar la experiencia de usuario.

Para evitar este comportamiento, debemos limitar la ejecución de la BUSQUEDA a solo el subformulario que está visible.
Para eso, en la primera línea de BUSQUEDA, habrá que usar el comando
Interfaz: ¿Está visible? (, LOK)
y solo ejecutar el resto si LOK = 1

Pruébalo.

Saludos
Paco Satué

1 me gusta

Si Paco, es lo que comentas se disparaban todos los Manejadores, por eso se me ocurrió lo de la variable.

Lo voy a hacer con el Interfaz: ¿Está visible?, con 1 línea solucionado, ya lo he probado.

Gracias

Hola process.

OK. Entonces responde a Soporte que sí que hay solución a ese comportamiento.
De esta forma podrán darle la respuesta correcta a otros usuarios.

Saludos
Paco Satué

1 me gusta