En unos si y en otros no - Condiciones de visibilidad en separador de formulario


([N1] aztecmexico) #1

Pues bien, eso, que las condiciones de visibilidad en el caso particular de separadores de formularios no funcionan como espero que lo hagan, ojo, solo en formularios ligados a tablas maestras con clave arbolada.

La misma condición, que pretende condicionar la visibilidad de una de las pestañas de un separador de formularios funciona perfecto si el separador está en un formulario ligado a una tabla maestra con clave numérica, pero no si esta en uno ligado a una tabla maestra con clave arbolada, ¿porqué?, quien sabe.

La condición que utilizo para condicionar dicha visibilidad es la siguiente:

(fun:NTS_SCCN@TIGIE.app(#SCCN_NMRC))=1

Donde la función NTS_SCCN verifica si un registro de la tabla en curso tiene notas relacionadas, si es así el dato de retorno es 1, en caso contrario retorna 0.

Dicha función, insertada como condición de visibilidad en un formulario ligado a tabla maestra con clave numérica si funciona. pero ligado a la tabla con clave arbolada no funciona.

He intentado muchas otras formas de condicionar las pestañas en el separador del formulario ligado a la tabla arbolada, pero en todos los casos me a sido imposible obtener el resultado que espero, o me desaparece para TODOS los registros, o me aparece para TODOS los registros, valiendole queso si hay información o no.

Lo anterior porque cada registro, dependiendo de su tipo puede tener diversos tipos de notas, para lo cual se crea una pestaña para cada tipo en el separador de formularios, sin embargo, solo se desea que muestre visibles las pestañas de las notas que si tenga un registro, las que no tengan notas que no las muestre.

Repito, las mismas condiciones, con las mismas funciones, operan adecuadamente en formularios ligados a tablas con clave numérica, pero no logro hacerlo en formularios con claves arboladas.

De más está decir que las claves, las resoluciones, los datos que se pasan como parámetros los tengo perfectamente validados, es más, ni con datos fijos, ni con constantes, los cuales ingresé a manera de prueba, funcionan correctamente.

Me pudieran orientar al respecto?

Un saludo.

Martin Ibarra.


([N4] eic) #2

Hola.

Supongo que tienes en cuenta que las condiciones de visibilidad de las pestañas de un separador de formularios sólo se evalúa cuando se abre el formulario, y ya no cambia mientras está abierto, aunque cambie realmente la condición. No se puede usar esa condición para que se haga visible o invisible una pestaña mientras el formulario "padre" está abierto.

Creo que, en este caso, lo que haría falta saber es lo que hace esa función realmente. En el evento de Inicializado del formulario, puedes evaluar la función y presentarla mediante un mensaje, para ver si realmente devuelve el valor que esperas. Porque no me parece que un formulario se comporte distinto si la tabla es de código numérico o de código arbolado.

Saludos,

Fran Varona


([N1] Emanuel) #3

Por las pruebas que hice en su momento la visibilidad de las pestañas anda bastante mal o no anda. Lo que anda mucho mejor es habilitar o no las pestañas. Y lo que también anda es la visibilidad de los componetes de los subobjetos de las pestañas.

En fin para mi son cosas que pulir.

Saludos.


([N1] aztecmexico) #4

Gracias a ambos, Emanuel y Fran,

Fran tienes razón, la función hace lo que tiene que hacer, ahi no hay problema, el problema es que no tenía conocimiento de que solo se evalúa la condición cuando se abre el formulario, esto es, al inicializarlo, y es exactamente lo que me sucede, ya que tengo el formulario dentro de un multivista, dependiente de un árbol visor de tablas, de ahi que solo evalúa al inicio y no cuando hay un cambio de selección de ficha, de cualquier manera creo sinceramente que es un punto de mejora en el funcionamiento de este objeto, o más bien de los subobjetos (pestañas) del control.

Gracias nuevamente a ambos.

Por cierto, en la documentación no hace referencia a que solo evalúa al abrir o crearse el formulario, me imagino que el problema tambien se presentará cuando activas la navegación en formularios vía hemano contiguo.

Martin Ibarra.


([N4] eic) #5

En algún formulario lo que tengo puesto son dos separadores de formularios, uno con ciertas pestañas y otro con otras, con condiciones de visibilidad en el propio separador, no en las pestañas. Si son pocos los casos a tratar, puede funcionarte sin recargarte demasiado (algo se recarga, porque duplicas el objeto).

Saludos,

Fran Varona


([N1] aztecmexico) #6

Pues yo aqui sigo de terco, qué más dá.

Fran, gracias por tu último comentario, solo que no me resulta "Rentable" en términos de desempeño ya que las posibles combinaciones de acuerdo a la información de las tablas involucradas me daría como resultado un mínimo de 12 separadores de formularios y un máximo de 36, comenzé a analizarlo, pero solo de ver la cantidad me dió weba (flojera)

Probé, esperimenté con otras posibles técnicas, principalmente con la de interfaz: recalcular, pero tienes razón, las condiciones de visibilidad en las pestañas SOLO y por ÚNICA VEZ se evalúan al INICIALIZARSE el formulario, lo cual, cuando trabajas a partir de una rejilla y por cada selección abres un formulario, funciona de perlas, peeeeeero, cuando como en mi caso, trabajas a partir de un multivista, en el cual el primer objeto es un Visor de Tablas y en segundo lugar un formulario que muestra los datos del registro previamente seleccionado en el árbol pues nada más no.

Creo conveniente se agregue URGENTEMENTE (eso quisiera) una nueva instrucción para estos casos, algo así como:

Interfaz: Reinicializar(Formulario)

Creo que con esto funcionaría, ya que así en el árbol creo una conexión de evento que se dispare cuando cambie la selección en el árbol y obviamente ahi si me evaluaría de nuevo las condiciones de visibilidad de las pestañas dentro del formulario.

Creo que lo meteré en el foro de Ideas.

Un saludo.

Martin Ibarra.

P.D. Si algun alma caritativa a resuelto esto con alguna "astucia", sería tan amable de compartirla, o sea, alguna manera de reinicializar un formulario cuando este no ha sido cerrado pero han cambiado los datos que muestra a partir de un cambio de selección en un visor arbolado. =)


([N1] Synetic) #7

Yo después de muchas pruebas no fui capaz de realizar la ocultación de pestañas.
Al final opté por desactivarlas por medio de comandos de interfaz.
La verdad es que estaba empeñado en la ocultación de las pestañas, pero al final, me convencí que las pestañas desactivadas aparte de que funciona bien, mejora el resultado final en mi aplicación.

Saludos.


([N1] aztecmexico) #8

Gracias Fernando por tu sugerencia, solo que ando un poco perdido, de momento puedo desactivar el contenido de la pestaña poniendo condiciones al formulario que se incluye, pero como hoy no es mi día, no cacho la manera de desactivar las pestañas con los comandos, sería tan amable de indicarme a grandes rasgos los pasos?

Un Saludo.

Martin Ibarra.


([N1] Synetic) #9

Hola Martin,
Tengo un formulario con separador de formularios. Estos se activan o desactivan según valores en campos en un maestro.
En una conexión de evento oninit ejecuto un evento que activa cada una de las pestañas con el comando "Interfaz: Habilitar el subcontrol del contenedor de formularios" con la fórmula de condición a 1. De seguido evalúo el campo de maestro que condicionan la no visibilidad y ejecuto la misma sentencia pero con fórmula de condición a 0.

Habilito todas las pestañas primero porque este mismo proceso lo reutilizo también en varias conexiones de evento pierde foco ya con el form cargado y en ese momento no se cuales están habilitadas y cuales no. Digamos que de primeras habilito todas y luego voy desactivando. Me funciona bien.

Espero haber ayudado.
Saludos


([N1] aztecmexico) #10

Nuevamente gracias Fernando,

Cuando el formulario lo llamo a partir de una rejilla funciona perfectamente, sin embargo si dicho formulario es el segundo objeto de un multivista no funciona nada de nada, lo más que se logra es bloquear el contenido de las pestañas, sin embargo las mismas permanecen activas.

Lo que pretendo evitar es que el usuario presione la pestaña si el contenido de la misma esta vacio.

Seguiré probando.

Un saludo.


([N1] Synetic) #11

Hola Martin,
He estado haciendo pruebas y la única manera que me ha funcionado (con multivista) es con un timer en el form que evalúa y deshabilita. Este proceso también condicionado por una variable global que obtiene valor por evento cambio en rejilla, para que no este permanentemente refrescando. Pruébalo, tal vez te sirva.

Saludos


([N1] aztecmexico) #12

Fernando..........

Eres un CRACK!!!!!!!!, jejejeje, mira que ya funciona, gracias a tu orientación, y si, tienes razón, se vé mejor el deshabilitar las pestañas que el ocultarlas (que en este modo, de todos modos no se pudo), no hay tantos cambios en la composición del formulario, simplemente se habilitan o no, gracias, gracias, gracias y muchas gracias más, ahora podré disfrutar el domingo sin que me ronde por la cabeza ese tema, jejeje, te lo agradecen mis hijos sobre todo.

Lo único que hay que jugar un poquitin con los tiempos del TIMER, ya que en contadisimas ocasiones, y sobre todo al utilizar el teclado en lugar del mouse (bueno, a mi con el mouse no me falló) como que falla un poquitin la sincronización entre que se ejecutó el timer y los eventos, pero nada que afecte realmente.

Nuevamente muy agradecido, muy agradecido y muy agradecido (así decía don Pedro Vargas) y pues muy agradecido.

P.D. Activado: Que estas utilizando el subcontrol en ese preciso momento (le diste click o tiene el foco)
Habilitado: Que está disponible para que lo puedas utilizar, aunque no tenga foco.
Creo conveniente la aclaración porque en los comandos de interfaz de controles hay varios que con idénticos y solo cambia esa palabrita y pues en mi rancho como que significan lo mismo, por eso me hacia un poco bolas sobre cual utilizar y cual era realmente la diferencia, aún cuando Fernando ya me había indicado cuales eran los correctos. Igual y ya andaba tan perdido que me sonaba igual todo.

P.D.2. Un Saludo.
Martín Ibarra.

P.D.3. Por eso me ENCANTA el foro, mira que un colega se tome la molestia de reproducir tu problema y estarle probando para ver como funciona, NO TIENE PRECIO, para todo lo demás MasterC.......... ;-)


([N1] Synetic) #13

Gracias Martín,

Respecto a la solución de este problema parece ser que un formulario dentro de un multivista no captura señales enviadas de una acción. Lo ideal para que todo funcionara es que desde la rejilla del multivista poder ejecutar una acción, esta enviara una señal, la señal pudiese ser capturada por un formulario situado en el multivista y poder realizar la acción correspondiente.

También que en un multivista funcionase la señal "Inicializado". Dos cosas distintas que de funcionar se podría solucionar el problema inicial.

Como te digo Martín, te aseguro que es un placer ayudar en lo que pueda.
Saludos