Access - Fechas solapadas o superpuestas

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

Fechas solapadas o superpuestas

Publicado por tejure (3 intervenciones) el 31/05/2021 22:27:22
Hola,

Alguien conoce algún algoritmo en vba para access que de entre varios periodos de tiempo, designados por fecha de inicio y fin, me diga si se superponen en una linea de tiempo y el numero de periodos de tiempo que se superponen.

O sea, me gustaria saber si en un dia dado coinciden 2 o 3 o 4 periodos de tiempo. Se que en excell se puede hacer con sus formulas, pero me interesaría hacerlo en access.

O alguna orientación o documentación para ayudar en este proposito ?

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

Fechas solapadas o superpuestas

Publicado por Anonimo (3316 intervenciones) el 01/06/2021 23:32:30
La función 'Between (entre)' delatara si un periodo de tiempo es concurrente con otro

Basta que se verifique si su inicio o su final coincide con el otro periodo y de los resultados obtenidos extraer conclusiones.

Tenemos dos periodos el 0 que es la referencia y el 1 que es el dato a evaluar

Si tomamos el comienzo de un periodo y se verifica si tiene concurrencia con otro y lo mismo co el final del periodo, se pueden dar los siguientes casos:

.- Evaluar el final: Final_1 Between inicio_0 and final_0)
.- Evaluar el principio: Principio_1 Between inicio_0 and final_0)

Si ninguno coincide ==> el dato (1) no pertenece al periodo (0)
Si coincide solo uno de los dos ==> se efectúa el calculo de la concurrencia
Si ambos coinciden ... el dato (1) esta solapado con el (2).

La función Between se puede sustituir por comparaciones de mayor (>= ) y menor (<=),
Un dato a tener en cuenta la funcion Between -en ese entorno-, exige que las fechas estén en formato DATE de Access.
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

Fechas solapadas o superpuestas

Publicado por jose (830 intervenciones) el 02/06/2021 10:08:07
MIRA A VER SI ES ESTO LO QUE NECESITAS:
En la pagina de Neckito he puesto una funcion que te da los dias de un intervalo que se encuentran en otro
http://neckkito.xyz/nck/index.php/miscelanea/aportaciones
FECHA 19/07/2015

DESCARGA : https://drive.google.com/file/d/0B91iZhlpwhqybUtRWjltTVZHMm8/view

PARA LLAMAR A LA FUNCION : EJEMPLO UN TRABAJADOR FA FECHA ALTA , FB FECHA BAJA Y queremos saber los dias
del intervalo FI (FECHA INICIAL ) Y FF (FEC HA FINAL) QUE HAY EN EN EL ANTERIOR INTERVALO

INTERVALO FA, FB, FI, FF


LA FUNCION ES ESTA
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
Public Function INTERVALO(FA As Date, FB As Date, FI As Date, FF As Date) As Long
 
 
 
INTERVALO = 0
 
 
Select Case FA
      Case Is > FB
            Call MsgBox("LA FECHA DE ALTA NO PUEDE SER MAYOR QUE LA FECHA DE BAJA", vbCritical, "ERROR")
                   INTERVALO = 0
                Exit Function
      Case Is < FB
                    Rem CASO 1
                    If FI < FA And FI < FB And FF < FA And FF < FB Then
                                             INTERVALO = 0
                                             MsgBox "DIAS " & "    " & Str$(INTERVALO)
                                         End If
 
 
                    Rem CASO 2
                    If FI < FA And FI < FB And FF = FA And FF < FB Then
 
                                             INTERVALO = 1
                                              MsgBox "DIAS " & "    " & Str$(INTERVALO)
                                         End If
                    Rem CASO 3
                    If FI = FA And FI < FB And FF = FA And FF < FB Then
 
                                             INTERVALO = 1
                                              MsgBox "DIAS " & "    " & Str$(INTERVALO)
                                         End If
 
                    Rem CASO 4
                    If FI = FA And FI < FB And FF > FA And FF < FB Then
 
                                             'INTERVALO=FF-FA   O FF-FI
                                             INTERVALO = DateDiff("d", FA, FF) + 1
                                              MsgBox "DIAS " & "    " & Str$(INTERVALO)
                                         End If
 
                    Rem CASO 5
                    If FI = FA And FI < FB And FF > FA And FF = FB Then
 
                                             'INTERVALO=FB-FA O FF-FI
                                              INTERVALO = DateDiff("d", FA, FB) + 1
                                               MsgBox "DIAS " & "    " & Str$(INTERVALO)
                                         End If
 
                    Rem CASO 6
                    If FI = FA And FI < FB And FF > FA And FF > FB Then
 
                                             'INTERVALO=FB-FA O FB-FI
                                              INTERVALO = DateDiff("d", FA, FB) + 1
                                              MsgBox "DIAS " & "    " & Str$(INTERVALO)
                                         End If
                    Rem CASO 7
                    If FI > FA And FI < FB And FF > FA And FF = FB Then
 
                                             'INTERVALO=FB-FI O FF-FI
                                              INTERVALO = DateDiff("d", FI, FB) + 1
                                               MsgBox "DIAS " & "    " & Str$(INTERVALO)
                                         End If
                    Rem CASO 8
                    If FI > FA And FI < FB And FF > FA And FF < FB Then
 
                                             'INTERVALO = FF - FI
                                              INTERVALO = DateDiff("d", FI, FF) + 1
                                               MsgBox "DIAS " & "    " & Str$(INTERVALO)
                                         End If
                    Rem CASO 9
                    If FI > FA And FI = FB And FF > FA And FF = FB Then
 
                                             INTERVALO = 1
                                              MsgBox "DIAS " & "    " & Str$(INTERVALO)
                                         End If
                    Rem CASO 10
                    If FI > FA And FI < FB And FF > FA And FF > FB Then
 
                                             'INTERVALO = FB - FI
                                              INTERVALO = DateDiff("d", FI, FB) + 1
                                              MsgBox "DIAS " & "    " & Str$(INTERVALO)
                                         End If
 
                    Rem CASO 11
                    If FI > FA And FI = FB And FF > FA And FF > FB Then
 
                                             INTERVALO = 1
                                              MsgBox "DIAS " & "    " & Str$(INTERVALO)
                                         End If
                    Rem CASO 12
                    If FI > FA And FI > FB And FF > FA And FF > FB Then
 
                                             INTERVALO = 0
                                              MsgBox "DIAS " & "    " & Str$(INTERVALO)
                                         End If
 
                    Rem CASO 13
                    If FI < FA And FI < FB And FF > FA And FF > FB Then
 
                                             'INTERVALO = FB - FA Then
                                              INTERVALO = DateDiff("d", FA, FB) + 1
                                               MsgBox "DIAS " & "    " & Str$(INTERVALO)
                                         End If
 
                    Rem CASO 14
                    If FI < FA And FI < FB And FF > FA And FF < FB Then
 
                                             'INTERVALO = FF - FA
                                              INTERVALO = DateDiff("d", FA, FF) + 1
                                              MsgBox "DIAS " & "    " & Str$(INTERVALO)
                                         End If
                    Rem CASO 15
                    If FI < FA And FI < FB And FF > FA And FF = FB Then
 
                                             'INTERVALO = FB - FA
                                              INTERVALO = DateDiff("d", FA, FB) + 1
                                               MsgBox "DIAS " & "    " & Str$(INTERVALO)
                                         End If
 
 
Case Is = FB
 
                Rem CASO 61
                If FI < FA And FF < FA Then
 
                                             'INTERVALO = FB - FA
                                              INTERVALO = 0
                                               MsgBox "DIAS " & "    " & Str$(INTERVALO)
                                         End If
                 Rem CASO 62
                If FI < FA And FF = FA Then
 
                                             'INTERVALO = FB - FA
                                              INTERVALO = 1
                                               MsgBox "DIAS " & "    " & Str$(INTERVALO)
                                         End If
 
                 Rem CASO 63
                If FI < FA And FF > FA Then
 
                                             'INTERVALO = FB - FA
                                              INTERVALO = 1
                                               MsgBox "DIAS " & "    " & Str$(INTERVALO)
                                         End If
                 Rem CASO 64
                If FI = FA And FF = FA Then
 
                                             'INTERVALO = FB - FA
                                              INTERVALO = 1
                                               MsgBox "DIAS " & "    " & Str$(INTERVALO)
                                         End If
                 Rem CASO 65
                If FI = FA And FF > FA Then
 
                                             'INTERVALO = FB - FA
                                              INTERVALO = 1
                                              MsgBox "DIAS " & "    " & Str$(INTERVALO)
                                         End If
                 Rem CASO 66
                If FI > FA And FF > FA Then
 
                                             'INTERVALO = FB - FA
                                              INTERVALO = 0
                                              MsgBox "DIAS " & "    " & Str$(INTERVALO)
                                         End If
 
 
 
 
 
End Select
 
 
 
'MsgBox "    " & Str$(INTERVALO)
 
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
0
Comentar
sin imagen de perfil
Val: 8
Ha disminuido su posición en 13 puestos en Access (en relación al último mes)
Gráfica de Access

Fechas solapadas o superpuestas

Publicado por tejure (3 intervenciones) el 02/06/2021 22:25:44
Gracias por vuestra atención, dedicacion y respuestas.
Creo que me he explicado mal en mi mensaje. Necesito el algoritmo para chequear entre varios periodos indeterminados a seleccionar mediante una consulta que establece un rango amplio, el periodo que estoy introduciendo actualmente.
Me es dificil explicar esto con palabras, pondré un grafico a ver si consigo hacerme entender:

FechasSolapadas

En el grafico necesito el valor máximo de la linea roja con cada periodo de tiempo para no excederme nunca de un máximo que se determina por la aplicación antes de hacer la consulta.

Estoy trabajando en ello mediante matrices. No se si será excesivo.
Si consigo algo en claro lo pondré en este mismo hilo.
Gracias a todos.
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

Fechas solapadas o superpuestas

Publicado por jose (830 intervenciones) el 03/06/2021 12:21:45
QuIERES decir que quieres saber en cuantos procesos se ha trabajado cada dia ?

si es asi se puede hacer facil con la funcion que te facilite:


recorres el periodo y vas poniendo FA inicio FB FINAL
rfecorres los procesos
Y FI INICIO PROCESO FF FIN proceso
llamas a la funcion
si da mas de uno vas sumando 1 al dia FA ,
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: 8
Ha disminuido su posición en 13 puestos en Access (en relación al último mes)
Gráfica de Access

Fechas solapadas o superpuestas

Publicado por tejure (3 intervenciones) el 03/06/2021 14:12:48
No, no es exactamente eso,
Por Ejemplo:
Periodo total que se va a analizar: 2 meses (Posteriormente es variable según coyuntura)
Rango minimo de tiempo que se analizaa: Duración mínima de proceso un día, máximo indterminado, aprox. 30 días.
Cada proceso ( determinado por fecha de fin y final) se va introduciendo en base de datos conforme se va conociendo.
Cada vez que se introduzca un proceso, debe de cantar cuando un solo día de cualquier periodo de tiempo de ese proceso, exceda el máximo establecido, que pueden ser 10 o 15 aprox., en que pueden concurrir o solaparse días de dístintos procesos.

Creo que el gráfico lo explica muy bien ( La zona de time periods), teniendo en cuenta que en el eje de ordenadas tenemos distintas personas que ejecutan procesos , y que entre los asignados a una persona, no pueden haber solapamientos, y en el eje de abcisas donde van días, no puede haber solapamientos superores a 10 o 15 ( a determinar) de entre los periodos que están ejecutando entre todas las personas.
Es un poco enrevesado. Siento no saberme explicar mejor.
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

Fechas solapadas o superpuestas

Publicado por jose (830 intervenciones) el 03/06/2021 20:05:32
Me gustaria ayudarte , pero no acabo de entender lo que pretendes ni en que consiste la actividad.
porque estas relacionando, procesos, tiempos, personas , pero no veo a donde quieres llegar
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