Access - Fecha entrega con festivos municipales

 
Vista:

Fecha entrega con festivos municipales

Publicado por J. Carrion (2 intervenciones) el 22/01/2019 12:27:16
Hola y gracias por vuestro tiempo.

En mi trabajo estoy utilizando la función adjunta (Public Function cuentoDias) para calcular el día de entrega en función de la fecha inicial, días de envió y festivos nacionales. El tema es un poco más complicado pero lo simplifico para que lo entendáis. El problema lo tengo cuando tengo que tener en cuenta los festivos municipales (aprox. 8000). La tabla TFestivos pasa de tener un solo campo con los festivos nacionales a una tabla con un campo municipio de 8.000 registros y 15 campos ya que hay municipios con 15 festivos (nacionales, provinciales y locales)
Algo así (con fechas inventadas)
Municipio Festivo1 Festivo2 Festivo3 Festivo4 Festivo5 Festivo6
Barcelona 01/01/2019 05/01/2019 15/08/2019 16/08/2019 17/08/2019 18/08/2019
Madrid 05/01/2019 06/01/2019 08/05/2019 09/05/2019 10/05/2019 11/05/2019
Zaragoza 15/01/2019 30/06/2019 20/08/2019 10/10/2019 30/11/2019 20/01/2020

¿¿¿ Sabéis como podría adecuar la función siguiente a las nuevas exigencia???? festEnTabla = DLookup("[DFest]", "TFestivos", "[DFest]=#" & Format(fTmp, "mm/dd/yy") & "#")
He probado muchas cosas pero sin éxito, básicamente el tema está en adecuar la anterior búsqueda al nuevo entorno.
Gracias de antemano.


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
Public Function cuentoDias(vfIni As Date, vDias As Integer) As Date
Dim i As Integer
Dim fTmp As Date
fTmp = vfIni
For i = 1 To vDias
Dim festEnTabla As Variant
festEnTabla = DLookup("[DFest]", "TFestivos", "[DFest]=#" & Format(fTmp, "mm/dd/yy") & "#")
If Not IsNull(festEnTabla) Then
fTmp = fTmp + 1
i = i - 1
Else
If Weekday(fTmp) = vbSaturday Or Weekday(fTmp) = vbSunday Then
fTmp = fTmp + 1
i = i - 1
Else
fTmp = fTmp + 1
End If
End If
Next
For i = 1 To 1
festEnTabla = DLookup("[DFest]", "TFestivos", "[DFest]=#" & Format(fTmp, "mm/dd/yy") & "#")
If Not IsNull(festEnTabla) Then
fTmp = fTmp + 1
i = i - 1
Else
If Weekday(fTmp) = vbSaturday Or Weekday(fTmp) = vbSunday Then
fTmp = fTmp + 1
i = i - 1
End If
End If
Next
cuentoDias = fTmp
End Function
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

Fecha entrega con festivos municipales

Publicado por anonimo (3319 intervenciones) el 23/01/2019 10:06:34
No me parece optimo ese diseño para obtener un resultado adecuado a lo que se pretende.

Disponiendo de una tabla con localidades, se crearía otra con festivos:
Esta tabla (festivos) tendría el ID de la localidad, la fecha (el día festivo) y a mayores la descripción (por ejemplo 'el día del santo del alcalde') y si se desea agilizar el calculo un posible desplazamiento, el desplazamiento se calcularía una única vez y se utilizaría todo el año.

¿En que consistiría el 'desplazamiento'? …. un valor calculado (en base a esa fecha y el resto de fechas hábiles) que se sumaria a la fecha para que devolviese la adecuada (si el viernes es festivo y no se trabaja sábado y domingo, siendo el idóneo el siguiente lunes, seria un TRES, si se desease adelantar al jueves seria un MENOS UNO)

Un simple DLookup condicionado o la búsqueda en un conjunto de registros o el método que se aplicase por comodidad seria muy fácil de implementar.

Por cierto, en esa estructura no importa si los festivos son dos o veinte y se puede condicionar aun mas si se define una categoría (uno si es local, dos si es regional, tres nacional, cuatro si es mundial …….. ).
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

Fecha entrega con festivos municipales

Publicado por j.carrion (2 intervenciones) el 23/01/2019 11:54:35
Hola;


Gracias por el interés, olvídate de lo del desplazamiento, lo que necesito crear una función en acces que dada un fecha inicial y un número de días me calcule la fecha final teniendo en cuento sábados, domingos y festivos.

La función que he expuesto anteriormente, Public Function cuentoDias(vfIni As Date, vDias As Integer) As Date; ya me realiza el cálculo correcto pero con una única tabla(TFestivos) con un campo (Dfest) con los festivos. Pero el problema que tengo es que tengo que crear una función con una nueva variable que llamaremos localidad, cada localidad tendrá sus festivos propio, y por tanto, paso de tener una tabla de festivos con un único campo y tanto registros como festivos a una tabla con unos 5.800 registros y 15 campos con los festivos de cada localidad.
No se como adecuar la función DLook up a la nueva situación.
La función DLookup("[DFest]", "TFestivos", "[DFest]=#" & Format(fTmp, "mm/dd/yy") & "#")

Debería modificar el argumento "[DFest]=#" & Format(fTmp, "mm/dd/yy") & "#") ya que ahora no tengo una tabla con un único campo sino que tengo una tabla con 15 campos, alguno vacíos. Pero mis conocimiento no dan para tanto. Había pensado en crear una variable que concadena la localidad y los festivos y así obtendría una única tabla con 5.800 localidades*15festivos=87.000 registros al estilo Barcelona01/01/2019, Barcelona03/01/2019, Madrid01/01/2019 y podría utilizar la función anterior.
lo sé es un poco cutre pero no se me ocurre nada mejor.
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