Un solo informe, varias consultas!

1 - Tengo un formulario con un cuadro combinado donde escribo nombres de campos. Y un botón que dice Abrir consulta.
Quisiera que al abrir la consulta, el campo a evaluar sea el que elegí en el cuadro combinado del formulario.
Probé poniendo en el Diseño de consulta en nombre de campo: [Formularios]![FormularioParaConsulta]![ValorDelCuadroCombinado]
Como puedo hacer esto. La idea es que tengo muchos campos (Proveedores, Clientes, Productos, etc) y tengo que hacer muchas consultas y muchos informes similares.
Quisiera hacer un formulario donde la persona elija el valor a evaluar y se le abra el informe con ese campo. Así seria un solo informe y una sola consulta.

2- En su defecto, si no se puede hacer lo del punto 1, Como puedo tener un solo informe el cual pueda abrir con diferentes consultas según elija. Porque sino tengo 40 consultas para 40 informes (todos con el mismo exacto diseño) y cuando tengo que cambiar algo del diseño, lo tengo que hacer en los 40 informes por igual!

1 Respuesta

Respuesta
1

Cuando dices "campo a evaluar", ¿a qué te refieres exactamente?

Para el punto 2, si todas las consultas tienen los mismos campos, que son los que recoge el informe, puedes asignarle al dicho informe la consulta que elijas en un cuadro combinado, por ejemplo.

El procedimiento sería: tener un cuadro combinado que recoja todas las consultas (lo puedes hacer manualmente, o por medio de código, si quieres te digo como).

Luego le añades un botón, para abrir el formulario, y le generas el siguiente código:

Dim miOrigen as String

miOrigen=Nz(Me.NombreDelCombo.Value,"")

If miOrigen="" Then Exit Sub

'Abres el formulario, en modo diseño y oculto

DoCmd. OpenReport "NombreDelInforme", acDesign,,,, acHidden

'Cambias el origen del mismo

Reports!NombreDelInforme.RecordSource=miOrigen

'Cierras el Informe guardando los cambios

DoCmd. Close acReport,, "NombreDelInforme", acSaveYes

'Abres el Informe en vista Previa

DoCmd. OpenReport "NombreDelInforme", acViewPreview,,,, AcDialog

Hola!

Gracias por tu respuesta!

Pero tengo una duda. A lo que me refiero con "Campo de evaluación" es al campo de la consulta.

Por ejemplo tengo:

Consulta 1 : Ventas por proveedor.

Consultas 2: Ventas por clientes.

Consultas 3: Ventas por vendedor.

Todas comparten el campo Monto de venta, lo único que va variando es si lo veo desde el punto de vista del Cliente, del Vendedor o del Proveedor.

Y el informe es exactamente igual. Nada mas que tuve que crear 3 consultas y 3 informes (uno para cada una) donde solo cambio el campo proveedor, o cliente o vendedor.

Pero es el mismo formato de informe! Entonces cuando tengo que cambiar algo en ese formato lo tengo que hacer en las 3 copias por igual.

Por eso se me ocurrió o poner una sola consulta y un solo informe, donde la elección del campo (proveedor, o cliente, o vendedor) sea desde un combo en un formulario.

O, hacer un solo informe donde al abrirlo me elija la consulta y en el informe tome el campo que tenga esa consulta (proveedor, cliente o vendedor).

Acá hice el ejemplo con 3, pero tengo como 40 similares. Con las ventas anuales de "X" campo. Entonces cada vez q

Hola!

Gracias por tu respuesta!

Pero tengo una duda. A lo que me refiero con "Campo de evaluación" es al campo de la consulta.

Por ejemplo tengo:

Consulta 1 : Ventas por proveedor.

Consultas 2: Ventas por clientes.

Consultas 3: Ventas por vendedor.

Todas comparten el campo Monto de venta, lo único que va variando es si lo veo desde el punto de vista del Cliente, del Vendedor o del Proveedor.

Y el informe es exactamente igual. Nada mas que tuve que crear 3 consultas y 3 informes (uno para cada una) donde solo cambio el campo proveedor, o cliente o vendedor.

Pero es el mismo formato de informe! Entonces cuando tengo que cambiar algo en ese formato lo tengo que hacer en las 3 copias por igual.

Por eso se me ocurrió o poner una sola consulta y un solo informe, donde la elección del campo (proveedor, o cliente, o vendedor) sea desde un combo en un formulario.

O, hacer un solo informe donde al abrirlo me elija la consulta y en el informe tome el campo que tenga esa consulta (proveedor, cliente o vendedor).

Acá hice el ejemplo con 3, pero tengo como 40 consultas y 40 informes similares. Con las ventas anuales de "X" campo. Entonces cada vez que tengo agregar algo a ese formato de ventas anuales lo tengo que hacer en los 40 informes!!

Espero que se entienda mi duda!!


Desde ya gracias nuevamente!!

Empezando por la solución del punto 2: Si en tu cuadro combinado pones, como origen de la fila "Ventas por Proveedor";"Ventas por Cliente";"Ventas por Vendedor", y esos son los nombres de tus consultas, el código que te puse antes te sirve perfectamente. Recuerda que tienes que sustituir donde pongo NombreDelCombo y NombreDelInforme por los que tu tienes.

Para el punto 1, lo único que se me ocurre es que crees la consulta por medio del código, y la asignes al informe. Pero como desconozco cómo son tus consultas, no te puedo dar una respuesta mejor...

Si quieres sube una copia de tu bd a filebig u otro similar, me pones aqui el enlace y le acho un vistazo y te digo algo concreto.

Ahí subí un ejemplo exacto de lo que tengo y una idea de lo que te estoy comentando:

http://filebig.net/files/SH3rFSxaJS

Hay una tabla: Ventas con la información

Hay 3 consultas: Ventas por Proveedor, Ventas por Cliente, Ventas por Vendedor

Hay 3 informes: Ventas por Proveedor, Ventas por Cliente, Ventas por Vendedor

Después puse:

- Idea de formulario

- Idea de consulta

Lo de arriba de todo es lo que tengo, las consultas y sus respectivos informes, todos iguales salvo que toma diferentes campos a evaluar (Clientes, Vendedores o Proveedores)

El tema es que cuando modifico un informe, tengo que modificar los otros 2 exactamente igual. (En la realidad tengo como 40)

Entonces una opción era que pudiese existir un solo informe, y 3 consultas. Y que de algún modo el informe tome la consulta deseada y evalúe el campo de esa consulta. (para que si hay cambios sea solo un informe el que haya que modificar)

La otra opción la puse en Idea de formulario e idea de consulta:

Un formulario donde elijas el campo a evaluar primero y después abras una consulta y en la consulta llame a ese campo. (Lo escribí en el diseño de consulta, por mas que este mal, para que captes la idea)

Muchas gracias por tu preocupación experto!! Ojala así este mas claro.

Después de unas cuantas pruebas, la única solución válida que encontré es esta, suponiendo que tus 40 consultas tengan la misma estructura, y sólo cambie el campo que quieres evaluar.

Lo primero es hacer un pequeño cambio en las consultas, que es poner como nombre del campo "Campo", en vez de Cliente, Proveedor... el que sea (añadiendo delante del nombre Campo:)

Para el informe, puedes renombrar uno de los que ya tienes, y le haces estos cambios: En el campo a evaluar, le pones como origen del control: Campo, y como nombre: Campo. La etiqueta de ese campo, la renombras como Campo_Etiqueta, y la etiqueta del encabezado, donde va el título del informe, la renombras a Titulo.

Suponiendo que el informe se llame "Ventas por año", en el botón del formulario, le generas este código:

Dim miCampo As String
Dim miOrigen As String
miCampo = Nz(Me.CampoAevaluar.Value, "")
'Si no hay nada en el combo, sales sin hacer nada
If miCampo = "" Then Exit Sub
Select Case miCampo
Case "Vendedores"
miOrigen = "Ventas por año: Vendedores"
miCampo = "Vendedor"
Case "Proveedores"
miOrigen = "Ventas por año: Proveedores"
miCampo = "Proveedor"
Case "Clientes"
miOrigen = "Ventas por año: Clientes"
miCampo = "Cliente"
End Select
'Abres el formulario,en modo diseño y oculto
DoCmd.OpenReport "Ventas por año", acDesign, , , , acHidden
'Cambias el origen del mismo
Reports("Ventas por año").RecordSource = miOrigen
Reports("Ventas por año").Titulo.Caption = miOrigen
Reports("Ventas por año").Campo_Etiqueta.Caption = miCampo
'Cierras el Informe guardando los cambios
DoCmd.Close acReport, "Ventas por año", acSaveYes
'Abres el Informe en vista Previa
DoCmd. OpenReport "Ventas por año", acViewPreview,,,, acDialog

Evidentemente, en tu BD con las 40 consultas, tendrás que hacer 40 Case "nombredelcampo", uno por cada consulta, poniendo en miOrigen la consulta correspondiente, y en miCampo, el nombre del campo a evaluar.

Te subo aquí un ejemplo basado en el tuyo, http://www.filebig.net/files/Ht5gLQ9ZVE, con un formulario hecho desde cero, que en la bd que me enviaste no me los deja abrir ni modificar.

Eres realmente un genio!

Con este nivel de respuestas vas a ser el Experto numero 1 en Access en poco tiempo!!

Muy claro y preciso! De donde aprendiste todo esto?

Mas adelante te haré una sola pregunta y después te dejo tranquilo! Pero solo sobre la mejor opción para tener buena velocidad en una base de datos multiusuario (20 usuarios)! Con o sin internet.

Muchas muchas muchas gracias!!! Excelente todo!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas