Hola Gonzalo.
Por la forma en que está construido Velneo solo podemos acceder al Separador de formularios desde el Formulario principal.
Te voy a proponer una solución que utiliza un mínimo de JavaScript y está basado en considerar que la carga del Detalle está diferida en el tiempo. Usaremos para ello el Timer de los formularios.
Necesitamos lo siguiente:
- Un proceso en 2º plano PRO_CREAR_DETALLE_2P que en tu caso lee los datos desde Excel.
- Una variable Global G_REFRESCAR que se pondrá a 1 cuando PRO_CREAR_DETALLE_2P termine. Recuerda que a los procesos en 2P no podemos pasarles parámetros ni fijar ni obtener Variables locales.
Tenemos 3 formularios: FRM_PRINCIPAL con un separador de 2 formularios FRM_DATOS y FRM_DETALLE
- FRM_DATOS contiene la lógica que lanza el proceso en 2P PRO_CREAR_DETALLE_2P
- FRM_DETALLE contiene la Vista de Datos del Detalle que inicialmente estará vacio
- Solo podemos rellenar la Vista de datos de FRM_DETALLE desde el formulario principal FRM_PRINCIPAL
Empezamos:
Para iniciar y parar los Timer usaremos la función del API startTimer() y stopTimer().
Añadimos 2 manejadores de evento a FRM_DATOS
// Manejador START_TIMER_JS
theRoot.dataView().startTimer(200)
// Manejador STOP_TIMER_JS
theRoot.dataView().stoptTimer()
- En FRM_DATOS usamos el siguiente código Velneo
Manejador POS_INI (evento post-inicializado)
Rem ( Ejecutamos el proceso en 2P. Al terminar pondrá la Variable Global G_REFRESCAR a 1 )
Ejecutar proceso ( PRO_CREAR_DETALLE_2P@0PS_Ejercicios_app, 2º plano: Local multitarea (asíncrono), LOK, , )
Interfaz: Ejecutar manejador de evento ( START_TIMER_JS, )
Manejador ON_TIMER (evento Timer)
Rem ( Este evento se ejecuta antes que el del formulario principal )
Rem ( Comprueba si $REFRESCAR = 1 y si es cierto detiene el Timer )
Set ( LCOMPLETADO, $REFRESCAR@0PS_Ejercicios_dat.dat )
If ( LCOMPLETADO )
// Paramos el Timer una vez completado el proceso en 2P
Interfaz: Ejecutar manejador de evento ( STOP_TIMER_JS, )
- En FRM_PRINCIPAL usamos el siguiente código Velneo
Manejador ON_TIMER_PESTAÑA (evento Timer del subcontrol SEPARADOR.PESTAÑA1)
// Este Manejador captura el evento Timer de la pestaña FRM_DATOS
// Este Manejador se ejecuta después del manejador ON_TIMER de la pestaña FRM_DATOS
// Obtenemos el valor de la variable local LCOMPLETADO de la pestaña FRM_DATOS
Interfaz: Get variable local de vista de datos ( SEPARADOR.PESTAÑA1, LCOMPLETADO, LCOMPLETADO )
If ( LCOMPLETADO )
// Cargamos el detalle
Cesta: Crear cesta local ( LINEAS@0PS_Ejercicios_dat, oCes )
Cargar plurales ( LINEAS_CABECERAS )
Cesta: Agregar lista a la cesta ( oCes )
Interfaz: Procesar ( SEPARADOR.PESTAÑA2.REJILLA, Todas )
Cortar lista ( 0, )
Cesta: Agregar a la lista en curso ( oCes )
Interfaz: Activar subcontrol del contenedor de formularios ( SEPARADOR, PESTAÑA2 )
Con esto consigues demorar la carga del detalle en la Rejilla de la pestaña FRM_DETALLE.
En este ejemplo iniciamos el proceso en 2P desde el post-ini de FRM_DATOS pero puede hacerse en cualquier momento, incluso que lo lanze un botón. Recuerda siempre poner en marcha el Timer.
Hay otra forma de hacerlo mediante el API pero eso ya es otro tema.
Saludos
Paco Satué