Imprimir página | Cerrar ventana

Buscando funcion de Chea.....

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=84686
Fecha de impresión: 29/Marzo/2024 a las 15:29


Tema: Buscando funcion de Chea.....
Publicado por: rokoko
Asunto: Buscando funcion de Chea.....
Fecha de publicación: 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



Respuestas:
Publicado por: pitxiku
Fecha de publicación: 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).


Publicado por: rokoko
Fecha de publicación: 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....


Publicado por: Mihura
Fecha de publicación: 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.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: rokoko
Fecha de publicación: 01/Septiembre/2019 a las 19:08
La funcion que utilizo ahora es esta y funciona correctamente. Esta sacada de aqui y modificada.
https://social.technet.microsoft.com/Forums/ie/es-ES/f53909cc-c91a-4dba-b90a-397ad1638447/calcular-el-dia-siguiente-habil-a-una-fecha?forum=exceles" rel="nofollow - https://social.technet.microsoft.com/Forums/ie/es-ES/f53909cc-c91a-4dba-b90a-397ad1638447/calcular-el-dia-siguiente-habil-a-una-fecha?forum=exceles

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



Publicado por: guarracuco
Fecha de publicación: 01/Septiembre/2019 a las 19:32
Y si almacena los días hábiles en una tablita?


Publicado por: rokoko
Fecha de publicación: 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


Publicado por: guarracuco
Fecha de publicación: 01/Septiembre/2019 a las 20:14
Quise decir,los festivos.
Que lógica estas utilizando para saber cuando un sábado es festivo?


Publicado por: pitxiku
Fecha de publicación: 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


Publicado por: rokoko
Fecha de publicación: 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.


Publicado por: rokoko
Fecha de publicación: 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


Publicado por: rokoko
Fecha de publicación: 02/Septiembre/2019 a las 09:49
Se puede cerrar. Muchas gracias a todos.

Saludos



Imprimir página | Cerrar ventana