** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Buscando funcion de Chea.....
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoBuscando funcion de Chea.....

 Responder Responder
Autor
Mensaje
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2082
Enlace directo a este mensaje Tema: Buscando funcion de Chea.....
    Enviado: 01/Septiembre/2019 a las 15:38
Estoy buscando una funcion en particular de Chea, llamada creo DiasHabiles.
He encontrado varias versiones de esta, pero la que tiene encuenta  o no los sabados(true o false) no la encuentro, y los enlaces que encuentro estan caidos. A ve si alguno la tiene por hay.....

Saludos
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 1033
Enlace directo a este mensaje Enviado: 01/Septiembre/2019 a las 16:29
A ver si este hilo te sirve de guía:

- https://microsoft.public.es.access.narkive.com/Me8b8ije/formula-para-calculo-de-dias-habiles

Pero si la función tiene en cuenta los domingos, se puede alterar para que también tenga en cuenta los sábados (o no).


Editado por pitxiku - 01/Septiembre/2019 a las 16:29
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2082
Enlace directo a este mensaje Enviado: 01/Septiembre/2019 a las 17:26
Creo que ya he andado por todos los hilos de todas la web sobre este tema jijijiji, en particular es la que pones he intentado modificarla para que de una forma facil me permita incluir en la cuenta los sabado o no, con un bolean como parámetro de la funcion por ejemplo, pero no lo logro....
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 11092
Enlace directo a este mensaje Enviado: 01/Septiembre/2019 a las 17:48
Entonces, según relatas, si en vez de buscar te hubieras puesto ya la tendrías hecha. LOL

¿Y si la hacemos?
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2082
Enlace directo a este mensaje Enviado: 01/Septiembre/2019 a las 19:08
La funcion que utilizo ahora es esta y funciona correctamente. Esta sacada de aqui y modificada.

A la fecha dada le suma x dias y calcula el siguiente dia habil quitando sabados, domingos y festivos de una tabla.

Lo que pretendo es, de una forma facil metiante otro parametro boleano en la funcion que el sabado sea festivo o no.....

Public Function SiguienteDiaHabil2(dFecha As Date, Dias As Integer) As Date
'Le pasamos la fecha y los dias que queremos sumarle

    Dim dIntermedio As Date, iCuenta As Integer
    
    'Sumamos fecha mas dias
    Dim varFechaMasDias As Date
    varFechaMasDias = dFecha + Dias
    'MsgBox varFechaMasDias
    
    
    'dIntermedio = DateAdd("d", 1, dFecha)
    dIntermedio = DateAdd("d", 1, varFechaMasDias)  'Le pasamos la fecha mas dias y empieza el calculo
    'MsgBox dIntermedio
    
    iCuenta = DCount("DiaCerrado", "tbDiaCerrado", "DiaCerrado=#" & Format(dIntermedio, "mm/dd/yyyy") & "#")
    If Weekday(dIntermedio, vbMonday) = 6 Or Weekday(dIntermedio, vbMonday) = 7 Then
        dIntermedio = SiguienteDiaHabil(dIntermedio, 0) 'Ponemos 0 ya que los dias se los hemos pasado y sumado anteriormente
    ElseIf iCuenta > 0 Then
        dIntermedio = SiguienteDiaHabil(dIntermedio, 0) 'Ponemos 0 ya que los dias se los hemos pasado y sumado anteriormente
    End If
    SiguienteDiaHabil2 = dIntermedio
    '+++++++++++++++++++++
    'MsgBox SiguienteDiaHabil
    Me.FechaLimiteDevolucion = SiguienteDiaHabil2
End Function

Actualizado, tenia un fallo la funcion faltaba    , 0) 'Ponemos 0 ya que los dias se los hemos pasado y sumado anteriormente



Editado por rokoko - 01/Septiembre/2019 a las 20:48
Arriba
guarracuco Ver desplegable
Moderador
Moderador
Avatar

Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3046
Enlace directo a este mensaje Enviado: 01/Septiembre/2019 a las 19:32
Y si almacena los días hábiles en una tablita?
https://tucondominioaldia.net
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2082
Enlace directo a este mensaje Enviado: 01/Septiembre/2019 a las 19:37
Publicado originalmente por guarracuco guarracuco escribió:

Y si almacena los días hábiles en una tablita?

Con que objetivo??  Todos años habria que cambiar esos dias, de la otra forma, son unos pocos festivos al año que la mayoria se repetiarian e excepcion de semana santa en España....

Saludos
Arriba
guarracuco Ver desplegable
Moderador
Moderador
Avatar

Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3046
Enlace directo a este mensaje Enviado: 01/Septiembre/2019 a las 20:14
Quise decir,los festivos.
Que lógica estas utilizando para saber cuando un sábado es festivo?
https://tucondominioaldia.net
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 1033
Enlace directo a este mensaje Enviado: 01/Septiembre/2019 a las 20:39
Más o menos (escrito aquí directamente, ahí que puede haber fallos):


Public Function SiguienteDiaHabil(dFecha As Date, ContarSabados As Boolean) As Date
    Dim dIntermedio As Date, iCuenta As Integer
    dIntermedio = DateAdd("d", 1, dFecha)
    iCuenta = DCount("Anyo", "DiasFestivos", "Fecha=#" & Format(dIntermedio, "mm/dd/yyyy") & "#")
    If ContarSabados And (Weekday(dIntermedio, vbMonday) = 6) Then
        dIntermedio = SiguienteDiaHabil(dIntermedio, ContarSabados)
    ElseIf Weekday(dIntermedio, vbMonday) = 7 Then
        dIntermedio = SiguienteDiaHabil(dIntermedio, ContarSabados)
    ElseIf iCuenta > 0 Then
        dIntermedio = SiguienteDiaHabil(dIntermedio, ContarSabados)
    End If
    SiguienteDiaHabil = dIntermedio
End Function
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2082
Enlace directo a este mensaje Enviado: 01/Septiembre/2019 a las 20:52
Publicado originalmente por guarracuco guarracuco escribió:

Quise decir,los festivos.
Que lógica estas utilizando para saber cuando un sábado es festivo?

Pues en este caso ese sabado deberia ir en la tabla de festivos, si consideramos el sabado laborable en la funcion.
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2082
Enlace directo a este mensaje Enviado: 01/Septiembre/2019 a las 22:03
ClapClapPitxiku, la he probado un poco y parece que funciona correctamente, la probare mas detalladamente y a ver si la adapto lo de sumarle X Dias.

Edito:
 

Y asi parece que tambien, sumandole x dias, por ejemplo seria util para sacar la fecha de devolucion de un libro de una biblioteca si se dan x dias para el alquiler

Public Function SiguienteDiaHabil(dFecha As Date, Dias As Integer, ContarSabados As Boolean) As Date
    Dim dIntermedio As Date, iCuenta As Integer
    'Sumamos fecha mas dias
    Dim varFechaMasDias As Date
    varFechaMasDias = dFecha + Dias
    'MsgBox varFechaMasDias
    dIntermedio = DateAdd("d", 1, varFechaMasDias)
    iCuenta = DCount("DiaCerrado", "tbDiaCerrado", "DiaCerrado=#" & Format(dIntermedio, "mm/dd/yyyy") & "#")
    If ContarSabados And (Weekday(dIntermedio, vbMonday) = 6) Then
        dIntermedio = SiguienteDiaHabil(dIntermedio, 0, ContarSabados)  'Ponemos 0 ya que antes ya le hemos sumado los dias
    ElseIf Weekday(dIntermedio, vbMonday) = 7 Then
        dIntermedio = SiguienteDiaHabil(dIntermedio, 0, ContarSabados)
    ElseIf iCuenta > 0 Then
        dIntermedio = SiguienteDiaHabil(dIntermedio, 0, ContarSabados)
    End If
    SiguienteDiaHabil = dIntermedio
    Me.FechaLimiteDevolucion = SiguienteDiaHabil


Editado por rokoko - 01/Septiembre/2019 a las 22:10
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2082
Enlace directo a este mensaje Enviado: 02/Septiembre/2019 a las 09:49
Se puede cerrar. Muchas gracias a todos.

Saludos
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable