top of page
Pestaña más, pestaña menos...
Ramiro Pérez Acebo - Noviembre 2013
 
 

Algunos de los que venimos de V6 añoramos la facilidad con que se podían mostrar/ocultar dinámicamente las pestañas de un separador. Los tiempos cambian así que en este artículo resumiré la forma de hacerlo en V7 usando manejadores de evento de Tipo JavaScript...

 

Para cada pestaña a controlar necesitaremos 2 manejadores de evento, uno para ocultarla y otro para mostrarla.

 

En el código de los Manejadores se usan estos identificadores y en las imágenes de más abajo se muestra su contenido

 

“SEP_DAT”                          Control Separador de Formularios

“Est_App”                           Proyecto de Aplicación con los Formularios

“M3_CMP_CAB_PRD_CAR”      Formulario de la pestaña a ocultar ó mostrar

“EST_SVC_VER”                   Icono que se va a mostrar en la pestaña

“Min_Dat”                           Alias del Proyecto en que está el icono

Cuando en el Formulario Principal (que contiene al Separador de Formularios) o en cualquiera de las Pestañas del Separador se produzcan las condiciones necesarias para que nuestra pestaña deba ocultarse o mostrarse, ha de establecerse algún mecanismo que active una Conexión de Evento del Formulario Principal. La Conexión de Evento ejecutará un Manejador (en el ejemplo se llama “PEST_AJT_ALL”) que evalúa las condiciones y ejecuta los Manejadores de Evento concretos, de tipo JavaScript, que muestran u ocultan las Pestañas (en este caso solo se controla una, pero podrían ser varias). Algo más o menos así:

Resumiendo...

 

Al cambiar las condiciones de visibilidad de una Pestaña se lanza una Conexión de Evento que mediante Manejadores la muestra o la oculta

Anexo

 

La cosa es sencilla cuando las condiciones se definen en el marco del Formulario Principal: en este caso basta con definir las Conexiones de Evento que detecten los cambios de valores que determinan la visibilidad de la Pestaña. Una vez detectado el cambio, se ejecuta el Manejador de Evento y en su caso se oculta o se muestra la Pestaña.

 

El problema se complica cuando las condiciones que cambian la visibilidad de una Pestaña están definidas en otra u otras Pestañas del Separador. En esas circunstancias tendríamos el problema de que aunque establezcamos en los Formulario de esas Pestañas Conexiones de Evento que identifiquen los cambios, no es posible acceder (al menos no de forma “life is soft” que yo conozca) a ejecutar el Manejador de Evento que gobierna la visibilidad y que está definido en el Formulario Principal.

 

Supongo que existen mejores opciones, pero yo he optado por la siguiente solución:

 

1.   Añadir en las Tablas en que lo necesite un Puntero a Maestro que usaré como comodín para estas cosas y otras similares

2.   Modificar el valor de ese Campo desde las Pestañas al cambiar las condiciones que influyen en la visibilidad de alguna de ellas

Para este ejemplo he añadido una nueva Pestaña en cuyo Formulario he definido dos variables locales: una booleana para el control de visibilidad y otra de texto para poder llevar el foco y ver el efecto en el separador.

 

Cuando el Check pierde el foco se dispara el Manejador de Evento que da valor al campo MDF. Puesto que ese valor se va a interpretar desde el Formulario Principal grabaremos lo que nos convenga cara a esa interpretación...

El contenido del Manejador podría ser este: 5 significa pestaña visible (da igual el valor, es un convenio con nosotros mismos...)

3.   Mostrar en el Formulario Principal un ComboBox con el campo #MDF (obsérvese que la condición visible es cero)

4.   Establecer una Conexión de Evento en el Formulario Principal asociado a “Cambio de Seleccionado” del ComboBox no visible y hacer que ejecute el Manejador de Evento que se encarga de controlar la visibilidad de las Pestañas.

En ejecución se vería de esta Forma:

Al marcar la opción “Mostrar Pestaña” y llevar el Foco al segundo campo se muestra la pestaña de “Combustibles” y al volver a desmarcar la opción, la pestaña desaparece.

De esta forma la lógica que controla la visibilidad de las Pestañas está toda ella en el Formulario Principal, incluso aunque las condiciones que influyen en esa visibilidad se definan en otras pestañas. El campo #MDF hace la función de intermediario con los datos de las Pestañas.

Actuando de la manera descrita, el control de visibilidad de las pestañas es completo y dinámico, pero sigo encontrando dos problemas:

 

1.   Una vez insertada una o varias pestañas, la activación de alguna de ellas con la instrucción "Interfaz: Activar subcontrol del contenedor de formularios ( )" funciona a veces bien y a veces mal. Vamos, que yo no consigo saber cómo funciona... 

2.   Si además de insertForm ( ) y removeForm ( ) existieran los métodos hideForm ( ) y showForm ( ) todo sería mucho más sencillo...

Como siempre, se agradecerá cualquier sugerencia que pueda mejorar el sistema...

bottom of page