Dia festivo en vacaciones

20/04/2004 - 19:33 por pepesoto | Informe spam
Hola al grupo, buenos dias.

En Mexico, se dan dias de vacaciones a los trabajadores en dias
laborables. En Mexico hay dias de descanso obligatorio y esos no
cuentan como dias habiles, ¿me explico?

Si por ejempo yo descanso los martes y me tocan 12 dias de vacaciones
y se atravieza el 1 mayo que es descanso obligatorio mi periodo
vacacional seria:

1er. dia de vacaciones: 21 abril 2004
Dias de descanso que se atraviesan: martes 27 abril y martes 4 mayo
Dia de descanso obligatorio que se atravieza: sab 1 mayo
Dia final de vacaciones: mierc 5 mayo
Total de dias habiles: 12

Es obvio que en dias naturales, el trabajador tomara mas que los
habiles, es logico, x eso ese dato no es imporante.

Hace tiempo un amigo de este Foro, me regalo esta funcion:

Function DiaLab_conSabados1(inicial As Date, dias As Integer, festivos
As Range, Optional diadescanso As Long = 1) As Date
'Función elaborada por Cesar Mera
'Version 2.0
Dim final As Date
If festivos.Columns.Count > 1 Then 'Si el rango de fechas de festivos
es mayor a
'una columna se arroja el valor de 0
DiaLab_conSabados1 = final
Exit Function
End If
If Weekday(inicial) = diadescanso Then inicial = inicial + 1 'Valida
que el primer día no sea Domingo
final = inicial + DateDiff("d", inicial, inicial + dias - 1) 'Calcula
la fecha final en dias comunes
dia = inicial
Do While dia <= final 'Este loop cuenta cuantos domingos hay en el
numero de dias comunes
'y le aumenta ese numero de días a la fecha final
If Weekday(dia) = diadescanso Then final = final + 1
dia = dia + 1
Loop
If Weekday(final) = diadescanso Then final = final + 1 'Valida que la
fecha final no sea un Domingo
'de ser asi aumenta un día a la fecha final
For Each Row In festivos.Rows 'Cuenta el numero de festivos entre la
fecha
If IsDate(Row) Then 'inicial y final y agrega esos días a la fecha
final
If inicial <= Row And final >= Row Then
If diadescanso <> Weekday(Row) Then final = final + 1
If Weekday(final) = diadescanso Then final = final + 1
End If
End If
Next Row
Call valida(final, festivos, diadescanso) 'Valida que la respuesta no
sea ni un Domingo ni un festivo
'aumenta fechas hasta que la respuesta sea día hábil
DiaLab_conSabados1 = final
End Function

Sub valida(final As Date, festivos As Range, diadescanso As Long)
Dim Esfestivo As Boolean
For Each Row In festivos.Rows
If IsDate(Row) And Row = final Then
Esfestivo = True
End If
Next Row
If Weekday(final) = diadescanso Or Esfestivo Then 'Si la respuesta es
Domingo o festivo
final = final + 1 'aumenta un día a la respuesta
Call valida(final, festivos, diadescanso) 'y vuelve a hacer la
verificación
End If
End Sub

Pero no esta sumando el dia festivo (o de descanso obligatorio)... No
se porque. Cualquier ayuda sera agradecida
=;)
 

Leer las respuestas

#1 Servando
20/04/2004 - 20:12 | Informe spam
Pp:
Pues, copie la funcion y la probe... hizo el calculo bien.

(Te envie a tu direccion de correo un ejemplo)

Saludos
Servando Villalon

Hola al grupo, buenos dias.

En Mexico, se dan dias de vacaciones a los trabajadores


en dias
laborables. En Mexico hay dias de descanso obligatorio y


esos no
cuentan como dias habiles, ¿me explico?

Si por ejempo yo descanso los martes y me tocan 12 dias


de vacaciones
y se atravieza el 1 mayo que es descanso obligatorio mi


periodo
vacacional seria:

1er. dia de vacaciones: 21 abril 2004
Dias de descanso que se atraviesan: martes 27 abril y


martes 4 mayo
Dia de descanso obligatorio que se atravieza: sab 1 mayo
Dia final de vacaciones: mierc 5 mayo
Total de dias habiles: 12

Es obvio que en dias naturales, el trabajador tomara mas


que los
habiles, es logico, x eso ese dato no es imporante.

Hace tiempo un amigo de este Foro, me regalo esta


funcion:

Function DiaLab_conSabados1(inicial As Date, dias As


Integer, festivos
As Range, Optional diadescanso As Long = 1) As Date
'Función elaborada por Cesar Mera
'Version 2.0
Dim final As Date
If festivos.Columns.Count > 1 Then 'Si el rango de


fechas de festivos
es mayor a
'una columna se arroja el valor de 0
DiaLab_conSabados1 = final
Exit Function
End If
If Weekday(inicial) = diadescanso Then inicial = inicial


+ 1 'Valida
que el primer día no sea Domingo
final = inicial + DateDiff("d", inicial, inicial + dias -


1) 'Calcula
la fecha final en dias comunes
dia = inicial
Do While dia <= final 'Este loop cuenta cuantos domingos


hay en el
numero de dias comunes
'y le aumenta ese numero de días a la fecha final
If Weekday(dia) = diadescanso Then final = final + 1
dia = dia + 1
Loop
If Weekday(final) = diadescanso Then final = final +


1 'Valida que la
fecha final no sea un Domingo
'de ser asi aumenta un día a la fecha final
For Each Row In festivos.Rows 'Cuenta el numero de


festivos entre la
fecha
If IsDate(Row) Then 'inicial y final y agrega esos días


a la fecha
final
If inicial <= Row And final >= Row Then
If diadescanso <> Weekday(Row) Then final =


final + 1
If Weekday(final) = diadescanso Then final =


final + 1
End If
End If
Next Row
Call valida(final, festivos, diadescanso) 'Valida que la


respuesta no
sea ni un Domingo ni un festivo
'aumenta fechas hasta que la respuesta sea día hábil
DiaLab_conSabados1 = final
End Function

Sub valida(final As Date, festivos As Range, diadescanso


As Long)
Dim Esfestivo As Boolean
For Each Row In festivos.Rows
If IsDate(Row) And Row = final Then
Esfestivo = True
End If
Next Row
If Weekday(final) = diadescanso Or Esfestivo Then 'Si la


respuesta es
Domingo o festivo
final = final + 1 'aumenta un día a la respuesta
Call valida(final, festivos, diadescanso) 'y vuelve a


hacer la
verificación
End If
End Sub

Pero no esta sumando el dia festivo (o de descanso


obligatorio)... No
se porque. Cualquier ayuda sera agradecida
=;)
.

Preguntas similares