Sumar días laborables a partir de una fecha en formulario de access

no tengo muy claro el access, pero me tope con este problema y no encuentro la solucion, tengo una formulario donde debo ingresar una fecha de inicio (fecha de inicio) de operacion y debo ponerle una fecha final (fecha final) de la operacion trancurrido una cantidad de dias laborables (dias) determinada, en excel la he resuelto con  "fecha final=DIA.LAB.INTL(fecha inicio;dias;11)-1". Pero no se como resolverlo en access. Estos datos me deben quedar guardados en la tabla correspondiente del formulario

3 Respuestas

Respuesta
1

Hace un tiempo elaboré las funciones para calcular días hábiles en Colombia. Le dejo este ejemplo de uso:

La ventaja es que no requiere almacenar los festivos en tablas ni rangos como Excel. Si me indica su país de procedencia y me indica cuáles son los festivos fijos y móviles si los hay caso Colombia, le preparo un ejemplo. Puede enviar la información a [email protected] 

¡Gracias! Por su tiempo, no necesito descartar los días festivos o feriados solo los días domingos

Saludos cordiales

Carlos

Le complemento con esta función

 Public Function FechaSinDomingos(ByVal fecha As Date, ByVal dias As Integer) As Date
    Dim diasTranscurridos As Integer
    Dim fechaNueva As Date
    fechaNueva = fecha
    Do While diasTranscurridos < dias
        fechaNueva = fechaNueva + 1
        If Weekday(fechaNueva) <> vbSunday Then
            diasTranscurridos = diasTranscurridos + 1
        End If
    Loop
    FechaSinDomingos = fechaNueva
End Function

Salida en la ventana de inmediato

¿

¿
? FechaSinDomingos(date, 15)
10/05/2023 

Tenga cuidado de utilizar format(fecha,"dddd") para obtener el nombre del día es un mal hábito de programación, imagínese que debe enviar su aplicación a USA, va a obtener un resultado erróneo.

Respuesta

Se supone que el sábado no es laborable. Por ejemplo si tengo un formulario donde le digo que me calcule los laborables

Luego pongo la fechainicial,y los días

Puedes ver que el cursor aún está en el control Dias. Cuando pulso Enter

No me ha contado el sábado 22, domingo 23, ni el sábado 29 y domingo 30.

El código del evento Después de actualizar del cuadro de texto Dias es

Private Sub Dias_AfterUpdate()
If Elegir = "Naturales" Then
FechaFinal = FechaInicial + Dias
Else
Dim c As Integer, Festivos As Integer
For c = 1 To Dias
If Format(FechaInicial + c, "dddd") = "domingo" Or Format(FechaInicial + c, "dddd") = "sábado" Then
Festivos = Nz([Festivos], 0) + 1
End If
Next
FechaFinal = FechaInicial + Dias + Festivos
If Format([FechaFinal], "dddd") = "sábado" Then
FechaFinal = FechaFinal + 2
ElseIf Format([FechaFinal], "dddd") = "domingo" Then
FechaFinal = FechaFinal + 1
End If
End If
End Sub

He tratado de que el proceso sea lo más didáctico posible, ya que se podría acortar

¡Gracias! Julián

Por tu tiempo, y te comento que el día sábado para mi es laborable, veré de ponerlo en practica y te comento como me fue, y si me surge una duda pediré más ayuda

Saludos Cordiales

Carlos

Buen día Julián, mira esta genial, y funciona bien, pero no encuentro la forma de agregar que cuente los días sábados como día laborables, por otro lado me encontré que cualquiera de los dos métodos ya sea Laborables o Naturales me arroja el mismo resultado,. ¿Podrías ayudarme?

Entonces es más sencillo, pero te advierto que los sindicatos rodearán tu casa y te acusarán de explotador (Es broma)

Basta con que dejes el código como( suponiendo que no tienes en cuenta el combinado)

Private Sub Dias_AfterUpdate()
Dim c As Integer, Festivos As Integer
For c = 1 To Dias
If Format(FechaInicial + c, "dddd") = "domingo" Then
Festivos = Nz([Festivos], 0) + 1
End If
Next
FechaFinal = FechaInicial + Dias + Festivos
If Format([FechaFinal], "dddd") = "domingo" Then
FechaFinal = FechaFinal + 1
End If
End Sub

De todas formas, si quieres, repito, si quieres, mándame un mensaje (sólo el mensaje) a [email protected] y te mando varios ejemplos, que es como se ve mejor.

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

¡Gracias! En un rato te envío un correo, pero te comento algo que no se si soy yo o es lo que me enviaste, para ser claro te envío una captura

Me da un error si sumo 14 días y 15 días me da la misma fecha y debería ser 9-5-23

Respuesta

Una función que añade la fecha que se le pase como primer parámetro, incrementada en el numero de días que se le pase como segundo parámetro y que no cuenta los domingos.

Public Function UnaFecha(XFecha As Date, Ndias As Long) As Date
If Not IsDate(XFecha) Or Ndias < 1 Then Exit Function
Do
XFecha = XFecha + 1
Ndias = Ndias + (Format(XFecha, "w") > 1)
If Ndias = 0 Then Exit Do
Loop
UnaFecha = XFecha
End Function

Primero se verifica que la fecha es valida y que hay cuando menos un día a incrementar

Tras ello inicia un bucle que incrementa la fecha día a día y decrementa el contador de días a añadir si no es domingo, finaliza al llegar a cero el contador.
Devuelve la fecha calculada

En la ventana de inmediato:

?UnaFecha("4/18/2023",14)
04/05/2023
?UnaFecha("4/18/2023",15)
05/05/2023

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas