Vincular un subinforme en base a un rango de fechas

Tengo un informe creado para el Libro de IVA, donde aparece la relación de facturas, con la base imponible, la cuota de IVA, y el importe. Este es el informe:

Ahora bien, necesito añadir a ese informe un resumen de cada uno de los IVA, porque en una misma factura puede haber artículos con diferentes IVA. Así:

10% --> X €

21 % --> X €

Ese resumen tiene que ir en un subinforme, para que si, en un futuro, tengo que añadir nuevos, aparezcan automáticamente. Sin embargo, me encuentro en que tengo que relacionar el informe principal con el subinforme mediante el rango de fechas que escoja, porque es lo que determina qué registros aparecen y cuáles no. Y aquí es dónde surge el problema, ¿cómo los vinculo?

Las fechas las escojo en un formulario, que me filtra el informe según este código:

Private Sub CmdAbrirInforme_Click()
    If Not IsNull(Me.txtDesdeF) And Not IsNull(Me.txtHastaF) Then
        Call ElFiltroFecha(Me, "[Fecha]", "ILibroDeIVA")
        DoCmd.Close acForm, Me.Name
    Else
        MsgBox "Es necesario introducir las dos fechas.", vbInformation, "Gestión de facturas y presupuestos"
    End If
End Sub
Public Function ElFiltroFecha(ElForm As Form, ElCampo As String, ElInforme As String) As String
    Dim MiArgumento As String
    ElFiltroFecha = ElCampo & " BETWEEN #" & Format(Nz(ElForm.txtDesdeF, #1/1/1900#), "mm/dd/yyyy") & "# AND #" & _
                               Format(Nz(ElForm.txtHastaF, #12/31/9999#), "mm/dd/yyyy") & "#"
    MiArgumento = " - Del " & Year(ElForm.txtDesdeF) & " " & Format(ElForm.txtDesdeF, "mm") & " " & Format(ElForm.txtDesdeF, "dd") & " hasta el " & _
                    Year(ElForm.txtHastaF) & " " & Format(ElForm.txtHastaF, "mm") & " " & Format(ElForm.txtHastaF, "dd")
    DoCmd. OpenReport ElInforme, acViewPreview,, ElFiltroFecha,, MiArgumento
End Function

¿Alguna solución?

2 respuestas

Respuesta
1

Solución:

Private Sub Report_Open(Cancel As Integer)
    Me.RecordSource = "Select * from CLibroDeIVASubinforme where " & Me.Parent.Filter
End Sub
Respuesta
1

Te digo lo que haría y no necesitas subinforme ni nada.

Le añadiría a la tabla Facturas un campo TipoIVA. En cualquier evento de cualquier formulario puedes poner

DoCmd.RunSQL "update facturas set tipoiva=cuotaiva*100/baseimponible"

Con lo que a cada registro le pondrá el tipo de IVA que le corresponde. Te quedaría

Luego construiría el informe así, donde le añado dos cuadros de texto. Uno en el encabezado( que estarían ocultos) y otro en el pié de página, y dos cuadros de texto llamados IVA21 e IVA10

El cuadro de texto del encabezado te coge la fecha del primer registro y el del pie te coge la del último.

Cuando abras el informe, siguiendoel proceso que dices, aunque yo lo he obviado, te quedaría(lo tengo que poner en dos imágenes porque mi ordenador es un portátil y la pantalla no da para más.

El código del evento Al dar formato de la sección de pie del informe es

Private Sub SecciónPieDePágina_Format(Cancel As Integer, FormatCount As Integer)
IVA21 = DSum("cuotaiva", "facturas", "tipoiva=21 and fecha between reports!facturas!texto11 and reports!facturas!texto13")
IVA10 = DSum("cuotaiva", "facturas", "tipoiva=10 and fecha between reports!facturas!texto11 and reports!facturas!texto13")
End Sub

Y puedes ver que no necesitas ningún subinforme. En el pie de página(aunque podría ser en el pie de informe que quizás te quede mejor) te va poniendo la suma de las cuotas del IVA en ese intervalo de tiempo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas