Access 2010 - Personalizar el título antes de generar el informe
Estoy creando una base de datos dónde hay muchas consultas que generan un informe según el criterio fecha. Necesito que al momento de generar el informe se pueda escribir el título ya que no siempre los informes se harán con la misma fecha.
Es decir, si el informe es el 1º trimestre debo poder escribir "INFORME CORRESPONDIENTE AL 1º TRIMESTRE DE 2015" y el año que viene la misma consulta me sirva para armar el informe del 2016, por lo que debo cambiar el año.
¿Alguien puede ayudarme para saber si esto es posible hacerlo desde Access 2010? Access 2013 lo permite, pero no logro encontrar la forma de hacerlo desde 2010.
2 respuestas
En Access 2010 y todas las versiones se encuentra la palabra reservada OpenArg y sirve para pasar un argumento que contiene texto o un valor, en tu caso cuando llames el informe debes guardar en una variable el tìtulo del informe, algo como:
1.
Declare strTitulo As String
Declare IntAnno AS Integer
IntAnno= Year(Date) 'En lugar de year(date) puede tomar el valor de algún campo
Que contenga el año.
strTitulo="INFORME CORRESPONDIENTE AL 1 TRIMEESTRE DE " & IntAnno
Docmd:OpenReport "nombre_reporte",, strTitulo
NOTA: Observe que también pude guardar en una variables tipo Byte el trimestre, en este caso algo como:
Declare byTrimestre As Byte
ByTrimestre = Me.Campo_Del_trimestre
En este caso al llamar el reporte la variable strTituo quedaría algo como:
strTitulo="INFORME CORRESPONDIENTE AL " & ByTrimeste " & " TRIMEESTRE DE " & IntAnno
2.
En el reporte de debes crear un campo texto donde va el título, y le das nun nombre algo como: strTituloReporte
Ahora, debes crear un evento en "Al Abrir", algo como
Me.strTituloReporte.Caption=Me.OpenArg
La parte 1. debe ir en formulario desde donde llames el reporte, las declaraciones son privadas, toda vez, que solo lo vas a llamar desde un mismo formulario.
Pero yo armo una consulta desde una tabla y desde la consulta genero el informe, no lo llamo desde un formulario, entonces dónde lo pongo?
Entonces las cosas cambias. Debes crear un campo Expresion en la consulta, por ejemplo, strTitulo="INFORME TRIMESTRE " & [campo_trimestre○ & " " Year([CamoFecha].
Si no generas el reporte automático debes modificar el reporte de tal forma que exista el campo strTitulo.
No me queda otra alternativa y daría por terminada la consulta.
Muchas gracias, pero me da error, dice que "El motor de base de datos de Microsoft Access no reconoce '[strTitulo]' como un nombre de campo o expresión válidos.
El campo de la consulta que generé tiene la siguiente expresión
Expr2: [strTitulo]="infTOTALES_INDUCIDAS_1TRIMESTRE " & [TRIMESTRE_1 & " Year([FECHA_CUDAP]
Dónde infTOTALES_INDUCIDAS_1TRIMESTRE corresponde al nombre del informe del trimestre y TRIMESTRE_1 el nombre del campo de mi informe.
Aclaro que Expr2: y los corchetes de strTitulo, lo pone Access por su cuenta, ya que así no está escrito en tu respuesta.
Ojalá puedas ayudarme. Muchas gracias
Necesitaría ver tu base de datos, envíamela a [email protected]
- Compartir respuesta
En el evento Al cargar de tu informe, le puedes programar la asignación automática de título.
Si tu etiqueta de título se llama lblTitulo, y en tu consulta tienes un campo llamado "Trimestre", que muestra este dato: 1º Trimestre de 2015, el código sería:
Private Report_Open(Cancel As Integer)
Me.lblTitulo.Caption=Me.Trimestre
End Sub
Si quieres que en el título te ponga, por ejemplo el año actual:
Private Report_Open(Cancel As Integer)
Me.lblTitulo.Caption="Informe de Ventas del año " & Year(Date)
End Sub
Si quieres que en el título te salga la referencia a alguno de los parámetros que le pasas (por código):
Private Report_Open(Cancel As Integer)
....
'Por aquí va el código en el que pides los parámetros para ejecutar las consultas y traer sus datos
Me.lblTitulo.Caption="Informe entre " & laFechaIni & " y " & laFechaFin
End Sub
Muchas gracias SVEINBJORN EL ROJO, yo solo necesito que pueda aparecer el mes o el trimestre o el semestre del año que elija, por lo que me debería preguntar de que año quiero el mes, el trimestre o el semestre.
Es decir, si fuera mensual sería: "INFORME AUDITORIAS INDUCIDAS MES DE MARZO DE 2015"
Si fuera trimestral sería: "INFORME AUDITORIAS INDUCIDAS 1º TRIMESTRE DE 2015"
Si fuera semestral sería: "INFORME AUDITORIAS INDUCIDAS 1º SEMESTRE DE 2015"
Si fuera anual sería: "INFORME ANUAL AUDITORIAS INDUCIDAS DE 2015"
Supongo que debería programar la parte dónde aparece el mes, el trimestre, el semestre y el año respectivamente.
Obvio que debo hacer lo mismo con cada una de las acciones de mi base (Auditorías Programadas, Oficios, Contratos, Defensoría, etc.), pero con entender en el de INDUCIDAS el resto lo hago sola.
Yo me animo a hacerlo siguiendo tus instrucciones, pero en Informes en la ficha Eventos, en la opción Al Cargar me abre con el siguiente sub: Private Sub Report_Load(Cancel As Integer).
El campo que tiene el trimestre se llama TRIMESTRE_1 y cada informe cambia el nombre y el número, así tengo TRIMESTRE_2, SEMESTRE_1, ANUAL, MENSUAL
Yo por ejemplo pondría:
Private Report_Open(Cancel As Integer)
Me.lblTitulo.Caption="AUDITORIAS INDUCIDAS 1º TRIMESTRE DE " & Year(Date)
End Sub
Pero no me aparece Private Report_Open.
Es correcto el código? Si es correcto, dónde lo pongo?
Muchas gracias.
Que te puse mal el evento, pues no era "Al cargar" sino "Al Abrir".
Tal como tienes montada tu BD, con consultas mensuales, trimestrales.. necesitarás un informe para cada tipo de consulta. Esas consultas en las que se basan los informes, entiendo que las tienes parametrizadas por año y además, por mes, trimestre... según corresponda.
Por ejemplo, si tienes esta consulta:
SELECT [1B2-AUDITORIAS INDUCIDA].Nro_CUDAP, [1B2-AUDITORIAS INDUCIDA].CODIGO_RNOS, [1B2-AUDITORIAS INDUCIDA].DENOMINACION, [1B2-AUDITORIAS INDUCIDA].ACTIVIDAD, [1B2-AUDITORIAS INDUCIDA].FECHA_CUDAP, [1B2-AUDITORIAS INDUCIDA].N_EXPEDIENTE, [1B2-AUDITORIAS INDUCIDA].CAUSA_AUDITORIA, [1B2-AUDITORIAS INDUCIDA].OBSERVACIONES FROM [1B2-AUDITORIAS INDUCIDA] WHERE (((Month([FECHA_CUDAP]))=[TECLEA MES]) AND ((Year([FECHA_CUDAP]))=[TECLEA AÑO]));
y un informe creado sobre ella, en el evento al cargar, pondrías:
Private Sub Report_Load() Me.lblTitulo.Caption = UCase("Informe de auditoria del mes de " & MonthName(Month(FECHA_CUDAP)) & " del año " & Year(FECHA_CUDAP)) End Sub
Al abrir el informe, te pedirá los parámetros de la consulta, y te personalizará el título del informe en función de los mismos.
Te adjunto un ejemplo basado en tu BD: http://www.filebig.net/files/5uLiUyz8LQ
Adjunto el link de Dropbox para que veas la base https://www.dropbox.com/s/qkscmik42voguyk/GESTION_GCP_SSS_MARISA.zip?dl=0
Funciona en tu ejemplo, pero cuando lo replico en la mía me da error. Además no cuenta los registros, sino que me muestra un listado de regisros. Swintefijas en labconszsulta
Sod3lo hay que concentrarse en Auditorías Inducidas. Necesito entender la lógica para poder seguir.
Se fue sin terminar de explicar, te decía que la consulta cuenta los Nro_CUDAP y aqui no.
Como hago para que me cuente y ademas pida los criterios para me, trimestre, semestre y año.
La consulta es cnsCONSULTAS_INDUCIDAS_SEMESTRE y abajo de todo hay una consulta y un informe con tu codigo.
Muchas gracias
Ten en cuenta que los ejemplos que te mando son solo eso, ejemplos. Al no saber qué tienes hecho y cómo, no puedes esperar que te de una solución exacta a tu problema, sino solamente una indicación para que logres solucionarlo.
Dicho esto, ahora que tengo la BD, cuando tenga un rato libre, te digo algo concreto.
Me parece que no pillas bien el concepto de las tablas de ref. Cruzadas y te complicas sin necesidad...
La tabla de ref. Cruzadas te muestra los datos agrupados en un panel de doble entrada, por lo que no tiene mucho sentido sacar informes sólo de una parte de esa consulta, pues lo mismo puedes conseguir de forma más sencilla con una consulta simple.
Por ejemplo, puedes hacer esta consulta, que te pida trimestre y año, y te dará los mismos resultados parciales que la de ref. Cruzadas:
SELECT [1B2-AUDITORIAS INDUCIDA].CODIGO_RNOS, Count([1B2-AUDITORIAS INDUCIDA].Nro_CUDAP) AS [Total de Nro_CUDAP] FROM [1B2-AUDITORIAS INDUCIDA] WHERE (((Year([FECHA_CUDAP]))=[INGRESE EL AÑO QUE DESEA CONSULTAR]) AND ((DatePart("q",[FECHA_CUDAP]))=[INGRESE EL TRIMESTRE])) GROUP BY [1B2-AUDITORIAS INDUCIDA].CODIGO_RNOS;
Si tu informe lo haces sobre estas consultas sencillas parametrizadas, te sirve lo dicho antes para personalizar el encabezado o lo que quieras.
Si quieres seguir con tus informes sobre las de ref, cruzadas, lo más sencillo es que hagas varios informes por cada tabla (4 si agrupas por trimestres, 2 si es por semestres), y definas el período como parte fija del encabezado y el año lo saques de la manera antes indicada.
Obvio que lo voy a hacer como me sugerís, me parece mucho más sencillo.
Yo estoy aprendiendo Access junto con el armado de esta base. Obvio que tengo algún conocimiento como para animarme, pero no lo suficiente para llegar a estas conclusiones.
Cómo hago ahora para personalizar el título? Yo voy a ir armando la consulta a ver que me sale.
Muchas gracias
Estoy de viaje unos días y no te puedo decir nada concreto, pero en los mensajes anteriores tienes formas explicadas que te sirven.
Ya estoy de vuelta. Dime cómo estás montando el informe y ponme la SQL de la consulta sobre la que lo basas.
Hola, que bueno que volviste, no quería molestarte. En base a lo que me enviaste armé esta consulta:
SELECT [1B2-AUDITORIAS INDUCIDA].CODIGO_RNOS, Count([1B2-AUDITORIAS INDUCIDA].Nro_CUDAP) AS [Total de Nro_CUDAP]
FROM [1B2-AUDITORIAS INDUCIDA]
WHERE (((Year([FECHA_CUDAP]))=[INGRESE EL AÑO QUE DESEA CONSULTAR]) AND ((DatePart("q",[FECHA_CUDAP]))=[INGRESE EL TRIMESTRE]))
GROUP BY [1B2-AUDITORIAS INDUCIDA].CODIGO_RNOS;
Luego me dijiste que me fijara en las respuestas anteriores para personalizar el título, pero me da error y estoy estancada:
Yo hice lo siguiente:
Private Report_Open(Cancel As Integer)
Me.lblTitulo.Caption=Me.[Total de Nro_CUDAP]
End Sub
Pero se ejecuta correctamente y no me pone nada en el título, algo estoy haciendo mal evidentemente, pero no tengo idea de qué. El título debería ser por ejemplo:
"AUDITORÍAS INDUCIDAS DEL 1º TRIMESTRE DE 2015"
Otra cosa que me pasa es que en los informes anteriores que tenía armados uno para cada consulta según el trimestre, año, mes, etc., yo ponía un campo que me sumaba todos los números dónde aparecía el total de los RNOS y ahora me dice que es una expresión no válida. Será por el nombre el campo que tiene que sumar que es Total de Nro_CUDAP. Por esto le quise cambiar el nombre al campo en la consulta y me dice lo mismo que es una expresión no válida.
Hasta aquí llega mi humilde conocimiento, estoy estancada.
Si me podés ayudar, GENIAL. Si querés te envío la base con el informe y la consulta armada. Muchísimas gracias.
Te falta poner en la consulta los campos año y trimestre, por ejemplo marcando la casilla para mostrarlos y cambiando el "Dónde" por "Agrupar Por". Añade esos campos al informe, y ponles Visible en NO, para que no se vean
Luego la linea para personalizar el título sería así:
Me.lblTitulo.Caption="AUDITORÍAS INDUCIDAS DEL " & Me.NombreCampoTrimestre & "º TRIMESTRE DE " & Me.NombreCampoAño
Lo otro, ni idea de por qué te pasa. Revisa bien los nombres de los campos, y si alguno es un campo calculado, en vez del nombre ponle la fórmula que usas para calcularlo
Muchas gracias, hice todo lo que me decís, pero me da error cuando lo ejecuto en la línea del código: Me.NombreCampoTrimestre, me lo marca en azul.
Te mando la base para que la veas? Por ahí es más fácil para que te des cuenta si hice bien las cosas.
Ya me di cuenta porque no funcionaba, no había cambiado los nombres de los campos Trimestre y Año, pero ahora lo cambié y me da error en Me.Año (Así se llama el campo)
Mándame la BD, pero sólo con las tablas, consulta e informe en cuestión, para no volverme loco... XD
Va el link con la base reducida. A su gusto señor, jajajaja, no me gusta molestarte tanto así que va con humor.
https://www.dropbox.com/s/nocs95wodeuyey7/BD_GESTIONGCP_EJEMPLO.accdb?dl=0
Bien, he aquí tus dos errores:
1º/ El título lo tienes como cuadro de texto, por tanto no puedes usar la propiedad Caption, que es una propiedad de las etiquetas.
Solución: Eliminar el .Caption o cambiar el título de cuadro de texto a etiqueta (click derecho.>Cambiar a -<Etiqueta)
2º/ En el pie de pagina no puedes colocar campos calculados, por eso te da #error el cuadro de total
Solución: ponlo en el pie de informe.
¡Gracias! De más está decir que tu ayuda es invalorable.
Funciona perfecto y con una consulta y un informe resuelvo todos los trimestres, meses y semestres.
Muchísimas gracias, creo que ya no falta nada, así que doy por concluida esta respuesta.
Mucha suerte y espero no tener que volverte a molestar. Hasta la próxima y feliz día del amigo.
Hola, de nuevo yo, vas a soñar conmigo. Yo pensaba que estaba listo, pero no, siempre falta 5 para el peso, como decimos aquí.
Estoy armando las consultas para calcular el mes, semestre y año con el mismo código para calcular el trimestre que voy me diste para que calcule también el nombre del título. Es decir el concepto es el mismo pero ahora el cálculo es en períodos diferentes por lo que debo modificar el código de intervalo y obviamente los títulos de los informes.
El mensual no tuve inconvenientes funciona perfecto, sólo que me pone el número 2 y no el nombre del mes. Es posible hacerlo, pero dentro del código no me sale.
Otra cosa que no sé es cuál es el código de intervalo para calcular el semestre, anual y mensual no tuve problemas y ya me funcionan perfectamente.
Ya no quiero decirte que espero que sea lo último.
Un saludo
Para el semestre has de usar la misma función que en la consulta de ref. Cruzadas (SiInm(Mes(Fecha)<7,1,2))
Para que te devuelva el nombre del mes y no el número, has de usar la función NombreMes (o MonthName en VBA)
Yo ya lo había hecho, pero parece que lo puse en un lugar incorrecto porque me dice que hay error de sintaxis:
Yo puse esto: (Lo pasé a minúscula porque no me deja enviarlo sino)
Select[1B2-Auditorias Inducida].Codigo_RNOS, Count([1B2-Auditorias inducida].Nro_CUDAP) AS Total, Year([FECHA_CUDAP]) AS Expr1, DatePart("Semestre " & SiInm(Mes([FECHA_CUDAP])<7;1;2)) AS Expr2
FROM [1B2-AUDITORIAS INDUCIDA]
GROUP BY [1B2-AUDITORIAS INDUCIDA].CODIGO_RNOS, Year([FECHA_CUDAP]), DatePart("m",[FECHA_CUDAP])
HAVING (((Year([FECHA_CUDAP]))=[Ingrese el año que desea consultar]) AND ((DatePart("m",[FECHA_CUDAP]))=[Ingrese el mes]));
Con respecto al nombre el código siguiente es como lo modifiqué, pero también me da error:
Me.lblTitulo = "Auditorías inducidas del mes de " & NombreMes = Me.Mes & " de " & Me.Año
En la SQL el semestre lo sacas así:
Select[1B2-Auditorias Inducida].Codigo_RNOS, Count([1B2-Auditorias inducida].Nro_CUDAP) AS Total, Year([FECHA_CUDAP]) AS Expr1, SiInm(Mes([FECHA_CUDAP])<7;1;2)) AS Expr2 FROM....
Y el resto de la expresión creo que no la tienes bien, pues si la consulta es para semestre no tiene sentido que pidas el mes como parametro...
Para el titilo del informe de meses, si el cuadro de texto se llama Mes, y te da el número del mes, sería:
Me.lblTitulo = "Auditorías inducidas del mes de " & MonthName(Me.Mes) & " de " & Me.Año
- Compartir respuesta