Access - Asignar a un campo el valor calculado de campos de la misma tabla

 
Vista:
sin imagen de perfil
Val: 56
Ha disminuido 1 puesto en Access (en relación al último mes)
Gráfica de Access

Asignar a un campo el valor calculado de campos de la misma tabla

Publicado por Leandro (21 intervenciones) el 01/08/2018 00:17:26
Hola, he intentado todo y se me seco el cerebro, no me sale, necesito que me expliquen de base si es que se puede hacer.
Tengo una Tabla (Ausencias) que tiene los campos [DNI], [CodigoAus], [Anio], [F_Inicio], [F_Fin], [Estado], [DiasSolicitados], [DiasGozados], [DiasCorresponden], [DiasRestan]

Cuando cargo un registro ingreso el DNI, CodigoAus, Año, Fecha de Inicio y Fin, Estado.
El estado marca si esta Autorizado, Anulado o Pendiente.
DiasSolicitados se calcula desde la Fecha Inicio y Fin.
DiasCorresponden se calcula de otra Tabla.
DiasRestan es una operación entre DiasSolicitados, DiasCorresponden y DiasGozados.

El problema lo tengo para obtener los DiasGozados, que debería calcularse con la sumatoria de todos los DiasSolicitados (de la misma Tabla) que coincidan DNI, CodigoAus, Anio y el Estado sea Autorizado

Ejemplo
DNI CodigoAus Anio F_Inicio F_Fin Estado DiasSolicitados
123 LAR 2018 01/01/18 05/01/18 Autorizado 5
568 LAR 2018 10/02/18 12/01/18 Autorizado 3
123 LIS 2018 20/03/18 24/03/18 Autorizado 5
123 LAR 2018 03/07/18 10/07/18 Autorizado 7

Al cargar un nuevo registro, si DNI ="123", CodigoAus= "LAR", Anio="2018", DiasGozados debería ser igual a 5+7=12
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

Asignar a un campo el valor calculado de campos de la misma tabla

Publicado por Anonimo (3316 intervenciones) el 01/08/2018 08:39:30
Vamos a intentar humedecer un poco ese cerebro.....

Si creamos una consulta de 'datos agrupados' (esto es: si activamos la agrupación) y
.- agrupamos por DNI + CodigoAux + Año
.- ponemos como condición el periodo de tiempo (en lugar de 'agrupar por ==> Donde)
.- le indicamos que SUME (en lugar de agrupar por ==> Suma) el resultado que se necesite calcular ….

Obtendremos para cada conjunto ( DNI + CodigoAux + Año) sus días disfrutados (gozados).

Si el periodo abarcase mas de un año (o partes de varios años), mostraría los días disfrutados de cada año.
Para evitar ese detalle (si se diese), bastaría eliminar de la agrupación el dato AÑO (se mantendría el periodo) y mostraría la suma de días de ese periodo sin tener en cuenta el año (agrupando solo por: DNI + CodigoAux ).
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: 56
Ha disminuido 1 puesto en Access (en relación al último mes)
Gráfica de Access

Asignar a un campo el valor calculado de campos de la misma tabla

Publicado por Leandro (21 intervenciones) el 01/08/2018 23:10:37
Entre las distintas cosas que intente, intente hacer una consulta agrupada que me devuelva el valor buscado y la consulta me arrojo el valor correcto, pero se me presentaron 2 problemas el primero fue asignar el valor de la consulta al campo y el segundo ejecutar la consulta desde el campo F_Fin que es de donde se calculan los campos calculados del formulario, y no podía ejecutarla pasandole los valores que estaba cargando en el formulario. La consulta que hice es la siguiente:

1
2
3
4
SELECT DISTINCTROW Sum(Agente_Ausentismo.DiasSolicitados) AS [Suma De DiasSolicitados]
FROM Agente_Ausentismo
GROUP BY Agente_Ausentismo.DNI, Agente_Ausentismo.CodigoAus, Agente_Ausentismo.Anio, Agente_Ausentismo.Estado
HAVING (((Agente_Ausentismo.DNI)="12345647") AND ((Agente_Ausentismo.CodigoAus)="LAR") AND ((Agente_Ausentismo.Anio)="2018") AND ((Agente_Ausentismo.Estado)="AUTORIZADO"));

Esta consulta de prueba la realice para probar colocando constantes en el Having, pero estos campos deben ser variables dependiendo de los datos que este cargando.
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

Asignar a un campo el valor calculado de campos de la misma tabla

Publicado por Anonimo (3316 intervenciones) el 02/08/2018 19:37:41
Los objetos que pueden mostrar o interactuar con las consultas son los formularios (asumiéndola como su origen de datos), al igual que los cuadros de lista o los combinados (los informes imitan a los formularios).

Un cuadro de texto admitirá un dato, las consultas están diseñadas para devolver conjuntos (aunque ese conjunto condicionado solo devuelva un dato), se tendrá que utilizar a un intermediario para asignar 'uno cualquiera' de los datos devueltos por la consulta a un cuadro de texto.

Normalmente bastaría con una función de dominio (el 'dominio': la consulta), la mas habitual es la función DLookup (si se esta plenamente seguro que solo devolverá un dato, en la creación del DLookup se puede ignorar a la condición), si devuelve mas de uno (y no se utiliza la condición), devolverá el primero que encuentre.

No veo mayor problema en que como referente se utilice a un formulario, solo seria necesario indicar la ruta absoluta.

No es la única solución, por ejemplo:

.- una función personalizada a la que se le pasen las referencias y devuelva el dato en cuestión

(esa función integraría la consulta, posiblemente también un recordset o el DLookup …. )
su mayor ventaja seria que se podría utilizar en diversas partes de la aplicación
la referencia a un formulario limita su utilidad a ese único formulario.
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: 56
Ha disminuido 1 puesto en Access (en relación al último mes)
Gráfica de Access

Asignar a un campo el valor calculado de campos de la misma tabla

Publicado por Leandro (21 intervenciones) el 05/08/2018 16:28:31
genial, use DLookup y funciona correctamente, no pude hacerlo como función pero dentro del formulario si y funciona. Gracias
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