Como diferenciar un día feriado

Quisiera saber si hay alguna forma que al cargar horas de un día festivo me las detecte diferente a un día normal . Por ejemplo si ingreso a las 21:00hs de 31 de diciembre y salgo de trabajar a las 05:00hs me tome desde las 00:00hs hasta las 05:00hs como feriado

3 Respuestas

Respuesta
1

Le dejo este video de una librería que desarrollé para la República de Colombia, es más complejo que su pregunta, pero en el código está respuesta a su pregunta.

(196) Horas Extras y Recargos modelo en Access desprotegido - YouTube

¡Gracias! 

los descargue pero no me funciona por que tengo 64bits, solo puede descargar el modulo pero no puedo modificar días festivos de mi país argentina.

Voy a ver que puedo hacer

¡Gracias! 

me da este error

Private Sub HoraFinal_AfterUpdate()

Valorar algo sin conocer que hace y como se elaboró, es un "DISPARATE", para cálculos simples tiempo sobra. Cuando subí el video a YouTube pensé en facilitar la liquidación de horas extras en Colombia, pero SIN TABLAS DE FESTIVOS, ahí está el detalle. La idea era dar a conocer que mediante las funciones para determinar días festivos en un país se pudiera aplicar. Como Julián González NO sabe manejar Colecciones en VBA nada nuevo puede aportar.

Las funciones permiten, por ejemplo, liquidar horas extras con solo conocer la fecha y hora de entrada y hora de salida, no obliga la fecha de salida, asumiendo que NO puede haber una jornada superior a 24 horas. Estas son algunos casos que se pueden presentar

CASO 1 - Solo Extras

CASOII - Entra un día hábil y sale al siguiente día festivo o domingo

CASO III - Entra día NO laborable y sale día NO laborable (Puede ser el mismo día o siguiente día)

CASO IV - Entra día festivo y sale al día siguiente hábil

Es de anotar que cada caso contempla unas series de condiciones, no las expongo porque son bastantes.

Con llamar esta función fácilmente se obtiene si la fecha pasada como parámetro es festivo en un país. En este ejemplo voy a obtener si determinada fecha (entrada o salida) es festiva en Argentina. Sirve también para Excel.

DiaNoLaborable(10, 10), 2022)

Retorna VERDADERO porque corresponde en Argentina al 12 de octubre, que se traslada al lunes anterior, en este caso el día 10 de octubre si acontece martes o miércoles, si es jueves o viernes se traslada al siguiente lunes, pero si cae sábado o domingo no se modifica.

Ahora, la pregunta ¿Cuál es la aplicación que está desarrollando? Y así analizo que se puede aplicar. Como tiene mi correo puede ampliar sus dudas en este.

Respuesta

Que disparate. Mucho más sencillo. Primero voy a decirte los casos que se te pueden dar

1º Que entre y salga en el mismo día

2º Que entre un día y salga en la madrugada del siguiente, y que no sea festivo. Como no dices nada, he supuesto que no lo contabilizas

3º Que entre la víspera de un feriado, y salga en el día feriado.

Si tengo la tabla Festivos, pongo dos para el ejemplo

Y tengo la tabla Tabla1 con la que hago un formulario

1º Caso.- Entra y sale en el día.- En Horas Día te pone las horas que ha trabajado ese día

2º Caso.- Entra un día pero sale en la madrugada del siguiente que no es festivo.- En Horas día te pone las que ha trabajado ese día, ( no sé si quieres que te contabilice las que ha trabajado el día siguiente, por eso no muestra nada)

3º Caso.- Entra un día, sale en la madrugada del siguiente y éste es feriado(festivo). Puedes ver en los registros 3 y 4 que en Horas día te pone las del día de entrada y en Horas Festivo las que ha trabajado en el siguiente que SÍ es festivo.

Y el código no puede ser más sencillo. En las propiedades del cuadro de texto HoraSalida, en Eventos-Después de actualizar le tengo puesto

Private Sub HoraSalida_AfterUpdate()
If HoraSalida > HoraEntrada And HoraSalida < 1 Then
HorasDia = HoraSalida - HoraEntrada
ElseIf HoraSalida < HoraEntrada Then
HorasDia = 1 - HoraEntrada
    If DCount("*", "festivos", "festivo=forms!tabla1!fechaentrada+1") = 1 Then
    HorasFestivo = HoraSalida
    End If
End If
End Sub

Me explico

Primera línea, si la hora de salida es mayor que la hora de entrada y la hora de salida es menor que las 24:00, horas día es la diferencia entre la entrada y la salida

Si hora de salida es menor que la hora de entrada, es decir, la hora de salida está ya en el día siguiente, las horas del día serían 1( que equivale a 24 horas) menos la hora de entrada

Y el último if es por si el día siguiente es festivo, entonces que rellena el cuadro Horas Festivo.

Discúlpame pero no me podría enviar ese ejemplo por que no puedo hacerlo por favor. Te lo agradecería

Si quieres, repito, si quieres, mándame un mensaje ( sólo el mensaje) a [email protected] y te mando el ejemplo.

Si lo haces, en el Asunto del mensaje pon tu alias Albarracin69, ya que si no sé quien me escribe ni los abro.

Respuesta

Partiendo del supuesto de que la jornada ha de ser inferior a 24 horas (si dura 24 o más horas ha de utilizarse la fecha + la hora) una forma de calcularlo es:

= (Hora_salida - (hora_Salida < Hora_entrada) ) - hora de entrada

Se basa en que si la hora de salida es inferior a la de entrada se 'sale' al día siguiente por eso se le resta (-1 ) que es la respuesta de Access al comparar las horas y matemáticamente -(-1) equivale a +1.

Más fiel es utilizar la función DateDiff y calcular en minutos:

Hora_entrada= Cdate("20:30")
Hora_salida= Cdate("4:30")
? Datediff("n", hora_entrada, hora_salida -(hora_salida < hora_entrada))

El resultado lo devuelve en minutos, se pueden acumular los de la semana mes o ciclo y si el resultado fuera 12345 (minutos) se pasa a formato horas y minutos así:

Minutos = 12345
? Minutos\60 & format(minutos mod 60,"\:00")
205:45

205 horas son (205\24 =) 8 días y ( 205 mod 24 =) 13 horas 

¿Pero con esta fórmula como toma el día feriado?

el ejemplo anterior es el que a mi entender  el el que corresponde

Define que es un día feriado, porque se puede calcular si es un domingo, pero hay entornos laborables que también cuentan los sábados y además están los días que se acuerdan como no laborables según sea el país y la profesión.

Para unos (los fines de semana) no hay misterio, pero para los otros se necesita una tabla y si hay una tabla de no-laborables ¿por qué no añadir los fines de semana?

Disponiendo de esa tabla es sencillo ver si el día en discusión está en esa tabla.

Si lo está, ¿cómo se evalúa el día?, si la jornada completa pertenece a ese día es sencillo, pero si esta entre dos días (sea porque comienza o porque finaliza ese turno laboral) se aplica a todo el turno o se particionan las horas...

Hay que definir con absoluta precisión el tratamiento de las horas, en ese entorno de trabajo porque (aunque sea con los dedos o con palotes) todos saben hacer las cuentas y la imprecisión puede generar conflictos.

Un día festivo como el 1 de enero o 1de mayo

Si solo son esas dos fechas la solución es corta, pero con una sola también es indispensable algo más que las horas.

Para conocer si una parte (o toda) la jornada pertenece a un día festivo, se ha de cumplir que por lo menos la entrada o la salida está dentro del intervalo, algo como:

If Format([dia entrada], "ddmm") = "0101" Or Format([dia salida], "ddmm") = "0101" Then ...

Para el primero de mayo la referencia seria "0105"

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas