Problema con un campo fecha, que no muestra los resultados debidos
Estoy intentando hacer un cierre de caja en una base de datos que cree que para usar como TPV.
En primer lugar, tengo una tabla donde meto los tickets que se van generan día a día:
Para ello, creo que una consulta donde le digo que muestre los campos Fecha, NombreFormaDePago y Entregado. Como tengo la posibilidad de que en una compra te puedan pagar mediante dos formas de pago distintas, tengo que hacer unir dos consultas. Así:
SELECT Format([Fecha],"Short Date") AS Fecha1, T05FormasDePago.NombreFormaDePago, Sum(T10TPV.Entregado1) AS Entregado FROM T10TPV INNER JOIN T05FormasDePago ON T10TPV.CodigoFormaDePago1 = T05FormasDePago.CodigoFormaDePago GROUP BY Format([Fecha],"Short Date"), T05FormasDePago.NombreFormaDePago UNION ALL SELECT Format([Fecha],"Short Date") AS Fecha1, T05FormasDePago.NombreFormaDePago, Sum(T10TPV.Entregado2) AS Entregado FROM T05FormasDePago INNER JOIN T10TPV ON T05FormasDePago.CodigoFormaDePago = T10TPV.CodigoFormaDePago2 GROUP BY Format([Fecha],"Short Date"), T05FormasDePago.NombreFormaDePago;
Como ves, la fecha, al estar formateada para mostrar la fecha y la hora, tengo que "quitarle" la hora. De ahí que le cambie el formato en la consulta. Y he aquí donde creo que radica el problema.
Bien, en un formulario que uso como diálogo, utilizo el siguiente código para abrir el informe:
Private Sub CmdAbrirInforme_Click() Dim MiArgumento As String Select Case Me.GrpFecha Case 1 If Nz(DSum("Entregado", "CCierreDeCaja", "Fecha1=#" & Me.txtHoy & "#"), 0) = 0 Then MsgBox "No hay registros hoy para hacer el cierre de caja.", vbInformation, NombreBD DoCmd.Close Else MiArgumento = Format(Me.txtHoy, "dd") & "-" & Format(Me.txtHoy, "mm") & "-" & Year(Me.txtHoy) DoCmd.OpenReport "I104CierreDeCaja", acViewPreview, , "Fecha1=#" & Format(Nz(Me.txtHoy, #1/1/1900#), "mm/dd/yyyy") & "#", , MiArgumento DoCmd.Close acForm, Me.Name End If Case 2 If Nz(DSum("Entregado", "CCierreDeCaja", "Fecha1=#" & Me.txtOtraFecha & "#"), 0) = 0 Then MsgBox "No hay registros esa fecha para hacer el cierre de caja.", vbInformation, NombreBD DoCmd.Close Else MiArgumento = Format(Me.txtOtraFecha, "dd") & "-" & Format(Me.txtOtraFecha, "mm") & "-" & Year(Me.txtOtraFecha) DoCmd.OpenReport "I104CierreDeCaja", acViewPreview, , "Fecha1=#" & Format(Nz(Me.txtOtraFecha, #1/1/1900#), "mm/dd/yyyy") & "#", , MiArgumento DoCmd.Close acForm, Me.Name End If End Select End Sub
Lo que hago es comprobar que haya registros ese día. Si no hay, mensaje de aviso y cierro. Si hay, muestra el informe.
Lo que pasa es que me he dado cuenta de que no filtra correctamente, porque, por ejemplo, el 1 de agosto de 2020 no hay registros y me debería mostrar el mensaje. Sin embargo, y muy a mi pesar, muestra el informe vacío.
Además, en la consulta ordena por fecha como le sale del... (completa con lo que tú quieras):
Y, obviamente, no puedo dejar esto así tan alegremente. He intentado poner las fechas en formato americano, pero en la consulta de unión no me lo coge. Ya no se me ocurre nada más.
¿Tú sabes cómo podría solucionarlo?