Ocultar agrupamiento en Informe |
Responder |
Autor | ||||
arodrigu
Colaborador Unido: 04/Marzo/2005 Localización: España Estado: Sin conexión Puntos: 599 |
Tema: Ocultar agrupamiento en Informe Enviado: 27/Octubre/2020 a las 13:34 |
|||
Buenos días:
A ver si me explico. Tengo un informe agrupado en 4 niveles: Unidad1, Unidad2, Unidad3 y Unidad4 Dentro de cada nivel hay un campo que muestra el nombre de la Unidad y luego en el Detalle los campos con los datos de la Unidad. Hasta aquí todo bien. Lo que trato de hacer es que, si un nivel no tiene ninguna Unidad, el agrupamiento <<para esa Unidad>> desaparezca y vuelva a aparecer en el siguiente registro que tenga Unidad. Es decir que no salga un espacio en blanco cada vez que no hay datos en un registro. No sé si esto se puede hacer (seguro que sí). He probado a recorrer con un recordset la consulta en el evento <<al dar formato>> de la agrupación, de la configuración de página, al abrir el informe.....en todas partes, y ocultar el campo, hacerle muy pequeño y nada. A ver si se os ocurre algo. Muchas gracias.
|
||||
Fuerza y honor.
Saludos de Arturo desde Madrid |
||||
mounir
Colaborador Unido: 09/Febrero/2009 Localización: Asturias-España Estado: Sin conexión Puntos: 6479 |
Enviado: 27/Octubre/2020 a las 16:55 | |||
Hola!
No lo he probado, prueba poner en el evento al dar formato de cada agrupación:-
|
||||
Un Saludo.
|
||||
Dabellaso
Asiduo Unido: 18/Noviembre/2012 Localización: España Estado: Sin conexión Puntos: 338 |
Enviado: 27/Octubre/2020 a las 18:04 | |||
Hola, sin entrar en la condición utilizada, yo optaría por la solución de monuir, solo que cambiando Me.EncabezsdoDelgrupo0.Visible por Cancel=True y actuando en cada sección por separado Private Sub EncabezadoDelGrupo0_Format(Cancel As Integer, FormatCount As Integer) End Sub y para el pie lo mismo Private Sub PieDelGrupo0_Format(Cancel As Integer, FormatCount As Integer) Esto evitará que le sección aparezca en el informe y que se guarde el espacio que necesitaría si se imprimiera... eso si, sólo podrás ver el resultado en la vista preliminar o en el resultado impreso, ya que en las demás vistas, este evento no se produce Editado por Dabellaso - 27/Octubre/2020 a las 18:11 |
||||
El saber no ocupa lugar, sólo tiempo
|
||||
arodrigu
Colaborador Unido: 04/Marzo/2005 Localización: España Estado: Sin conexión Puntos: 599 |
Enviado: 27/Octubre/2020 a las 18:18 | |||
Gracias chicos.
Lo probaré mañana y os cuento.
|
||||
Fuerza y honor.
Saludos de Arturo desde Madrid |
||||
arodrigu
Colaborador Unido: 04/Marzo/2005 Localización: España Estado: Sin conexión Puntos: 599 |
Enviado: 28/Octubre/2020 a las 18:37 | |||
Hola.
He probado la solución de mounir. No da error, pero no hace lo que se supone que debería hacer. Simplemente oculta el grupo tenga o no datos. Pongo un punto de interrupción para ir paso a paso a ver que devuelve la variable, pero en los informes no se para y no sé otra forma de verlo. El código que he puesto es:
La solución de Dabellaso no la entiendo. No sé qué es lo que tengo que sustituir. He puesto el siguiente código (que no me cuadra) y lo mismo, no da error pero no hace lo que tiene que hacer.
|
||||
Fuerza y honor.
Saludos de Arturo desde Madrid |
||||
Chea1
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Moderador Unido: 20/Noviembre/2005 Localización: España Estado: Sin conexión Puntos: 4143 |
Enviado: 28/Octubre/2020 a las 18:58 | |||
Algo me falla en ese informe. Sospecho que no es un verdadero informe de agrupamiento.
Para un diseño correcto, debería haber una única consulta origen de todo el informe ¿Lo estás haciendo así? ¿Puedes mostrar el diseño del informe y de la consulta origen del mismo?
|
||||
Dabellaso
Asiduo Unido: 18/Noviembre/2012 Localización: España Estado: Sin conexión Puntos: 338 |
Enviado: 28/Octubre/2020 a las 21:33 | |||
No explicas que parte no entiendes de mi solución. Dime que parte no te cuadra e intentaré explicarme Como dice Chea1, mostrarnos el diseño y el origen de datos nos ayudará a ver el problema, quizás como creo que sospecha, si tienes subinformes en las secciones en lugar de datos agrupados el proceder, o al menos la condición será diferente Edito: Si colocas un punto de ininterrupción, el código si debería detenerse, pero recuerda que el evento al "dar formato" sólo se produce en la vista preliminar, no en la vista informe. Para asegurarte, puedes poner Debug.Print y la condición que tengas para ver en la ventana de inmediato que devuelve, o un simple Debug.Print "Hola", pasa saber si el evento se ha producido o no
Editado por Dabellaso - 28/Octubre/2020 a las 21:46 |
||||
El saber no ocupa lugar, sólo tiempo
|
||||
arodrigu
Colaborador Unido: 04/Marzo/2005 Localización: España Estado: Sin conexión Puntos: 599 |
Enviado: 29/Octubre/2020 a las 10:22 | |||
Hola.
Chea1. El informe tiene varias agrupaciones y depende de una única consulta. No tiene subinformes ni nada raro. Dabelloso. La expresión "no me cuadra" no era correcta, debía ser "no lo entiendo". No utilizo nunca lo de Cancel y no lo entendía. Ahora pensándolo más detenidamente creo que ya lo entiendo. En cualquier caso, si el código que he puesto, está bien, sigue sin funcionar. Lo del punto de interrupción no lo sabía. Efectivamente solo utilizaba la vista informe. Probaré con la otra vista y con lo ventana inmediato que, sinceramente, nunca he sido capaz de controlar. Me gustaría mandaros el informe de alguna manera pero no sé cómo. ¿Se pueden adjuntar fotos al hilo?. Muchas gracias por vuestro tiempo.
|
||||
Fuerza y honor.
Saludos de Arturo desde Madrid |
||||
Chea1
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Moderador Unido: 20/Noviembre/2005 Localización: España Estado: Sin conexión Puntos: 4143 |
Enviado: 29/Octubre/2020 a las 19:06 | |||
Si el origen es una única consulta, creo que debería bastarte por filtrarla para que no salgan registros con Unidad en blanco.
|
||||
Dabellaso
Asiduo Unido: 18/Noviembre/2012 Localización: España Estado: Sin conexión Puntos: 338 |
Enviado: 29/Octubre/2020 a las 19:39 | |||
Puedes colocar la imagen en tu Google Drive, Dropbox, OneDrive o similar y compartirla mediante un enlace que puedes poner aquí. Para la consulta, bastará un copia pega aquí Por lo de "Cancel", habrás visto que algunos eventos tienen parámetros, cada parámetro tiene una utilidad. En los casos en los que el evento disponga de un parámetro llamado "Cancel", nos da la oportunidad de evitar que el evento se produzca, es decir, podemos cancelar el evento. No tiene sentido cancelar un evento así, por que sí, por eso poner "Cancel=True" como indicas que pusiste sólo provocará que esa sección nunca se muestre (ya que la cancelas siempre) (Hablando siempre en la vista previa). por eso la idea de asignar a Cancel el resultado de tu condición es para que se muestro o no la sección según tus necesidades para cada registro de tu informe. La condición que expuse es la misma que tenias en tu mensaje original: If rst!Unidad1 = 0 OR rst!Unidad1 = "" OR IsNull(rst!Unidad1) Then ... pero escrita de otro modo y asignando el resultado al parámetro "Cancel" directamente, suponiendo que el Campo "Unidad1" está en la consulta del informe: Cancel = (Nz(Unidad1,"") = "") OR (Unidad1 = 0) Es este punto, me surge la duda: He supuesto, que tu informe está basado en la consulta "MiConsulta" o sólo usas esa consulta para determinar en qué registros debe ocultarse la sección y tienes otra consulta como origen de datos para el informe? Creo que lo que debemos determinar es la condición a usar. La solución de monuir parece más acertada en el segundo caso, pero creo que el criterio que pusiste no es correcto en lugar de: intCuenta = DCount("Unidad1", "CIMultiple", "U3") prueba a poner algo como: intCuenta = DCount("Unidad1", "CIMultiple", "Unidad1 = 'U3'") prueba y nos comentas que tal
|
||||
El saber no ocupa lugar, sólo tiempo
|
||||
arodrigu
Colaborador Unido: 04/Marzo/2005 Localización: España Estado: Sin conexión Puntos: 599 |
Enviado: 03/Noviembre/2020 a las 19:13 | |||
Hola de nuevo.
Chea1. El origen es una consulta. He probado lo que dices de los nulos y no funciona. La consulta es ésta:
La variable temporal devuelve el identificador de la organización elegida en un formulario. El criterio 113 del campo IdGrupo corresponde al identificador del grupo de contactos correspondiente a este listado que son los integrantes del staff. Dabellaso. La consulta origen es la que he puesto antes. He probado los siguientes códigos en el evento "Al dar formato del Encabezado IdNivel3" (que es con el que estoy haciendo las pruebas):
No funciona. No devuelve error pero oculta el campo U3 (con origen Unidad1), siempre, tenga o no datos.
Mismo resultado que el anterior. Voy a ver si soy capaz de poneros unos enlaces a unas fotos que le he hecho al Informe. Si no es suficiente podría intentar hacer una pequeña base de ejemplo, aunque eso me va a costar más. Ya me contáis si se os ocurre algo. |
||||
Fuerza y honor.
Saludos de Arturo desde Madrid |
||||
Dabellaso
Asiduo Unido: 18/Noviembre/2012 Localización: España Estado: Sin conexión Puntos: 338 |
Enviado: 04/Noviembre/2020 a las 21:33 | |||
Hola, te cuento lo que veo: En el código de evento "Al dar formato del Encabezado IdNivel3" (con el que estás haciendo las pruebas) has puesto:
Elimina la línea :
Esta línea como comenté antes, simplemente cancela el formato y por tanto nunca se muestra. Deja sólo la primera línea, para que el formato se cancele sólo cuando "Unidad1" sea Nulo, "" o cero. Las demás veces se mostrará. El otro código también esta bien, pero hay algunas cosas: * La condición indica que se muestre sólo cuando el campo Unidad1 contenga el Valor "U3" (... , "Unidad1 = 'U3'"), si esa condición no se da en el registro en cuestión, la sección no se mostrará. Creo que no es lo que buscas, si no recuerdo mal, querías ocultar la sección cuando no tenia datos, por tanto esa condición de buscar el valor "U3"no te vale * No estas ocultando la sección, estas ocultando un control llamado U3 (no se cual será) en el informe Me.U3.Visible= True o False * Para ocultar la sección deberías usar Me.Section y el nombre de tu sección:
Por otro lado Viendo la consulta, veo que el campo "Unidad1" está incluido en ella, así que la función DCount en principio no me parece necesaria. Basta como mirar si "Unidad1" esta vacío. puedes cambiar el segundo código por:
En este punto. El primer código evitará que la sección sea formateada cuando "Unidad1" este vacío El segundo código hará invisible la sección cuando "Unidad1" este vacío La diferencia radica, en que sin formato, la sección no ocupa espacio en el informe, mientras que estando invisible, no se verá, pero el espacio que ocupa se mantiene igual (Recuerda que siempre hablamos en vista Preliminar) Prueba y comenta, seguro que pasito a pasito nos acercamos al éxito Editado por Dabellaso - 04/Noviembre/2020 a las 21:44 |
||||
El saber no ocupa lugar, sólo tiempo
|
||||
arodrigu
Colaborador Unido: 04/Marzo/2005 Localización: España Estado: Sin conexión Puntos: 599 |
Enviado: 05/Noviembre/2020 a las 10:35 | |||
Buenos días Dabellaso.
He probado tus opciones y todo funciona. Mi problema es que la denominación de los campos y los orígenes no siempre coinciden. Ésto se debe a que mi aplicación es muy antigua y voy adaptándola según voy sabiendo más, pero el diseño original de las tablas y la denominación de los campos... es mejorable. Pero ya es tan grande que no me compensa empezar desde cero, y voy parcheando como puedo. El caso es que, gracias a vosotros (y en especial a ti), he conseguido lo que quería. Pongo el código con el que me funciona
Éste también funciona
Muchísimas gracias y, por mi parte, podéis cerrar el hilo.
|
||||
Fuerza y honor.
Saludos de Arturo desde Madrid |
||||
Dabellaso
Asiduo Unido: 18/Noviembre/2012 Localización: España Estado: Sin conexión Puntos: 338 |
Enviado: 05/Noviembre/2020 a las 17:21 | |||
Perdón por escribir estando el tema resuelto. Sólo como comentario, el segundo código, si quieres, puedes reducirlo como:
o como:
o como:
Todos son lo mismo, pero escrito de formas diferentes, a ver si ves las diferencias Pueden cerrar el Hilo
Editado por Dabellaso - 05/Noviembre/2020 a las 17:25 |
||||
El saber no ocupa lugar, sólo tiempo
|
||||
Responder | |
Tweet
|
Ir al foro | Permisos de foro Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |