** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Integrar un informe a partir de selección campos
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Integrar un informe a partir de selección campos

 Responder Responder
Autor
Mensaje
Ezel Ver desplegable
Nuevo
Nuevo


Unido: 14/Agosto/2020
Localización: Cuba
Estado: Sin conexión
Puntos: 35
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Ezel Cita  ResponderRespuesta Enlace directo a este mensaje Tema: Integrar un informe a partir de selección campos
    Enviado: 12/Mayo/2021 a las 00:48
Hola a todos!!! Me han planteado crear un procedimiento mediante el cual el usuario seleccione los campos que integrarán un informe, lo cual pienso hacer mediante casillas de verificación en un formulario; pero veo la dificultad en cómo hacer para que la selección del usuario se traduzca en columnas del informe. Si alguien tiene alguna experiencia similar les estaría agradecido. Saludos
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14734
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita xavi Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 12/Mayo/2021 a las 08:32
Mi experiencia es.... no lo hagas con informes; hazlo con Excel.

Me explico. 
Permites al usuario seleccionar los campos y creas una consulta con ellos. La almacenas (CreateQueryDef) para posteriormente exportarla a un fichero Excel (TransferSpreadsheet). Después puedes abrir el fichero por automatización y "tunearlo".

Si quieres hacerlo con un informe yo utilizaría una táctica parecida dónde la creación de la SQL lo que haría sería asignar alias conocidos a los campos seleccionados por el usuario. Los Alias serian "Campo1", "Campo2", "Campo3", etc

El informe se basaría en la consulta con los controles basados en los Alias.

Problemas: 
- Ajustar las anchuras de los campos de texto al contenido. Nos podemos encontrar con un control que deba mostrar el campo Dirección y solo muestre 10 caracteres o un campo CodigoPostal dónde quepan 50
- Los tipos de control que no sean TextBox. Si un campo es, por ejemplo, un CheckBox, hay que controlarlo (a no ser que queramos mostrar Sí/No)
- ... 

Seguro que hay unos cuantos más pero, al no utilizar informes, no los anticipo.

Un saludo

Xavi, un minyó de Terrassa

Mi web
Arriba
Ezel Ver desplegable
Nuevo
Nuevo


Unido: 14/Agosto/2020
Localización: Cuba
Estado: Sin conexión
Puntos: 35
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Ezel Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 12/Mayo/2021 a las 15:04
Gracias Xavi. Me agrada la idea de hacerlo con Excel como sugieres. No se si tendrás a mano algina referencia del prpcedimiento para integrar la consulta partiendo de los campos que seleccione el usuario. Saludos
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6479
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita mounir Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 13/Mayo/2021 a las 11:00
Hola!

En la página del maestro Búho hay dos ejemplos de INFORMES DINÁMICOS de los maestros Emilio Sancha y Eduardo Olaz.
Un Saludo.
Arriba
Ezel Ver desplegable
Nuevo
Nuevo


Unido: 14/Agosto/2020
Localización: Cuba
Estado: Sin conexión
Puntos: 35
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Ezel Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 22/Mayo/2021 a las 00:40
Amigos no logro descargar el ejemplo desde la página de Buho y aun no he logrado mi emprño, que consiste en que el usuario pueda "armar" una consulta, a su gusto, seleccionando campos desde un formulario, en una extensa lista mediante casillas de verificación, para exportarla luego a Excel.
El problema: En el diseño de la consulta estoy empleando para cada campo la funcion SiInm en algo así:
Campo1: SiInm([Formularios]![Formulario1]![Opcion1]=-1,[NombredelCampo],Nulo)
Pero cuando el valor no es -1 ME MUESTRA EL CAMPO CON VALORES NULOS y MI INTENCIÓN ES QUE NO LO MUESTRE, es decir que solo cargue los campos equivalentes a las opciones seleccionadas.
Por eso me disculpo e insisto en su valiosa ayuda. Gracias de antemano!!!!
Arriba
emiliove Ver desplegable
Administrador
Administrador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 5694
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita emiliove Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 22/Mayo/2021 a las 20:09
Y desde la página de Emilio Sancha ya lo intentaste, ahí tambien tiene uno por lo menos un ejemplo que te puede interesar.

Saludos.
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6479
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita mounir Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 23/Mayo/2021 a las 22:10
Publicado originalmente por Ezel Ezel escribió:

Amigos no logro descargar el ejemplo desde la página de Buho y aun no he logrado mi emprño,


Pues no lo sé, a mi me funcionan los dos enlaces.
Un Saludo.
Arriba
Ezel Ver desplegable
Nuevo
Nuevo


Unido: 14/Agosto/2020
Localización: Cuba
Estado: Sin conexión
Puntos: 35
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Ezel Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 23/Mayo/2021 a las 22:31
Gracias Amigo. Logré descargarlos pero, con sinceridad, me resultan algo complicados para lo que pretendo y trataré de hacerme entender mejor.
He llegado a un punto en el que en un Cuadro de Texto ubicado en un Formulario me genera una sentencia SQL a partir de los campos que seleccione el usuario.
El problema: Necesito algún procedimiento de VBA que me cree una consulta de Access con la SQL que contiene el Cuadro de Texto, para poderla emplear y exportarla luego a Excel. Gracias de antemano y les reitero mis disculpas
Arriba
Ezel Ver desplegable
Nuevo
Nuevo


Unido: 14/Agosto/2020
Localización: Cuba
Estado: Sin conexión
Puntos: 35
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Ezel Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 05/Junio/2021 a las 05:19
Amigos lo he logrado desde hace varios días; y me disculpo por no haber compartido antes la solución con ustedes, pero como soy solo un aficionado, puede que hasta me cueste trabajo explicar. Pude incluso retomar la idea inicial de generar directamente una especie de informe dinámico, a partir de activar o no varios CheckBox ubicados en un formulario.
Trataré de ir a lo esencial:
El informe a obtener es una relación de personas y varios de sus datos (estas serían las opciones) con apariencia de tabla. Al activar cada CheckBox se hace visible un TextBox contiguo con un valor numérico, que será el ancho de cada columna en el informe. Si el correspondiente CheckBox no está marcado, el TextBox asume el valor de cero (0), ello mediante algo como esto:

Private Sub Opc1_Click ()
If .Opc1 <> 0 Then
    .Opc1Ancho.Visible = True
    .Opc1Ancho = 1.4 'Este valor varía en para cada campo
    Else
    .Opc1Ancho.Visible = False
    .Opc1Ancho = 0
End If
End Sub

Cada uno de estos TextBox tienen la opción de modificar su valor, para aumentar o disminuir el ancho de cada columna en el informe. A este procedimiento de aumentar o disminuir le incluí unos botones que establecen +0.1 ó -0.1 (según el caso) en el TextBox (no ahondaré en esta parte para no aburrirlos).
Una vez definido esto pasamos al informe, en el evento Format de cada una de sus secciones donde hay campos (Encabezados de Grupo y Detalle) paso a definir, en las propiedades de cada campo, su ancho y su posición izquierda, de esta manera:

Private Sub Detalle_Format(Cancel As Integer, FormatCount As Integer)
.Campo1.Width = Forms!Formulario1!Opc1Ancho * 567
.Campo2.Width = Forms!Formulario1!Opc2Ancho * 567
.Campo3.Width = Forms!Formulario1!Opc3Ancho * 567
.Campo4.Width = Forms!Formulario1!Opc4Ancho * 567
……
'Multiplico por 567 para convertir cm a twips
'Para definir la posición izquierda de cada campo, asumo que es la suma del ancho de los campos que le anteceden a la izquierda, de esta manera sería:
.Campo2.Left = .Campo1.Width
.Campo3.Left = .Campo1.Width + .Campo2.Width
.Campo4.Left = .Campo1.Width + .Campo2.Width + .Campo3.Width
End Sub

Le he incluido al formulario un mecanismo que alerta cuando la suma de todos los "anchos" de columna supera las dimensiones de la página, ello en el evento AfterUpdate de cada TextBox y en los eventos Click de los CheckBox, en todos los casos compara la suma de todos los TextBox con las dimensiones de la hoja (previamente calculadas y declaradas) y si dicha suma es superior al tamaño de la hoja, muestra un texto e inhabilita el comando de abrir el informe.
Con esto obtengo lo que necesito y doy por cerrado el tema. Estoy seguro de que existen otras formas más novedosas pero esta fue la que logré aplicando mis escasos conocimientos y me place compartir con ustedes. Atento a sus sugerencias u observaciones. Saludos


Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable