Access - Días Festivos - Obtener el primer registro según el valor de un campo

   
Vista:

Días Festivos - Obtener el primer registro según el valor de un campo

Publicado por Vicente (7 intervenciones) el 11/02/2016 09:55:21
Hola,

Tengo que realizar una consulta para una base de datos que tengo en Access 2007, si me pueden ayudar:

El problema es que necesito saber el primer día laborable a partir de una fecha (y según mi horario laboral). Para ello he pensado crear una tabla festivos la cual tiene la siguiente estructura:

FESTIVOS
--------------
fecha (ordenados de mayor a menor por fecha)
festivos (puede tener tres valores o 'festivo' o 'fin de semana' o "laboral")

RETENCION
--------------
numero
fechapide (se relaciona con la de festivos)
(...)

Se relacionan por el campo fecha de las dos tablas, puede haber dos posibilidades:

- Si el campo festivos de Festivos es "fin de semana" o " festivo": Obtener la primera fecha que encuentre con el valor "laboral" o al menos los días que hay hasta esa fecha.

- Si el campo festivos es "laboral" pues que no haga nada porque estoy en un día laboral o en todo caso que me pase los días que hay hasta esa fecha que en este caso serían 0.


La verdad que no se si me estoy complicando mucho la vida o hay alguna otra forma de hacerlo.

Muchas gracias de antemano.!!

Saludos
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

Días Festivos - Obtener el primer registro según el valor de un campo

Publicado por Enrique Heliodoro (1663 intervenciones) el 11/02/2016 10:58:18
Yo crearía una tabla con las fechas no laborables y un campo (numérico) que indicase 'a partir de ella' los días que se añadirían para obtener el laborable que fuese superior (o inferior) mas cercano.

Supongamos que la fecha se corresponde con un sábado (en el ejemplo no es laborable) al que le siguen un domingo y un lunes festivo

Fecha 1/1/2050 ---- Dias = (sábado + domingo + lunes) = 3
Si a esa fecha le sumamos tres días se convertiría en el 4/1/2050 que seria el martes siguiente

En esa tabla también estarían :
DIA --- Incremento
2/1/2050 --- 2 (domingo)
3/1/2050 --- 1 (lunes no laborable)
8/1/2050 --. 2 (sábado)
9/1/2050 --- 1 (domingo)
......


Bastaria un simple DLookup al que se le pasaría la fecha y que devolvería el numero de días a sumar:

Fecha_Futura =[fecha calculada como futura] + Nz(Dlookup ("Incremento", "Tabla_Festivos", "Dia = " & CDbl( [fecha calculada como futura]) , 0)

Nz ==> nos permite devolver un cero si no localiza la fecha
DLookup ==> función incorporada que obtiene un dato de una tabla o conjunto (puede devolver un NULL, por lo que se corrige con NZ)
CDbl ==> Funcion incorporada que convierte un dato de 'fecha Access' en un numero

Si el dato 'no es una fecha Access' sino un texto con una fecha, dado como interpreta Access a las fechas (su formato) se debería aplicar al texto la función CDate para convertirlo en 'una fecha Access'.

No quiero dejar en el tintero la forma básica de utilizar fechas, añadir (#) antes y después (#1//1/2050#) pero puede ser incorrectamente interpretada según la configuración regional de la maquina y lo adecuado seria convertirla al formato americano (mm/dd/yyyy)
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
Imágen de perfil de douglas

Días Festivos - Obtener el primer registro según el valor de un campo

Publicado por douglas (280 intervenciones) el 11/02/2016 21:39:14
No sería más sencillo con un IF

1
2
3
4
5
6
7
8
9
10
'ALGO ASI PODES HACER PARA LOS SABADOS Y DOMINGOS
 
Dim D as integer
d=1
WHile D > 0
IF (Datepart("w", Fechabuscada) < 6 And Datepart("w", Fechabuscada) < 7 = True Then
d=d-1
End IF
Fechabuscada= Fechabuscada+1
Wend


Feriados es cuestion de hacer una base de feriados y una consulta filtrada por el mes vigente

Dlookup


En algunos lugares el domingo cuenta como 0 para el IF
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

Días Festivos - Obtener el primer registro según el valor de un campo

Publicado por Enrique Heliodoro (1663 intervenciones) el 11/02/2016 23:45:29
La función DatePart tiene mas parámetros de los que aquí se utilizan (en la ayuda de Access esa tan ignorada y menospreciada los explica incluso con ejemplos) es una forma de lograr que los días se ajusten a nuestros intereses.
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
Imágen de perfil de douglas

Días Festivos - Obtener el primer registro según el valor de un campo

Publicado por douglas (280 intervenciones) el 13/02/2016 23:46:25
y si hay más que indica la ayuda F1 como que el sabado es 7 y domindo es 1 pero para que filtre sabado y domingo es como lo puse
Simple y Sencillo.
Yo no los complico leyendo tonterias de ayudas que muchas veces los confunden.
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

Días Festivos - Obtener el primer registro según el valor de un campo

Publicado por Enrique Heliodoro (1663 intervenciones) el 14/02/2016 10:25:02
Lo que tu llamas 'tonterias' es lo que diferencia entre dar toda la información o dar información sesgada.

Suele suceder cuando no 'interesa' que los demás sepan tanto como uno (para generar dependencia) o porque no se sabe mas (también conocido como ignorancia).

Según la MENOSPRECIADA ayuda de Access la función DatePart puede utilizar hasta CUATRO parámetros:
...copiado de ella ...
Sintaxis

DatePart(intervalo, fecha[,primerdíasemana[, primerasemanaaño]])
.....

El primer dia de la semana (que es seleccionable a voluntad) nos permite tener la certeza absoluta de que se comenzara en lunes (y los sábados/domingos el seis y siete) o decirle que comienza en sábado y serian el uno y dos, con lo cual no existiría esa duda indecisa:.. En algunos lugares el domingo cuenta como 0 para el IF ... y se sabría que CUANDO NO SE UTILIZA, toma como referencia para el primer dia de la semana: el que exista en la CONFIGURACION REGIONAL de windows en la maquina que lo utilice.

Creia que este era un foro dirigido a programadores (no como pareces expresar: a tontos ignorantes que si les das informacion solo se lian) que sea el lector el que filtre la información y el que si quiere aprender acuda a la fuente (donde podrá constrastar la información) y si es uno de los clásicos de copio y pego .... que ponga un poco mas de interés o lo deje para otros.

Lamento que muchos crean que voy 'de listo' por dar amplia información, cuando lo único que pretendo es que avancen en el conocimiento, para que puedan hacer mejores aplicaciones.

Contra lo que si me enfrento es contra la información errónea y (dado su similitud) contra la información sesgada.
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
Imágen de perfil de douglas

Días Festivos - Obtener el primer registro según el valor de un campo

Publicado por douglas (280 intervenciones) el 15/02/2016 15:51:18
Pues a tu parecer Enrique acá todos son programadores expertos y vienen a consultar como hacer una consulta porque han tocado antes el F1 y investigaron y no le encontraron solución a su problema, o piensas que consultan una y otra vez las mismas cosas porque se han tomado el tiempo de googlear lo que buscan antes de preguntar.
Siempre que tuve una duda grande el f1 es teórico y no encontré la claridad en sus conceptos, hasta ver un ejemplo,
Es lo mismo que el doctor que lee mil libros y cuando llega a operar no sabe ni tomar el bisturí.

Es claro que si su ultima respuesta la hubiera dado de primero no pongo yo la mía, pero la tomaste utilizando la mía y mejorándola y quedo muy buena.
Entonces es claro que los mandas a investigar algo que solo tú estás viendo.

Saludos...
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

Días Festivos - Obtener el primer registro según el valor de un campo

Publicado por Enrique Heliodoro (1663 intervenciones) el 15/02/2016 18:23:10
Estas creando una realidad paralela a la real.

No se porque es tan dificultosa la lectura de la ayuda de Access y tan (al parecer sencillísima) la lectura con los mismos medios de las respuestas del foro.

En fin, tu has proporcionado una respuesta a la vez que planteado una duda, duda que surge de tener solo parte de toda la información disponible y publica (aunque sea 'a golpe de F1') y ello después de haber menospreciado no solo a una información que desconoces sino a quien tenia (en otro hilo) interés en conocer por lo menos 'lo nuevo' en una aplicación de la que tu (como todos, yo mismo incluido) somos simpes usuarios (es decir, que solo la conocemos un minimo).

En fin, el hecho en si mismo de que tu respuesta (a tus ojos) fue mejorada ¿no te hace suponer que no la conoces lo suficiente?

Cuando nacio Aceess la imagen era la de un bebe en pañales que jugaba con el paquete de Access y la ayuda asi esta enfocada (solo hay que 'mirarla sin miedo' y asi seguir aprendiendo)
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