Tema: dias habiles
Ver Mensaje Individual
  #5 (permalink)  
Antiguo 30/04/2006, 10:07
Avatar de jc_moty
jc_moty
 
Fecha de Ingreso: septiembre-2005
Ubicación: Usulután, El Salvador
Mensajes: 477
Antigüedad: 19 años, 7 meses
Puntos: 1
Hasta donde yo se no existe ningun control que segun el calendario de la PC te diga cuales son los dias festivos; lo que podes hacer es crear una tabla, que contenga un campo de tipo fecha y en esa tabla metas todas las fechas festivas; por ejemplo: 01/01/2006; 25/12/2006; 01/05/2006; etc...
Y con un SQL haces una comparacion:
Código:
Set mirecordset = Conexion.Execute("SELECT fecha FROM festivos WHERE MONTH(fecha) = MONTH(DATE()) AND DAY(fecha) = DAY(DATE())") ' Ojo: solo nos interesa el mes y el dia, en ningun momento hay que comparar el año
If mirecordset.BOF=False And mirecordset.EOF=False Then
     Msgbox "Es Festivo"
End if
Este ejemplo es con ADO y una BD de Access.
Aplicandolo al ejemplo anterior queda asi:
Código:
' Ojo: Agrega la referencia Microsoft ActiveX Data objects 2.6
' Menu Proyecto->Referencias->Seleccionar Microsoft ActiveX Data objects 2.6
' Objetos de ADO
Dim mirecordset As Recordset
Dim conexion As Connection
'
Dim dif, i As Integer
Dim fecha_inicial, fecha_final As String
' Para inicializar el objeto Connexion
Set conexion = New Connection
' La Base de datos tiene que estar en la carpeta del proyecto
conexion.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0; Data source = " & App.Path & "\BD.mdb;Persist Security Info=False;"
conexion.Open
'
fecha_inicial = "01/04/2006"
fecha_final = "02/05/2006"
dif = CDate(fecha_final) - CDate(fecha_inicial)
For i = 1 To dif
    If Weekday(CDate(fecha_inicial) + i, vbMonday) = 6 Or Weekday(CDate(fecha_inicial) + i, vbMonday) = 7 Then
        dif = dif - 1
    Else
        ' la consulta a la fecha correspondiente
        Set mirecordset = conexion.Execute("SELECT fecha FROM festivos WHERE MONTH(fecha) = " & Month(CDate(fecha_inicial) + i) & " AND DAY(fecha) = " & Day(CDate(fecha_inicial) + i)) 
        ' Ojo: solo nos interesa el mes y el dia, en ningun momento hay que comparar el año
        ' si la consulta devolvio registros
        If mirecordset.BOF = False And mirecordset.EOF = False Then
            ' restamos un dia            
            dif = dif - 1
        End If
    End If
Next i
MsgBox "Dias habiles = " & dif, vbInformation, "Resultado"
Ojo: Segun este ejemplo:
Nombre de la base de datos: BD.mdb
Nombre de la tabla: Festivos
Nombre del unico campo en la tabla: Fecha
Tipo de datos del campo fecha: Fecha/Hora
Saludos

Última edición por jc_moty; 30/04/2006 a las 10:15