Error al contar casilla de verificación con dos condiciones.

Tengo un formulario "F_LogisticaPartidosTemporada" con un subformulario continuo "FC_PartiosTemporada" que depende de la tabla "T_PartidosTemporada" el subormulario tiene una control casilla de verificación "Finalizado"

Lo que necesito es que en un cuadro de texto del formulario principal me ponga la suma de las casillas de verificación del subformulario, cuyo valor sea "Verdadero"

Le tengo puesto el siguiente código

=Suma(SiInm([Finalizado]=Verdadero;"T_PartidosTemporada";"Competicion='Partido de Liga'" & " AND Temporada='" & [Temporada] & "'"))

Pero no me da error. (adjunto Imagen)

Algún experto que me indique dónde esta el fallo.

2 Respuestas

Respuesta
3

Utiliza el pie del subformulario, el dato (calculo) puede tener altura cero y estar oculto, su contenido:

= Abs(Suma([Finalizado]))

En donde se desee visualizar solo hay que hacer referencia a él, algo como:

=[subformulario xx].Form.[el nombre del cuadro de texto con la suma en el pie del subformulario]

Gracias por su pronta respuesta Enrique.

Lo que Vd. me indica ya lo tengo hecho y me funciona bien. Quizás no me haya explicado lo suficiente.

A ver, con esa función me los cuenta todos los que están finalizados, pero lo que necesito es que me cuente sólo aquellos que estén finalizados. y sean "Partido de LIga", y Temporada= "Me.Temporada", ósea que la casilla verificación de cada registro "Finalizado"=-1 y además, se cumplan las dos condiciones.

Espero haberme hecho entender.

Los referentes para las condiciones:

¿Están 'visibles' para poder utilizarlos como condición en la suma?

Se va a obtener una suma que devolverá un único dato (sea con DSum o con Sum) y se supone que una parte de la selección (sea el [partido de liga] o la [temporada] ya los condicionara el formulario (o los registros del subformulario), por lo que solo se precisaría una (o ninguna según la ubicación de los datos a sumar).

Un dato de tipo verdadero/falso (y sus sinónimos) devuelven un cero (falso) y un (-1) como (verdadero), si se suman se obtendrá un valor negativo o cero

Para convertir el dato de negativo a positivo hay varias fórmulas entre ellas:

.- Abs(Dato obtenido)

,. (Dato obtenido) * -1

En base a ello si se desea obtener ese dato la función IIF (SiInm) se puede suprimir y quedaría algo así:

=DSuma("Finalizado";"T_PartidosTemporada";"Competicion='" & [Partido de Liga] & "' AND Temporada='" & [Temporada] & "'")

He supuesto que los referentes están disponibles como objetos del formulario y son Textos.

Es posible que nos falte un dato: el club/equipo, pero no me hagas demasiado caso, el futbol no forma parte de mis objetos de culto (ni por las apuestas)

Así si funciona correctamente, pero  no tengo claro  donde tengo que poner la opción

.- Abs(Dato obtenido), o

,. (Dato obtenido) * -1

Para convertir el negativo en positivo

Solucionado,  a veces tenemos la solución en las narices y no la vemos. 

Bastaba con multiplicar el resultado negativo por -1  (-*--=+)

muchísimas GRACIAS

Si está disponible, utilizo preferentemente ABS, si no está disponible multiplico por (-1)

La diferencia está en que ABS es el acrónimo de Absolute (el valor absoluto NO tiene signo) y es tan sencillo como al número que se le pasa como argumento: quitarle la marca.

Multiplicar por menos unos implica generar un nuevo número, esto es, se necesitan dos (uno desconocido, el otro fijo y tanto da que sea la unidad o el mayor de su rango), es indispensable una multiplicación.

Es por ello por lo que (para el mismo resultado) me decante a favor de ABS

Respuesta
2

José, los campos Si/No no se deben utilizar para realizar sumas y son un desastre. Preparé el siguiene ejemplo.

No tengo claro en que formulario está el cuadro de texto "Me.Temporada"

Le dejo una idea

Como no tengo claro si el campo "temporada" está en las 2 tablas asigné un cuadro combinado para tomar la temporada, en el ejemplo puse A, B, C.

Utilizo una función para contar los partidos jugados, pero se puede pasar a un procedimiento.

Código del cuadro combinado temporada

Private Sub Temporada_AfterUpdate()
  Me.ctlFinalizado = cuenta_finaliza(Me.Temporada)
End Sub

Después de actualizar asigna en el cuadro de texto "Partidos  Jugados" el valor que devuelve la función.

CÓDIGO DE LA FUNCIÓN

Public Function cuenta_finaliza(strTemporada As String) As Integer
 Dim strSQL As String
 strSQL = "Competicion='" & "Partido de Liga" & "' AND Temporada='" & strTemporada & "' AND Finalizado=True"
 cuenta_finaliza = DCount("*", "T_PartidosTemporada", strSQL)
End Function

Bueno, esto es una idea espero le sirva algo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas