Suma condicional campos en formulario Access

Como siempre daros las gracias por adelantado por vuestra sabiduría y vuestra ayuda.

Tengo una relación de facturas por meses, desde 2018 hasta mayo de 2022 en un formulario continuo.

Pretendo tener un campo calculado que me sume los campos "Cantidad" de cada año. Los campos que intervienen son pocos, pero no doy con la tecla:

Mes
Cantidad
Tabla: Facturas

La fórmula que estoy utilizando (después de haber probado 25 variantes por lo menos) es esta:

=DSuma("[Cantidad]";"Facturas";"[Mes]='*/*/2018'")

3 respuestas

Respuesta
1

¿Cómo se pretende presentar el resultado?..

Son una suma por año, y o se selecciona un año o se efectúan las sumas de todos los años y se presentan de forma independiente.

Si se pretende hacer en el formulario, la única forma de lograrlo es calcularlo en el pie de página (probablemente también en la cabecera) y la función más fácil es SUM a la que se la puede engañar (no son más que matemáticas y lógica, de ambas Access y los ordenadores andan sobrados).

El ejemplo para un año (el primero, 2018), lo del mes solo afectaría al año actual (estamos en junio y lo limitas a mayo, el mes pasado ... ) pero se puede hacer, incluso entre fechas o semestres o ...

Asumiendo que la fecha del registro esta en el cuadro de texto 'MES'

= Sum([cantidad] * Abs (Year ([mes]) = 2018))

Pregunta:
¿No seria más efectivo generar una consulta y presentar su resultado en un subformulario independiente o un cuadro de lista o (lo más cutre) en un cuadro de texto?.

La lógica aplicada en la ventana de inmediato:

Fecha_2018 = CDate("15/5/2018")
Fecha_2019 = CDate("15/5/2019")

Cantidad = 54321

? cantidad * Abs (Year (Fecha_2018) = 2018)
54321
? cantidad * Abs (Year (Fecha_2019) = 2018)
0

--- Sin la función ABS ---

? cantidad * (Year (Fecha_2018) = 2018)
-54321

Respuesta
1

Eduardo, el problema de añadirle al formulario un cuadro de texto independiente es que te repetiría en todos los registros el mismo valor. Otra cosa sería que en la propia tabla Facturas te añadieras un campo llamado, por ejemplo, TotalAnual. Pero de todas formas, puedes hacerlo de mil maneras diferentes. Verás, no tengo ninguna tabla con importes durante varias fechas, así que te pongo el ejemplo con Cuentas.

Si tengo el formulario Pedidos(bendita base Neptuno), al que le añado dos cuadros de texto Testo11 y Texto13 y un combinado llamado Elegir

En el cuadro de texto Escriba un año, pongo, por ejemplo 2018

Cuando pulso Enter

En Importe me dice la cantidad de pedidos durante ese año. El código del evento Después de actualizar del cuadro de texto 11 es

Private Sub Texto11_AfterUpdate()
Texto13 = DCount("*", "pedidos", "year([fecha_anotacion])=" & Me.Texto11 & "")
'Tu tendrías que ponerlo como Texto13=dsum("cantidad","facturas","year([fechafactura])=" & me.texto11 & "")
End Sub

Otra forma, voy a seleccionar un año en el combinado

En el momento que selecciono 2018

En este caso, el código del evento Después de actualizar del combinado elegir es

Private Sub Elegir_AfterUpdate()
Dim i As Integer
i = DCount("*", "pedidos", "year([fecha_anotacion])=" & Me.Elegir & "")
MsgBox " Ese año has recibido la friolera de " & i & " pedidos", vbOKOnly + vbInformation, "Para que lo sepas"
End Sub

Como lo tuyo es suma de dinero, lo debes poner como

Dim i as currency

i=Dsum("cantidad","facturas",.....)

Respuesta
1

Puede subir una imagen del formulario para estudiar mejor la respuesta y no entrar a improvisar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas