¿Como filtrar un formulario con variables?

Tengo un formulario clásico de facturas "Registro_facturas", basado en una tabla "Facturas". Este formulario tiene entre otros 2 campos "Empresa" y "Centro1". Necesito que sólo se pueda acceder a los registros que contengan la Empresa del empleado y en el caso de tenerlo al Centro de trabajo de esa empresa. También tengo que tener en cuenta que algunos empleados puedan tener acceso a todos los registros (no estan asignados a una empresa en concreto ni a un centro). Para esto he generado una consulta desde el formulario "Registro_facturas" con el siguiente criterio en el campo [Empresa]:

SiInm(EsNulo([Formularios]![FChivato].[Texto6].[Valor]);[Empresa];[Formularios]![FChivato].[Texto6].[Valor])

y en el campo [Centro1]

SiInm(EsNulo([Formularios]![FChivato].[Texto2].[Valor]);[Empresa];[Formularios]![FChivato].[Texto2].[Valor])

Siendo Texto6, del formulario FChivato la Empresa del empleado (si tiene alguna asignada) y siendo Texto2, del formulario FChivato el Centro de trabajo del empleado (si tiene alguna asignada)

De esta manera funciona pero tarda muchísimo en abrirse el formulario.

Estoy intentadolo sin generar una consulta utilizando la propiedad del formulario Filtrar al cargar "si" y como filtro he probado poner solo el de la Empresa para empezar: [Empresa]=SiInm(EsNulo([Formularios]![FChivato].[Texto6].[Valor]);[Empresa];[Formularios]![FChivato].[Texto6].[Valor]) pero me da error de sintaxis.

Sin embargo cuando pongo en el filtro solo una parte:

[Empresa]=[Formularios]![FChivato].[Texto6].[Valor] and [Centro1]=[Formularios]![FChivato].[Texto2].[Valor] funciona pero sin tener en cuenta, claro esta, que alguno empleados puede que solo tengan asignados Empresa y no Centro1 y otros que no tengan asignados ni Empresa ni Centro1.

No se que habría que corregir en el filtro para que funcione o si sería mejor introducir algún tipo de código diferente en el evento abrir el formulario.

1 respuesta

Respuesta
2

¿Probaste a hacerlo todo con código?

En el evento "al cargar" del formulario generas el siguiente código:

Dim laEmpresa As String
Dim elCentro As String
laEmpresa=Nz(Forms("FChivato").Texto6,"")
elCentro=Nz(Forms("FChivato").Texto2,"")
'Creas el filtro
If laEmpresa<>"" AND elCentro<>"" Then
   Me.Filter="Empresa='" & laEmpresa & "' AND Centro1='" & elCentro "'"
ElseIf laEmpresa<>"" AND elCentro="" Then
   Me.Filter="Empresa='" & laEmpresa & "'"
ElseIf laEmpresa="" AND elCentro<>"" Then
   Me.Filter="Centro1='" & elCentro & "'"
End If
Me.FilterOn=True

Quedaría por programar qué hacer si no tiene ni centro ni empresa, pero como lo desconozco, te lo dejo a ti (sería añadir un Else al bloque If con el filtro que quieras hacer).

Un saludo.


Gracias. Me salta un "error de compilación: Se esperaba: fin de la instrucción" en el siguiente código

Me.Filter="Empresa='" & laEmpresa & "' AND Centro1='" & elCentro "'"

Si, me faltó poner un &:

Me.Filter="Empresa='" & laEmpresa & "' AND Centro1='" & elCentro & "'"

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas