No consigo que me cuente correctamente los registros de una tabla

Estoy creando un informe resumen, en el que no quiero utilizar una consulta de origen, es decir, un informe independiente, para mostrar un conteo de cuatro categorías, según la fecha elegida por el usuario en un formulario diálogo.

Como tengo el código para filtrar el informe, quiero aprovecharlo para, en el informe, coger ese filtro y aplicarlo a un DCount. No sé si esto se podrá hacer. He optado por esta opción porque quiero que me aparezcan las cuatro categorías. La otra opción que se me ocurre sería utilizar una tabla de referencias cruzadas, pero para esto, lo veo excesivo.

En fin, esto es lo que tengo al cargar el informe:

Private Sub Report_Load()
    Me.TxtAceptado = Nz(DCount("CodigoEstado", "TPresupuestos", Me.Filter & " And [CodigoEstado]='" & 1 & "'"), 0)
    Me.TxtDenegado = Nz(DCount("CodigoEstado", "TPresupuestos", Me.Filter & " And [CodigoEstado]='" & 2 & "'"), 0)
    Me.TxtFacturado = Nz(DCount("CodigoEstado", "TPresupuestos", Me.Filter & " And [CodigoEstado]='" & 3 & "'"), 0)
    Me.TxtFacturado = Nz(DCount("CodigoEstado", "TPresupuestos", Me.Filter & " And [CodigoEstado]='" & 4 & "'"), 0)
End Sub

Y este es el filtro que me pasa al informe:

¿Qué estoy haciendo mal?

1 Respuesta

Respuesta
1

Si al filtro ya le pasas un código de estado (por lo que se ve en la segunda imagen), y por código le vuelves a pasar otro código de estado, es bastante lógico que no te acabe de funcionar bien, sobre todo si le pasas dos códigos distintos, porque cada registro solo tendrá uno.

No, no, no le paso dos códigos diferentes. Mira, este es el filtro que aplica para abrir el informe:

Public Function ElFiltroFecha(ElForm As Form, ElCampo As String, ElInforme As String, Optional Recibidas As Boolean) As String
Dim MiArgumento As String
    If Not IsNull(ElForm.txtDesdeF) And Not IsNull(ElForm.txtHastaF) Then
        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 " & Format(ElForm.txtDesdeF, "medium date") & " hasta el " & _
                        Format(ElForm.txtHastaF, "medium date")
        If Recibidas = True Then
            DoCmd.OpenReport "IFacturasRecibidasSubinforme", acViewDesign, , , acHidden
            Reports!IFacturasRecibidasSubinforme.RecordSource = "Select * from CFacturasRecibidasSubinforme where " & ElFiltroFecha
            DoCmd.Close acReport, "IFacturasRecibidasSubinforme", acSaveYes
        End If
        DoCmd.OpenReport ElInforme, acViewPreview, , ElFiltroFecha, , MiArgumento
        DoCmd.Close acForm, ElForm.Name
    Else
        MsgBox "Es necesario introducir las dos fechas.", vbInformation, NombreBD
    End If
End Function

Y luego en el informe he puesto un MsgBox para ver qué es lo que coge como código del DCount:

    MsgBox Nz(DCount("CodigoEstado", "TPresupuestos", "[CodigoEstado]='" & 4 & "'" & " And " & Me.Filter), 0)

Ah, ok, había interpretado mal las imágenes...

CodigoEstado en la tabla ¿es un campo numérico o de texto? Si es lo primero, el código debería ser así (para que veas la diferencia):

"[CodigoEstado]=" & 4 & "" & " And " & Me.Filter), 0)

o más sencillo:

"[CodigoEstado]=4 And " & Me.Filter), 0)

Si así no te va, ponlo en el evento "al dar formato" de la sección donde tengas los cuadros de texto.

Pues nada. Sé que por la sintaxis no es, porque, cuando lo pongo en un MsgBox, me saca los valores que debe. El problema está al ponerlo en el cuadro de texto independiente.

¡Gracias!

Me saca esto:

Cuando debería sacar:

Aceptado: 0

Denegado: 0

Facturado: 3

Pendiente: 0

Al final lo he solucionado así:

    Me.TxtAceptado = Format(DCount("CodigoEstado", "TPresupuestos", "[CodigoEstado]='1' And " & Me.Filter), "0")
    Me.TxtDenegado = Format(DCount("CodigoEstado", "TPresupuestos", "[CodigoEstado]='2' And " & Me.Filter), "0")
    Me.TxtFacturado = Format(DCount("CodigoEstado", "TPresupuestos", "[CodigoEstado]='3' And " & Me.Filter), "0")
    Me.TxtPendiente = Format(DCount("CodigoEstado", "TPresupuestos", "[CodigoEstado]='4' And " & Me.Filter), "0")

No sé porqué, pero lo importante es que funciona. Lo que pienso como explicación es que tengo puesto el cuadro de texto independiente del informe como número estándar.

¡Muchas gracias!

¡Un saludo!

Cambia el formato de la fecha (de americano a europeo), a ver si es por eso

No, el problema es el formato del cuadro de texto independiente. Aquí:

Antes lo tenía puesto como estándar y 0 decimales, y ha sido cambiarlo y ya me coge bien el siguiente código:

Private Sub SecciónEncabezadoDePágina_Format(Cancel As Integer, FormatCount As Integer)
    Me.TxtAceptado = DCount("CodigoEstado", "TPresupuestos", "[CodigoEstado]='1' And " & Me.Filter)
    Me.TxtDenegado = DCount("CodigoEstado", "TPresupuestos", "[CodigoEstado]='2' And " & Me.Filter)
    Me.TxtFacturado = DCount("CodigoEstado", "TPresupuestos", "[CodigoEstado]='3' And " & Me.Filter)
    Me.TxtPendiente = DCount("CodigoEstado", "TPresupuestos", "[CodigoEstado]='4' And " & Me.Filter)
End Sub

Muchas gracias.

Vivir para ver...

Pero bueno, si lo has solucionado, genial!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas