Activar pestaña subformulario desde otra pestaña


([N1] VictorGT) #1

Hola a todos… Otra de manejo de subformularios…

Estoy haciendo una opcion para crear ventas, estilo TPV.

Por sencillez para el manejo de los usuarios, hemos escogido
un interfaz tipo “asistente”. Hemos dividido la venta en
seis pasos, e implementamos cada paso en una pestaña de un
separador de formularios.

El caso es que estoy teniendo bastantes problemas, a la
hora de programar las opciones: si las situo en el formulario
principal contenedor
, en principio no hay problemas, pero si
la situo en los propios subformularios, muchas no me funcionan.

Me explico mejor:

A) Por ejemplo, para salir aceptando y grabar la venta, me
funciona en los dos sitios (v15.2), pero misteriosamente
si quiero salir cancelando solo me funciona desde el principal.
Rarito no…?

B) Me gustaria poner los botones de “anterior” y “siguiente”
en los propios subformularios, pero segun tengo entendido eso
solo se puede hacer desde el principal.

Me gustaria reducir las opciones a programar en el formulario
principal contenedor y poder poner la mayoria en los subformularios,
pero sospecho que al final tendre que hacer una mezcla de ambas.

Si alguien ha hecho pantallas estilo asistente con separadores
de formularios, se agradecerian consejos.

Saludos.


([N4] eic) #2

Hola.

Utilizo a menudo pantallas estilo asistentes.

La mejor opción para implementar un asistente es utilizar, en vez de un separador de formularios, el control “pila de formularios”. Funciona como un separador, pero no hay pestañas, y el modo de activar el subformulario que se quiere visualizar es a través de una instrucción del manejador de evento (activar subcontrol del contenedor de formularios). Es mejor para el usuario, porque no se ven pestañas, y se parece más al típico asistente.

Y, por supuesto, los botones de navegación (Anterior, Siguiente, Finalizar, Cancelar) deben estar en el formulario principal. No tiene sentido cancelar desde un subformulario, por ejemplo.

Saludos,

Fran Varona


([N1] VictorGT) #3

Gracias Fran.

He estado probando el control Pila de formularios, y hasta donde yo llego es identico al separador de formularios, solo que no tienen pestañas para seleccionar. Pero a mi las pestañas me vienen bien… las uso para poner el titulo de la etapa del asistente, y tampoco me preocupa que el usuario las use para cambiar de etapa…

Si no hay algun motivo de peso adicional por ahora me quedo con el separador…

Y lo de poner las opciones de navegacion en los subformularios, pues es cuestion de diseño (o sea, de gustos). Esta claro que sera mas facil (y quiza mas sensato) implementarlas en el formulario principal, pero por ejemplo, los botones de anterior y siguiente he conseguido meterlos (y que funcionen) en los subformularios. Para el boton siguiente el codigo del evento JS seria:

var miSep = theRoot.dataView().mainForm().control(“SEP_MAIN”);
miSep.setCurrentIndex(miSep.currentIndex+1);

donde SEP_MAIN es el nombre del control separador de formularios. Notese el uso de .mainForm().

Para hacer lo mismo desde un evento del formulario principal, usariamos:

var miSep = theRoot.dataView().control(“SEP_MAIN”);
miSep.setCurrentIndex(miSep.currentIndex+1);

Tambien funciona usando -1 para el formulario anterior, y ademas, no hay que preocuparse si sobrepasas el formulario inicial o el final. Si usas “Anterior” en el primer formulario, o “Siguiente” en el ultimo, no hay fallos.

Saludos.


([N4] eic) #4

Hola.

Por supuesto, para gustos no hay disputas.

Las ventajas que (a mi gusto) tiene la pila, y usar los botones en el formulario principal, son:

  • Si necesito poner el título de la etapa, lo pongo en el propio subformulario
  • Tengo un comando de V7 para cambiar de etapa (no necesito usar Javascript)
  • En ocasiones, en los manejadores que ejecutan los botones Anterior / Siguiente, tendré que rellenar datos de algún subformulario (p.ej., un contenedor vista de datos), que es sencillo realizar desde comandos V7 y desde el formulario principal (que puede acceder a todos los subformularios).
  • Uso una variable local del formulario principal para saber en qué paso estoy (del 1 al…), y con esa variable puedo poner inactivo el botón Anterior o Siguiente, si estoy en el primer paso o en el último, que es más intuitivo para el usuario que poner un botón activo y que no haga nada.
  • Establezco yo el orden que quiero mostrar al usuario, sin permitirle saltarse pasos (porque haga click en la pestaña que a él le apetezca), o incluso, dependiendo de las opciones que vaya eligiendo, le hago saltar a otro paso diferente.

Pero cada opción tiene sus propias ventajas.


([N1] VictorGT) #5

Como siempre, todo clarito y bien explicado. Gracias Fran.

Un problema puede surgir si los titulos de las etapas son largos, en las pestañas quedarían mal,
sin embargo en la pila tienes mas espacio. Un punto para la pila.

Tambien es mas comoso no usar JS, por supuesto. Otro punto para la pila.

El control de en que subformulario estoy, no hace falta si usas separador. Un punto para el separador.

El resto de cosas creo que es mas o menos igual en ambos casos. La mayor parte de la logica y
control del asistente la deberemos hacer desde el formulario principal. Intentar hacerlo desde los
subformularios (como yo hice) solo sirve para darte dolores de cabeza.

Saludos a todos.