Incluir un mes, o no, en un vencimiento

En mi base son muy importantes los vencimientos. Y varias las condiciones:
* De lunes a viernes (sin festivos) con o sin agosto;
* De lunes a sábados (sin festivos) con o sin agosto;
* De lunes a domingos (sin festivos) con o sin agosto.
Tengo medio camino hecho (gracias a mucha ayuda, todo hay que decirlo), pero aún tengo atragantado el mes de agosto. Es decir: si en mi base indico una fecha de inicio y un período de vencimiento, me indica la fecha final (según condiciones arriba), pero no consigo averiguar, cómo, mediante una casilla de verificación (que yo marcaría si quisiera incluir todo el mes de agosto, o dejaría de marcar, si quisiera no incluir el mes de agosto), y se sumara o restara, respectivamente, a la fecha final.
Estoy completamente perdida, no hay una función en access que me permita incluir un mes entero.

1 respuesta

Respuesta
1
Calor que se puede, pero dime como tienes hasta el momento tu código y te digo donde insertar esa variable
¿Se puede? Había perdido toda esperanza!
Los campos, en el subformulario frmHistorico, son:
* FNotificacion (que sería la fecha inicio)
* DVto (días de vencimiento)
he incluido una tabla de festivos (que tampoco cuentan) y he insertado 3 botones:
* L-V (excluyendo festivos)
* L-S (excluyendo festivos)
* L-D (excluyendo festivos)
Si en FNotificación indico 22/07/11 y 10 días como vencimiento, entonces, la fecha final sería (no hay ningún festivo en este período de diez días):
* L-V (excluyendo festivos): 5/08/11
* L-S (excluyendo festivos): 3/08/11
* L-D (excluyendo festivos): 1/08/11
Pero esto no es correcto en todos los casos. Había pensado que, mediante una casilla de verificación, incluir o no, el mes de agosto (en este caso serían los 31 días), quedándome así en caso de no seleccionar la casilla de agosto (lo de arriba sería si lo marcara):
* L-V (excluyendo festivos): 7/09/11
* L-S (excluyendo festivos): 3/09/11
* L-D (excluyendo festivos): 1/09/11
El código que tengo en el botón de comando L-V es el siguiente:
_____________________________________________________________________
'Creamos las variables
Dim vIni, vDias As Variant
vIni = Me.FNotificacion.Value
vDias = Me.DVto.Value
'Controlamos que haya valores en los textbox
If IsNull(vIni) Then Exit Sub
If IsNull(vDias) Then Exit Sub
'Llamamos a la función que nos cuenta los sábados domingos y
'guardamos la fecha resultante en una nueva variable
Dim vConSabYDomingos As Date
vConSabYDomingos = noSabNiDom2(vIni, vDias)
'Llamamos a la función que nos cuenta los festivos, y
'la fecha final será la que acabamos de calcular y almacenar
'en la variable vConDomingos. Lo guardamos en una nueva variable
Dim numFest As Integer
numFest = diasFestivos(vIni, vConSabYDomingos)
'Almacenamos la fecha final resultante en otra variable
Dim fFinTmp As Date
fFinTmp = vConSabYDomingos + numFest
'Si la fecha resultante es sábado la pasamos a domingo
If Weekday(fFinTmp) = vbSaturday Then
fFinTmp = fFinTmp + 1
End If
'Si la fecha resultante es domingo la pasamos al lunes
If Weekday(fFinTmp) = vbSunday Then
fFinTmp = fFinTmp + 1
End If
'Establecemos el control para ver qué valor toma la fecha final
'obtenida. Creamos un bucle del cual saldremos en función del valor de
'una variable booleana
Dim esFiesta As Boolean
esFiesta = True
Do Until esFiesta = False
Dim vFiesta As Variant
'Comprobamos que el último día no sea festivo
vFiesta = DLookup("[Festivo]", "tblFestivos", "[Festivo] = #" & fFinTmp & "#")
If IsNull(vFiesta) Then
'Si no es festivo cambiamos el valor del booleano para
'poder salir de la comprobación
esFiesta = False
Else
'Si es festivo le sumamos un día a la fecha
fFinTmp = fFinTmp + 1
'Si, al sumar el día, nos cae en sábado, añadimos dos días
'y lo pasamos a lunes y repetimos el proceso
If Weekday(fFinTmp) = vbSaturday Then
fFinTmp = fFinTmp + 2
End If
End If
Loop
'Asignamos el valor de la fecha temporal a nuestro textbox
Me.txtSinSabNiDomNiFest2.Value = fFinTmp
_____________________________________________________________________
y un módulo, con este código, entre otros:
_____________________________________________________________________
Dim cuentaDias, i As Integer
Dim fTmp As Date
cuentaDias = 0
fTmp = FIni
For i = 0 To Dias
If Weekday(fTmp) = vbSunday Then
cuentaDias = cuentaDias + 1
End If
If Weekday(fTmp) = vbSaturday Then
cuentaDias = cuentaDias + 1
End If
fTmp = fTmp + 1
Next i
noSabNiDom2 = FIni + Dias + cuentaDias
_____________________________________________________________________
Como veo efectivamente ya casi lo tienes quizá lo que falta es sabes si fFinTmpcae en agosto para ello tenemos que partir la fecha
Month(fFinTmp)
Por obvias razones si este valor es 8 entonces volver a agregarle los días que se pasa al siguiente mes
En términos reales lo que haremos en no hacer existir agosto por tanto únicamente habíra que cambiar el mes a esta fecha es decir
Day(fFinTmp)
Month(fFinTmp) +1
Year(fFinTmp)
Y entonces nuevamente unirla y así volver a verificar si no cae en sábado o domingo con el código que ya tienes
Bueno para completar tu código me gustaría me pudieras mandar la base para hacer ejercicios, y no empezar de cero [email protected]
O si te sirvieron las pautas que te comento entonces platícame como lo resolviste
Claro! Cómo no se me había ocurrido! Me he estado empeñando en hacer un código complejo cuando esta es la solución más fácil que se me ha planteado!
O al menos creo haber entendido lo que me propones. Que si en mi campo FVencimiento aparece el mes de agosto y no me interesa, mediante una casilla de verificación, indicarle que sume 1 mes más, y que en vez de ser 12/08/11, sea 12/09/11
Pero aquí se me plantea otra cuestión, tal como dices, en septiembre seguro que no será el 12, sino otro día... estoy en un bucle
Si te parece, te remito la base ;)
claro [email protected] viene
Te la remití anoche en zip
Cierra la pregunta por favor ya tengo la base

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas