Impresión subinformes

Tengo que imprimir un informe que contiene 4 subinformes no vinculados por ningún campo ( el formulario principal no contiene ningún dato).
Como puedo ejecutar la impresión de este Informe, desde un formulario, con la condición que, todos los subinformes me muestren los valores contenidos entre el periodo de fechas que le indico en el formulario (las fechas las tengo en variables).
Este es el código que tengo pero no me funciona ( ! Ni con un subinforme snif, snif ! ):
¿Cuál es la solución y que es lo que estoy haciendo mal?
Private Sub Comando0_Click()
año = Year(Now)
stri11 = "1/1/" & año
stri12 = "3/31/" & año
tri11 = stri11
tri12 = stri12
stri21 = "4/1/" & año
stri22 = "6/30/" & año
tri21 = stri21
tri22 = stri22
stri31 = "7/1/" & año
stri32 = "9/30/" & año
tri31 = stri31
tri32 = stri32
stri41 = "10/1/" & año
stri42 = "12/31/" & año
tri41 = stri41
tri42 = stri42
DoCmd.OpenReport "InfRelacio1TrimestralProvedores", acViewPreview, "Reports!InfRelacio1TrimestralProvedores![InfFacProveTrimeProve].report.DataFactura >= #" & tri11 & "# AND reports!InfRelacio1TrimestralProveidores![InfFacProveTrimeProve].Report.DataFactura <= #" & tri12 & "#"
End Sub
1

1 Respuesta

5.800 pts. Licenciado en informática
Aúpa,
No desesperes, creo que la respuesta a tu problema es sencilla.
Fíjate en la llamada a OpenReport.
La ayuda de Access dice que esta función tiene los siguientes parámetros:
DoCmd.OpenReport nombreinforme[, vista][, nombrefiltro][, condiciónwhere]
En tu programa estás cometiendo 2 errores:
1. Supongo que lo que tú quieres hacer es establecer una condición para que en el subinforme sólo te aparezcan los datos que están entre un rango de Fechas.
En este caso, tendrás que utilizar el 4º parámetro (CondiciónWhere) y no el tercero, que sirve para indicar nombres de filtros, que no es tu caso.
2. El segundo error es que pasas los nombres de los campos entre comillas. De este modo Access interpreta que es un texto literal y no una variable.
Por tanto, la llamada a OpenReport debería ser (Fíjate que después de acViewPreview hay otra coma más):
DoCmd.OpenReport "InfRelacio1TrimestralProvedores", acViewPreview,, Reports!InfRelacio1TrimestralProvedores![InfFacProveTrimeProve].report.DataFactura & " >= #" & tri11 & "# AND " & reports!InfRelacio1TrimestralProveidores![InfFacProveTrimeProve].Report.DataFactura & " <= #" & tri12 & "#"
Prueba a ver si con esto te funciona.
Si no funciona, dímelo, puedo explicarte otra manera más sencilla de hacer lo que pretendes.
No dudes en consultarme cualquier duda o pega que tengas sobre esta solución.
Un abrazo,
Javi
Javi,
Tenias razón, no me fijé en que tenia puestas las comillas, pero aun haciendo como indicas me sigue dando error ( esta vez otro), ( 2451.. el report no existe, está mal escrito o no está abierto). ¿Por qué motivo?
¿Cuál es la manera más sencilla de realizar lo que pido? Y otra vez muchas gracias.
Aúpa, de nuevo.
Perdona por el gazapo, pero esta vez, el error lo cometí yo. Ciertamente, la duda que planteas es más complicada de lo que en un principio me pareció. No me fije bien en el enunciado ¡Gran Error!
La solución más rápida y sencilla que en principio se me ocurre, sería: Crear en el formulario ocho cuadros de texto no visibles con la ocho fechas que calculas, a los que se referenciaría directamente desde cada uno de los cuatro subinformes
Paso a explicarte en detalle como sería:
1. En el formulario donde calculas las fechas, crea 8 controles tipo Cuadro de Texto que podemos llamar igual que las variables que utilizas; esto es: tri11, tr12, tri21, tri22. (Si no quieres que los vea el usuario, ponles la propiedad Visible = False)
2. En el mismo evento donde calculabas el valor de las variables, ahora deberás asignar el mismo valor a los nuevos cuadros de texto. Esto sería:
Private Sub Comando0_Click()
año = Year(Now)
Me.tri11 = "1/1/" & año
Me.tri12 = "3/31/" & año
Me.tri21 = "4/1/" & año
Me.tri22 = "6/30/" & año
Me.tri31 = "7/1/" & año
Me.tri32 = "9/30/" & año
Me.tri41 = "10/1/" & año
Me.tri42 = "12/31/" & año
DoCmd.OpenReport "InfRelacio1TrimestralProvedores", acViewPreview
End Sub
De esta manera, puedes prescindir de las variables intermedias y de pasar parámetros al informe.
3. Ahora en cada uno de los subInformes, deberás modificar el origen de datos.
Edita la consulta de donde recoge los datos cada subinforme y en el campo DataFactura tendrás que incluir como criterio la referencia a los campos correspondientes del formulario.
Por ejemplo:
Vamos a suponer que el formulario donde tienes el botón Comando0 y desde el que llamas al informe, se llama: Formulario0.
Pues bien, en el criterio del campo DataFactura del primer sub informe, deberías poner lo siguiente:
>=[Forms]![Formulario0]![tri11] AND <=[Forms]![ Formulario0]![tri12]
En el del segundo subinforme, debería poner:
>=[Forms]![Formulario0]![tri21] AND <=[Forms]![ Formulario0]![tri22]
Y así sucesivamente.
Con esto, los informes mostrarán los datos filtrados; siempre y cuando tengas abierto el formulario Formulario0.
Existen otras soluciones, sin duda más elegantes, pero más complejas de implementar, y para las cuales me vendría bien conocer mejor tu aplicación.
Espero que con esto puedas resolver tu problema, y te pido disculpas por el retraso que mi anterior error haya podido ocasionarte. No dudes en comunicarme cualquier problema o pega que te surja.
Un abrazo,
Javi

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas