Access - Formulario de acceso por usuario

 
Vista:
sin imagen de perfil
Val: 6
Ha aumentado su posición en 4 puestos en Access (en relación al último mes)
Gráfica de Access

Formulario de acceso por usuario

Publicado por Javier (13 intervenciones) el 29/11/2022 15:51:20
Tengo una tabal T_TRABAJO con los campos Id, IdTrabajador e IdObra y en otra tabla T_FACTURAS que contiene un campo IdObra y me gustaría saber si es posible que desde un formulario F_ACCESO yo pudiese elegir de una lista desplegable un trabajador y que me abra un formulario F_FACTURAS y me muestre todas las facturas que tenga el IdObra que coincida con todas las obras que ese trabajador tiene en la tabla T_TRABAJO, es posible?

918932e98acc93b8479d5fc35e077e9d

Tengo un formulario F_Facturas que contiene el campo IdObra como única relación con el formulario F:_Acceso y este formulario F_Facturas contiene múltiples filtros.

06304eef6d4705d66ab06fc505315ce5

y me gastaría que seleccionando un trabajador del cuadro combinado del formulario F_Acceso me abriese el formulario F_Facturas con todas las facturas cuyo IdObra coincidan

Captura-de-pantalla-2022-11-29-154747

si es posible lo que pido os agradecería vuestra ayuda, gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Formulario de acceso por usuario

Publicado por Anonimo (3316 intervenciones) el 29/11/2022 16:35:32
la relacion entre el trabajador y la tabla facturas es multiple, por lo que se requiere obtener una lista (o un subconjunto) de los IDs de obra que comparten el trabajador y la tabla facturas.

Esta SQL debería cumplir los requisitos como origen de datos:
1
"Select * From T_Facturas Where IdObra In (Select IdObra From T_Trabajo Where IdTrabajador = " & Combo_trabajadores & ")"

Se pretende filtrar a la tabla facturas por todos los trabajos en los que intervino el trabajador (dato que se obtiene de un Combo (y que se supone que es un dato numérico: el ID, la/su columna dependiente)

-No garantizo que la SQL no contenga errores, está escrita aquí y sobre la marcha (sin datos reales que la respalden)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 6
Ha aumentado su posición en 4 puestos en Access (en relación al último mes)
Gráfica de Access

Formulario de acceso por usuario

Publicado por Javier (13 intervenciones) el 30/11/2022 13:21:02
En primer lugar darte las gracias por las molestias, pero me da error o como yo no estoy muy ducho en la materia lo he hecho mal, en el combo del formulario de acceso( que tiene el IdTrabajador) le he dicho que al actualizar me abra el formulario F_Factura - DoCmd.OpenForm "F_Facturas" y en formulario F_Facturas al abrir le he puesto la orden que me da error

Captura-de-pantalla-2022-11-30-130302
realmente no se si lo estoy haciendo bien o no, la tabla T_Facturas no tiene el campo IdTrabajador, solo la puedo relacionar por el IdObra, por eso en la tabla que se basa el formulario de acceso T_Trabajo contiene los dos campos IdTrabajador E IdObra. Si pudieses ayudarme te lo agradecería, un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Formulario de acceso por usuario

Publicado por Anonimo (3316 intervenciones) el 30/11/2022 14:14:04
La SQL solo mostraría su contenido, si se utiliza en la sección del generador de consultas, para adjudicarla a un formulario hay que asignársela a su origen de datos o 'como' su origen de datos (su propiedad RecordSource).

Lo correcto sería asi:

1
2
3
Private Sub Form_Open(Cancel As Integer)
Me.RecordSource = "Select * From T_Facturas Where IdObra In (Select IdObra From T_Trabajo Where IdTrabajador = " & Me.x_trabajador & ")"
End Sub

Se aprecia con meridiana claridad que el campo trabajador no está en la tabla facturas y que la relación existe a través de la tabla trabajos que comparte el mismo dato con la tabla obras.

Lo que se intenta es obtener un listado con los IDs de los trabajos en los que intervino el trabajador (las obras/trabajos si constan en la tabla facturas)
Es posible (eso ya depende del resto de la aplicación) que una obra tenga más de un trabajador, lo que implicara repartir de alguna forma el importe entre los intervinientes (por ejemplo: en base a horas asignadas a cada obra por parte del trabajador, datos no publicados).

Si en un trabajo han intervenido varios operarios (trabajadores) y se computan las obras a cada uno (calculándolas individualmente), las cuentas no van a cuadrar.
Ahora bien, si cada 'trabajador' es una subcontrata y la factura solo engloba sus trabajos, las cuentas deberían cuadrar.

Si se desea ver que se obtiene, copiar esta parte de la SQL, abrir una consulta nueva, NO seleccionar ninguna tabla y (en su Vista SQL) pegar el texto y tras ello ejecutarla, debería aparecer un listado de obras (que son las que se utilizaran para obtener las facturas relacionadas con el trabajador)

1
Select IdObra From T_Trabajo Where IdTrabajador = " & Forms.[nombre del formulario].x_trabajador;

Insisto en que el dato que devuelve el combo ha de ser el Id del trabajador, esto es: un número y que el formulario que contiene el combo ha de estar abierto y el combo tener uno de sus Items seleccionado para que la consulta funcione. La alternativa es sustituir la referencia al combo con un ID conocido.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar