Problemas en el evento "al dar formato" en un informe

Tengo un informe que me saca un listado de los alumnos, con las necesidades educativas y las medidas que se deben tomar con cada uno. A fin de hacer el listado de forma que aparezca un alumno diferente en cada fila con estos datos, he puesto los campos en el apartado "Detalle" y luego he creado un evento en "Al dar formato", dentro de las propiedades de "Detalle".

A la hora de hacer el informe todo aparentemente sale bien: cambia los nombres de los alumnos, le pone las necesidades de cada uno en el siguiente campo... Pero el problema surge cuando el informe tiene rellenar un cuadro de texto independiente (txt_asistencia) a partir de la información de algunos campos un alumno concreto, como se puede ver en el código que viene a continuación:

If [P_alimentacion] = -1 Then
    asistencia = "Alim., "
End If
If [P_desplazamiento] = -1 Then
    asistencia = asistencia & "Despl., "
End If
If [P_Supervision] = -1 Then
    asistencia = asistencia & "Sup., "
End If
If [P_vigilancia] = -1 Then
    asistencia = asistencia & "Vigil., "
End If
If [P_WC] = -1 Then
    asistencia = asistencia & "WC, "
End If
txt_asistencia = asistencia

El problema es que el informe me pone bien el contenido de "txt_asistencia" para el primer alumno. Pero a partir de ahí me repite el mismo contenido en todos los alumnos, cuando debería ser diferente.

En resumen, todos los campos que vienen en la consulta que figura en el origen de datos del informe se actualizan con cada alumno. Pero cuando tiene que completar cuadros de texto independientes, el valor del primer cuadro de texto se repite en el resto de alumnos.
Por más vueltas que le doy, no sé donde está el problema.

2 respuestas

Respuesta
1

Para que tome los datos del registro actual no puede ser independiente, ha de ser calculado, esto es: relacionado con el registro actual.

Supongo que habrá una referencia única (si no la hay, se añade de forma oculta) y en base a ella de construye el contenido o se filtra (condiciona) si se crea a la par que el origen de datos.

¿Cómo pondría todo eso en un campo calculado?

No entiendo cómo meter ese código en el origen de datos

Suponiendo que esos datos están accesibles registro a registro, como origen de datos del campo calculado, esto deberá resolver el problema (y sin la referencia única antes mencionada):

= IIf([P_alimentacion], "Alim., ", "") & IIf([P_desplazamiento], "Despl., ", "") & IIf([P_Supervision], "Sup., ", "") & IIf([P_vigilancia], "Vigil., ", "") & IIf([P_WC], "WC, ", "")

Me sale un error: "La expresión que ha especificado tiene una sintaxis no válida". Lo he puesto mucho más reducido para comprobarlo mejor, poniendo lo siguiente

=IIf([P_alimentacion]=-1, "Alim., ", "")

Pero me sale el mismo error

Me da error de sintaxis. He probado con una expresión más corta para poder ver dónde estaba el error:

= IIf([P_alimentacion], "Alim., ", "")

Pero me sigue saliendo el error

La versión corta corregida (en la versión en castellano fuera de VBA se utiliza como separador el puto y coma):

=IIf([P_alimentacion]=-1, "Alim., ", "") ===> =IIf([P_alimentacion]=-1; "Alim., "; "")

La larga:

= IIf([P_alimentacion]; "Alim., "; "") & IIf([P_desplazamiento]; "Despl., "; "") & IIf([P_Supervision]; "Sup., "; "") & IIf([P_vigilancia]; "Vigil., "; "") & IIf([P_WC]; "WC, "; "")

Ahora es bien el código. Pero el problema continúa. Repite, en cada línea, el valor que tiene el primer alumno.

Esa expresión como origen de datos para el campo calculado exige que los datos a evaluar estén presentes en la sección del informe, esto es:

Se requiere que estén en la sección detalle (o la sección donde deba aparecer el resultado) los siguientes campos:

[P_alimentacion]
[P_desplazamiento]
[P_Supervision]
[P_vigilancia]
[P_WC]

No alteraran nada la estética final si se ocultan y se les asigna un tamaño cero (supongo que eso no será un inconveniente).

Con los datos aportados, poco mas se puede deducir de las respuestas aportadas, se desconoce la aplicación real, como se aplican las respuestas ... un poco de luz sobre el entorno seria interesante.

Lo he probado, ocultando los campos, pero sigue sin funcionar. Agradezco, de verdad el interés por querer echarme una mano, pero no sé qué más puedo decir. Deduzco que tenía que haber creado un campo en la tabla donde se grabasen las medidas que se han seleccionado. Así se evitaría tener que construir el contenido del recuadro de texto en el informe. Gracias de todas formas.

Dado que los informes se procesan en varias etapas y que los eventos funcionan independientemente en la vista previa y cuando se envían a la impresora ...

¿Se puede verificar si lo que presenta en pantalla y lo que imprime ofrecen el mismo resultado?

De la respuesta anterior me surge otra duda, si 'ahora se ocultaron los campos' implica que antes eran visibles y si lo eran:
¿Mostraban en cada registro los valores adecuados o los mismos que el cuadro de texto rebelde?.

Respuesta
1

Pruebe creando una función a nivel de módulo del informe, algo como:

Function strAsistencia()
If [P_alimentacion] = -1 Then
    asistencia = "Alim., "
End If
If [P_desplazamiento] = -1 Then
    asistencia = asistencia & "Despl., "
End If
If [P_Supervision] = -1 Then
    asistencia = asistencia & "Sup., "
End If
If [P_vigilancia] = -1 Then
    asistencia = asistencia & "Vigil., "
End If
If [P_WC] = -1 Then
    asistencia = asistencia & "WC, "
End If
strAsistencia = asistencia
End Function

En el campo "txt_asistencia" asigna como Origen del control:

=strAsistencia()

No entiendo lo que quiere decir con "módulo de informe". Yo tengo módulos con funciones, pero no están asociados a un formulario o informe concreto. ¿como lo hago?

En diseño del informe debe crear la siguiente función. Observe la imagen.

No funciona. He tenido que poner en la primera línea de la función:

Dim asistencia as integer

Porque si no me daba error. Pero sigue pasando lo mismo. La asistencia que recibe el primer alumno se repite en el resto.

Si quiere envíeme la base datos con información ficticia a [email protected] favor en el asunto anotar la consulta. No queda otra alternativa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas