Funcion que suma dias habiles...

09/02/2005 - 02:47 por pepesoto | Informe spam
Hola expertos, agradezco su orientacion. Cuando doy vacaciones a mis
trabajadores se las doy sobre dias laborales, o sea, no se toma en
cuenta su dia de descanso (domingos x ejemplo) ni los dias festivos de
descanso obligatorio x ley.

Por ejemplo: Un trabajador le tocan 17 dias de vacaciones, descansa los
sabados, un dia festivo es el 5 de febrero, entonces:

Dia 1 de vacaciones: 17 enero 2005. El dia 17 de vacaciones seria el 4
febrero (recuerden que el sabado no se cuenta x ser su dia de desc).
Los dias de descanso que se atraviesan son el sab 22, 29 ene y 5 feb,
que de casualidad es festivo tambien (mala suerte). Debe regresar al
trabajo el 6 de febrero.

Esta funcion que me regalo Cesar Mera de Colombia intenta hacer este
calculo:

Option Explicit

'Funcion que suma los dias habiles de vacaciones
'** ARGUMENTOS
'Fecha_Inicial = fecha a partir de la cual se empieza a contar
'Dias_Laborables = numeros de dias de vacaciones que le tocan que se
quieren contar
'Dias_Festivos = dias a omitir en la cuenta como fechas especiales
'Omitir_Dias = dia a omitir como dia de la semana de descanso
' Domingo = 1
' Lunes = 2
' etc...
' Sabado = 7

'Devuelve el dia habil siguiente como fecha
Public Function Dia_Laborable(ByVal Fecha_Inicial As Date, _
ByVal Dias_Laborables As Integer, _
ByVal Dias_Festivos As Range, _
ByVal Omitir_Dias As Range) As Date
Dim co1 As Integer
Dim r As Range
Dim Esfestivo As Boolean
Dim EsOmitido As Boolean
Dim Direccion As Integer

'Los dias laborables no pueden ser cero
If Dias_Laborables <> 0 Then
'Para saber si aumenta o disminuye la fecha
Direccion = 1
If Dias_Laborables < 0 Then Direccion = -1
Do
Esfestivo = False
EsOmitido = False
'Aumentamos o disminuimos en uno la fecha inicial
Fecha_Inicial = Fecha_Inicial + Direccion
'Buscamos en los dias festivos
For Each r In Dias_Festivos
If r.Value = Fecha_Inicial Then
'Si es festivo sale del ciclo
Esfestivo = True
Exit For
End If
Next r
'Si es festivo no es necesario buscar en dias omitidos
If Not Esfestivo Then
'Buscamos en dias omitidos en caso de que no sea festivo
For Each r In Omitir_Dias
If r.Value = Weekday(Fecha_Inicial) Then
'Si es omitido salimos del ciclo
EsOmitido = True
Exit For
End If
Next r
End If
'NO deber ser festivo ni omitido para incrementar
If Not Esfestivo And Not EsOmitido Then
co1 = co1 + 1
End If
DoEvents
'Continuamos mienstras sea menor a los dias_laborables
Loop While co1 < Abs(Dias_Laborables)
'Asignamos la fecha encontrada a la funcion
Dia_Laborable = Fecha_Inicial
Else
'Si es cero devuelve un error tipo #!VALOR¡
Dia_Laborable = ""
End If

End Function

El problema es que esta funcion me devuelve como fecha final el dia 6
de febrero, en lugar del 4. Es decir suma dias al final, y no
encuentro el por qué... Se que esta ahi pero no lo veo. Gracias
anticipadas...
 

Leer las respuestas

#1 Héctor Miguel
09/02/2005 - 07:16 | Informe spam
hola, pepe !

... doy vacaciones... sobre dias laborales... no se toma en cuenta su dia de descanso... ni... festivos... x ley.
... ejemplo: ... 17 dias de vacaciones, descansa los sabados, un dia festivo es el 5 de febrero, entonces:
Dia 1 de vacaciones: 17 enero 2005. El dia 17 de vacaciones seria el 4 febrero
(recuerden que el sabado no se cuenta x ser su dia de desc) [...]
Esta funcion que me regalo Cesar Mera de Colombia intenta hacer este calculo [...]
'Devuelve el dia habil siguiente como fecha
Public Function Dia_Laborable(ByVal Fecha_Inicial As Date, _
ByVal Dias_Laborables As Integer, _
ByVal Dias_Festivos As Range, _
ByVal Omitir_Dias As Range) As Date [...]
... problema es que esta funcion me devuelve como fecha final el dia 6 de febrero, en lugar del 4 [...]



creo que se trata de una cuestion de 'optica' :))
1.- dia 1 de vacaciones: 17 de enero de 2005
2.- total dias 'laborales' de vacaciones: 17
3.- 'ultimo' dia [en que el trabajador sigue de vacaciones]: 4 de febrero de 2005 [VIERNES]
4.- 'debiera presentarse a trabajar' el dia 5 de febrero de 2005 [SABADO]
5.- al ser 'su dia de descanso'... su obligacion de presentarse 'se traslada' a: 6 de febrero de 2005 [DOMINGO]

=> si observas la linea ANTES del 'Public Function Dia_.etc. etc. etc. DICE:
=> 'Devuelve el dia habil siguiente...
=> la funcion... NO devuelve ->el ultimo dia de vacaciones<- sino... ->el dia 'del regreso' al trabajo<-

si en algo me he equivocado al [tratar de] 'interpretar' tu consulta y la funcion... ¿comentas?
saludos,
hector.

Preguntas similares