Suma en informe si se cumplen criterios en otros campos

Tengo un informe donde recojo de forma agrupada pressupuestos. Algunos de los campos son: Importe (Moneda), Reserva (Numero) y Factura (Sí/No).
El informe tiene una agrupación por tipo de Presupuesto. En el pie de esta agrupación quiero hacer 3 cálculos:

- Presupuestado: que sume Importe, si el campo Reserva está vacio y Factura No.
- Reservado: que sume Importe si el campo Reserva contiene un número y Factura No.
- Pagado: que sume Importe si el campo Reserva tiene un número y Factura está activado.

He probado añadiendo tres controles independientes y incluyendo estas funciones:

=SiInm([Reservado]=0 Y [Pagado]=0;Suma([Importe]);0)

=SiInm([Reservado]<>0 Y [Pagado]=0;Suma([Importe]);0)

=SiInm([Reservado]<>0 Y [Pagado]=-1;Suma([Importe]);0)

En este caso solo uno de los resultados es correcto. Luego he probado con algo tipo: =DSuma("Importe";"Informe";[Reservado]=0 Y [Factura]=0)... Pero tampoco

¿Alguna idea sobre cómo resolverlo?

1 Respuesta

Respuesta
2

Lo estás haciendo bien, pero tu mismo dices que el campo Reserva esta vacío, por tanto tienes que usar

[reserva]=null

ó

[reserva]=""

De todas formas, si te tuviera que aconsejar te diría que lo hicieras en código. Vamos a suponer que los tres cuadros de texto se llaman Presupuestado, Reservado y Pagado y que están en la sección Pié de presupuesto. El las propiedades de esta sección, en el evento Al dar formato, crearía un procedimiento de evento y entre Private Sub y End Sub pondría

Presupuestado=dsum("importe","nombretablaoconsulta","reserva is null and factura=0 and presupuesto = " & me.presupuesto & "")

Explico lo último, en las casillas de verificación el 0 equivale a No o False, y el -1 equivale a Sí o True.

Reservado=dsum("importe","nombretabla","reserva is not null and factura=0 and presupuesto=" & me.presupuesto & "")

Pagado=Dsum("importe","nombretabla","reserva is not null and factura=-1 and presupuesto=" & me.presupuesto & "")

He supuesto que presupuesto es numérico, si fuera texto sería

.....presupuesto='" & me.presupuesto & "'")

Ufff! Pues después de probar todas las variables, no me funciona ninguna de las dos opciones.

En el primer caso, he probado cambiando el cero de reserva por "" o null. I nada de nada. He detectado que las funciones solo operan cuando TODOS los datos de la agrupación tienen los mismos criterios... el problema es que cuando deberían aparecer diferentes resultados (por ejemplo un importe en Presupuestado y otro en Reservado), los tres controles aparecen a cero, o sea, no operan. En cambio, cuando todos los registros del grupo cumplen los mismo criterios sí opera.

Luego he probado con el código (aunque para mi es más difícil): lo he puesto en el Pie de grupo, y en el interior he dejado los tres controles independientes, sin función pero con el nombre de cada control. Al abrir el informe aparece: Se ha producido el error 2465 en tiempo de ejecución. La base de datos no encuentra el campo Presupuesto al que hace referencia la expresión. 

Raro, raro, raro... no? Se te ocurre algo más?

Si no vas a usar código tienes que poner

nz([reserva])

Que lo que hace es transformar los nulos en ceros y ya te hace la suma.

De todas formas, si quieres, repito, si quieres, mándame un mensaje(sólo el mensaje) a [email protected] y te mando un ejemplo sin código y otro con él y tu decides. Si lo haces, en el asunto del mensaje, pon tu alias Bartoldu ya que si no sé quien me escribe ni los abro.

Icue,

He hecho lo que me indicas, y sigue sin funcionar en el caso en que tendrían que aparecer diferentes resultados...

=SiInm(Nz([Reservado])=0 Y [Pagado]=0;Suma([Importe]);0)
=SiInm(Nz([Reservado])<>0 Y [Pagado]=0;Suma([Importe]);0)
=SiInm(Nz([Reservado])<>0 Y [Pagado]=-1;Suma([Importe]);0)

Te paso un mensaje por privado!

Me he dado cuenta además que el resultado de la suma (en cualquiera de los tres campos) es el total de la suma todos los registros, independientemente del contenido de los campos Reservado y Pagado...

Eureka! Lo resolví así!

=Suma(SiInm(Nz([Reservado])=0 Y [Pagado]=0;[Importe];0))

=Suma(SiInm(Nz([Reservado])<>0 Y [Pagado]=0;[Importe];0))

=Suma(SiInm(-nz([Reservado])<>0 Y [Pagado]=-1;[Importe];0))

Mil gracias Icue!!!

De todas formas te he enviado el ejemplo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas