Access - intervalo fechas

   
Vista:

intervalo fechas

Publicado por Gerard (11 intervenciones) el 31/07/2015 16:10:21
Hola! Buenas tardes!

Tengo una base de datos con dos campos fecha:

FechaInicio
FechaFinal

Me gustaría lograr que dicho intervalo de fecha, consiguiera calcular y separar los días de tiene cada mes, y mostrarlo en la misma fila del registro.

Ejemplos,

Registro: 1
FechaInicio: 15/09/2014
FechaFinal: 31/12/2014

Expr1: Septiembre: 16 días
Expr2: Octubre: 31 días
Expr3: Noviembre: 30 días
Expr4: Diciembre: 31 días

Registro: 2
FechaInicio: 30/10/2014
FechaInicio: 30/11/2014
FechaFinal: 25/12/2014

Expr1: 2 días
Expr2: 30 días
Expr3: 25 días

A partir de ahí, gracias a estos números de días podré realizar varias operaciones y seguir con la base de datos,

Muchísimas gracias!!!

Gerard
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
Imágen de perfil de douglas

intervalo fechas

Publicado por douglas (280 intervenciones) el 31/07/2015 17:09:57
Buenas pues no logro captar para que quieres hacer esto pero podrías hacerlo solo con una expresión
dentro de un formulario y te calcularía el total de los días no separado por mes.

ndiascalculados= DateDiff("d", Fechainicio, Fechafinal)

donde ndiascalculados puede ser el campo de la base de datos donde irán los días

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
1
Comentar

intervalo fechas

Publicado por Gerard (11 intervenciones) el 31/07/2015 18:12:12
Hola douglas!

Gracias por la rapidez en contestar.

Ya conozco el número total de días del intervalo. La cuestión es saber el número de días que tiene cada mes de ese intervalo. En base a los días trabajados, se calcula una retribución que va en función del mes. Por eso, necesito saber cuantos días ha trabajado cada uno categorizado por los meses del período.

Registro: 1
FechaInicio: 15/09/2014
FechaFinal: 31/12/2014

Obtener:
Expr1: Septiembre: 16 días
Expr2: Octubre: 31 días
Expr3: Noviembre: 30 días
Expr4: Diciembre: 31 días

Registro: 2
FechaInicio: 30/10/2014
FechaFinal: 25/12/2014

Obtener:
Expr1: 2 días
Expr2: 30 días
Expr3: 25 días

Gracias!

Gerard
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

intervalo fechas

Publicado por Enrique Heliodoro (1663 intervenciones) el 31/07/2015 19:37:35
Yo lo intentaría con una función:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Public Function CuentaDias(date1 As Date, date2 As Date) As String
Dim TmpCont As Long, tempMes As Long, XFecha As Date
tempMes = Month(date1)
For XFecha = date1 To date2
   If tempMes <> Month(XFecha) Then
      If Len(CuentaDias) <> 0 Then CuentaDias = CuentaDias & ","
   CuentaDias = CuentaDias & MonthName(tempMes) & " " & TmpCont
   tempMes = Month(XFecha)
   TmpCont = 0
   End If
TmpCont = TmpCont + 1
Next XFecha
If Len(CuentaDias) <> 0 Then CuentaDias = CuentaDias & ","
CuentaDias = CuentaDias & MonthName(tempMes) & " " & TmpCont
End Function
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

intervalo fechas

Publicado por GERARd (11 intervenciones) el 01/08/2015 17:27:16
Hola Enrique!

Muchas gracias por el código!

He estado intentando implantarlo en mi BD, pero alguna cosa hago mal.

He modificado los campos de la fecha, por date1 y date2. También, he creado otro campo llamado "CuentasDias", después he copiado el código y he escogido el procedimiento (después de actualizar, al hacer click...) pero ninguno de ellos responde al cálculo. ???

Dónde está el fallo?

He adjuntado un pequeña BD con tres registros para hacer estas pruebas.

Muchas gracias de nuevo!!!

Gerard
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

intervalo fechas

Publicado por Enrique Heliodoro (1663 intervenciones) el 01/08/2015 19:12:36
Acepto el hecho de que se sea un novato en/con Access, pero el archivo adjuntado parece un concurso de despropósitos

.- comenzando por el cruce de datos en los objetos del formulario (la relación nombre <==> valor) que implicara que la fecha inicial sea la final y la final la inicial (con el consiguiente 'desaguisado').

.- otro de los despropósitos es el DUPLICADO de la función, el mismo nombre como función publica en un modulo y nuevamente como publica en el propio formulario .....

.- también el utilizar el nombre como campo de la tabla y los nombres de los parámetros de la función como nombres de los campos .....

(En esa línea, las funciones incorporadas en Access OBLIGARIAN a utilizar como nombres (en donde fuera) los de sus parámetros y como los nombres no se deberían repetir, todas las funciones serian 'de un solo uso' ....).

En fin, el uso de esa función como origen de datos 'de un cuadro de texto independiente' seria (en el formulario y con una configuración regional española, que utiliza el punto y coma como separador de parámetros):

=CuentaDias([aqui el nombre del campo con la fecha inicial]; [aquí el nombre del campo con la fecha final])


Aceptando que el nivel a fecha actual es poco y que la base proviene de un montón de experimentos AMONTONADOS ===> a la papelera y comenzar de nuevo

Base con una tabla que tenga dos campos de fecha (que se llamen como quieran pero unos nombres propios evitan confusiones)
Se crea un modulo y en el se copia la función (pero SOLO en ese sitio)

En el formulario basado en esa tabla, los campos de fecha (y el resto que se utilicen de adorno) mas un campo independiente al que se le adjudicaría lo anteriormente expuesto (pero con sus nombres correctos).

La función es un ejemplo funcional, pero ... no tiene controles de errores (por ejemplo: si no hay fechas dará error)

La considero útil solo a titulo informativo, el asignar a cuadros de texto cada uno de los subcalculos tendría el inconveniente de que se ignora a priori cuantos se necesitarían

Para asignar el resultado a un campo de una tabla, se tendría que hacer por asignación directa en un evento o a golpe de botón o con una macro 'asignar valor' o .....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

intervalo fechas

Publicado por Gerard (11 intervenciones) el 02/08/2015 14:25:18
Muchas gracias Enrique!

Me ha sido de mucha utilidad. Es verdad que entre tanta prueba la BD estaba hecha un buen lío, y al enviarlo al foro no me fijé lo suficiente. Tomaré nota de tus consejos para mejorar.

Saludos y gracias de nuevo!

Gerard
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