Principales respuestas
Calcular FechaFinal apartir de otra fecha segun dias sin sabado ni domingo ni feriados

Pregunta
-
El codigo es:
Public Function calcularEstimado(Optional ByVal fecha As Date = Nothing, Optional ByVal iTiempo As Integer = 0, Optional ByVal entregarSabado As Boolean = False) As Date Dim diaSemana As String = "" Dim iTiempoTransito As Integer = 0 If iTiempo = 0 Then Integer.TryParse(cboDias.Text, iTiempoTransito) Else iTiempoTransito = iTiempo End If If iTiempoTransito > 0 Then If fecha = Nothing Then dtpEstimado.Value = dtpFechaIngreso.Value Else dtpEstimado.Value = fecha End If For i = 1 To iTiempoTransito dtpEstimado.Value = dtpEstimado.Value.AddDays(1) Dim bSiguienteDia As Boolean = False diaSemana = (dtpEstimado.Value.ToString("dddd", New CultureInfo("es-ES"))) Select Case diaSemana Case "domingo" : bSiguienteDia = True Case "sábado" 'Aqui controlamos si la entrega de la mercancia puede ser sabado If entregarSabado = True Then bSiguienteDia = False Else bSiguienteDia = True End If Case Else If chkDiasFestivos.Checked = True Then 'En esta parte controlamos los dias festivos que tenemos en la Tabla. Dim oDiaFestivo As clDiaFestivo = clDiaFestivo.GetDiaFestivo(dtpEstimado.Value) If oDiaFestivo Is Nothing Then bSiguienteDia = False Exit For Else bSiguienteDia = True End If End If End Select If bSiguienteDia Then i -= 1 End If Next End If 'Return dtpEstimado.Value Return Format(dtpEstimado.Value, "d") End Function
Private Sub CalcularF() Me.dtpEstimado.Value = calcularEstimado(Format(Date.Now, "dd/MM/yyyy")) End Sub
cboDias =15
FechaInicial = 23/03/2018 por tanto deberia ser fechafinal 17/04/2018 porque 29 y 30 es feriado. sin sábados ni domingos
Pero con el codigo marcando chkDiasFestivos sale 26/03/2018 y sin marcar sale 13/04/2018
Por tanto algo esta mal.
- Editado Javier Roque sábado, 24 de marzo de 2018 17:19
Respuestas
-
Hola:
Revisa el siguiente enlace.
http://social.msdn.microsoft.com/Forums/es-ES/vbes/thread/e4e39c22-24cc-4a12-b32f-75ea6787011c
Un saludo desde Bilbo
Carlos- Marcado como respuesta Javier Roque sábado, 24 de marzo de 2018 22:12
-
Hola:
En un Form como el de la imagenCopia y pega el siguiente codigoImports System.Data.SqlClient
Public Class Form1Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim liDias As Integer = CInt(DateDiff("d", Me.DateTimePicker1.Value, Me.DateTimePicker2.Value))
Dim ldtFecha As Date
Dim liNumDias As Integer = 0
'
For liCiclo As Integer = 0 To liDias
ldtFecha = DateAdd(DateInterval.Day, liCiclo, Me.DateTimePicker1.Value)
If ldtFecha.DayOfWeek = DayOfWeek.Saturday Or ldtFecha.DayOfWeek = DayOfWeek.Sunday Then
Continue For
End If
If lF_bEsFestivo(ldtFecha) = True Then
Continue For
End If
liNumDias += 1
Next
MessageBox.Show("Nº de Dias Laborables: " & liNumDias.ToString)
End SubPrivate Function lF_bEsFestivo(ByVal vdFecha As Date) As Boolean
Dim lsQuery As String = "Select Count(*) From fiesta Where f_fiesta=@FFestivo"
Try
Using loConexion As New SqlConnection("TU_CADENA_DE_CONEXION")
Using loComando As New SqlCommand(lsQuery, loConexion)
loComando.Parameters.Add(New SqlParameter("@FFestivo", vdFecha.Date))
loConexion.Open()
Dim liResultado As Integer = CInt(loComando.ExecuteScalar())
Return CBool(IIf(liResultado = 0, False, True))
End Using
End Using
Catch ex As Exception
MessageBox.Show(ex.Message, "lF_bEsFestivo", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Try
Return False
End Function
End ClassP.D.
Usa una tabla llamada fiesta que contiene un campo llamado f_fiestaUn saludo desde Bilbo
Carlos- Marcado como respuesta Javier Roque domingo, 25 de marzo de 2018 22:37
Todas las respuestas
-
Hace mucho hice algo así. Pero me parece que es más sencillo de lo que veo en su función. Honestamente, no le revisé casi nada.
Recuerdo que hice esto:
- Tomo fecha inicial y los días que deseo.
- Esos días que deseo, los divido por 5 (7 días por semana menos sábado y domingo). Esto me da el total de semanas a adicionar, sin contar feriados. También me interesa el módulo (%).
- Fecha inicial + (total de semanas a adicionar) + módulo = fecha final.
- Busco en base de datos o en términos generales, un proveedor de feriados, aquellos feriados que se encuentren entre ]fecha inicial, fecha final] que no sean sábado o domingo porque esos ya los excluí. Por cada uno, adiciono un día a la fecha final.
- Si fecha final es sábado o domingo, la muevo al lunes.
Jose R. MCP
Code Samples- Editado webJoseModerator sábado, 24 de marzo de 2018 18:10
-
-
Hola:
Revisa el siguiente enlace.
http://social.msdn.microsoft.com/Forums/es-ES/vbes/thread/e4e39c22-24cc-4a12-b32f-75ea6787011c
Un saludo desde Bilbo
Carlos- Marcado como respuesta Javier Roque sábado, 24 de marzo de 2018 22:12
-
Hola gracias tengo un problema alli esta con access que no uso; cambiando algunas cosas nose si esta bien me sale un error que marca pide return en esta parte
Private Function lF_bEsFestivo(ByVal vdFecha As Date) As Boolean Try Using cnx As New SqlConnection(ConfigurationManager.ConnectionStrings("cnxString").ToString()) Dim tb As New String("Select Count(*) From DiasFestivos Where Fecha=@FFestivos") Dim cmdp As New SqlCommand(tb, cnx) cmdp.Parameters.AddWithValue("@FFestivos", vdFecha) cnx.Open() Dim liResultado As Integer = CInt(cmdp.ExecuteScalar()) Return CBool(IIf(liResultado = 0, False, True)) End Using Catch ex As Exception MessageBox.Show(ex.Message, "lF_bEsFestivo", MessageBoxButtons.OK, MessageBoxIcon.Information) End Try End Function
o quizas he colocado mal el codigo espero me ayudes para probar.
Gracias
- Editado Javier Roque sábado, 24 de marzo de 2018 21:51
-
Bueno le añadi Return True probe y funciono.
J. Carlos Herrero Me ayudarias a calcular los dias pensé que había salido pero no funciona bien.
Como calcular dias transcurridos entre 2 fechas parece que me suma los diasfestivos porque tengo 3 dias festivos 28/03,29/03,01/04 cuando debe salir 15 sale 18
Gracias
- Editado Javier Roque sábado, 24 de marzo de 2018 23:42
-
Hola:
En un Form como el de la imagenCopia y pega el siguiente codigoImports System.Data.SqlClient
Public Class Form1Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim liDias As Integer = CInt(DateDiff("d", Me.DateTimePicker1.Value, Me.DateTimePicker2.Value))
Dim ldtFecha As Date
Dim liNumDias As Integer = 0
'
For liCiclo As Integer = 0 To liDias
ldtFecha = DateAdd(DateInterval.Day, liCiclo, Me.DateTimePicker1.Value)
If ldtFecha.DayOfWeek = DayOfWeek.Saturday Or ldtFecha.DayOfWeek = DayOfWeek.Sunday Then
Continue For
End If
If lF_bEsFestivo(ldtFecha) = True Then
Continue For
End If
liNumDias += 1
Next
MessageBox.Show("Nº de Dias Laborables: " & liNumDias.ToString)
End SubPrivate Function lF_bEsFestivo(ByVal vdFecha As Date) As Boolean
Dim lsQuery As String = "Select Count(*) From fiesta Where f_fiesta=@FFestivo"
Try
Using loConexion As New SqlConnection("TU_CADENA_DE_CONEXION")
Using loComando As New SqlCommand(lsQuery, loConexion)
loComando.Parameters.Add(New SqlParameter("@FFestivo", vdFecha.Date))
loConexion.Open()
Dim liResultado As Integer = CInt(loComando.ExecuteScalar())
Return CBool(IIf(liResultado = 0, False, True))
End Using
End Using
Catch ex As Exception
MessageBox.Show(ex.Message, "lF_bEsFestivo", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Try
Return False
End Function
End ClassP.D.
Usa una tabla llamada fiesta que contiene un campo llamado f_fiestaUn saludo desde Bilbo
Carlos- Marcado como respuesta Javier Roque domingo, 25 de marzo de 2018 22:37
-
Respondeme en el otro hilo para no mezclar las preguntas por favor
Como calcular dias transcurridos entre dos fechas en textbox sin sabados y domingos ni feriados
Gracias- Editado Javier Roque domingo, 25 de marzo de 2018 17:21