Estableciendo reglas de validación en formularios y subformularios.

Tengo una BD con un formulario que a su vez tiene un subformulario. En el formulario hay dos campos de fecha para cada servicio (1 FE y 2 FE). En el subformulario tengo un campo de fecha (E RSS NG). A este último le establecí una regla para que la fecha introducida si es menor que la del campo 1FE me diga en mensaje de alerta que LA FECHA DEBE SER IGUAL O MAYOR QUE LA FECHA DE ENTRADA DEL SERVICIO. Esto me sale bien pero lo tengo establecido solo para el campo 1FE.

Lo que no se hacer y realmente necesito es establecer un código mas complejo para el campo (E RSS NG) del subformulario. Que cuando en el formulario ya sea que se usen una o las dos fechas (1FE y 2FE) ejecute la misma acción del mensaje de alerta tomando en cuenta solo la fecha más avanzada.

Necesito que al introducir datos en este campo de fecha E RSS NG del subformulario, si la fecha es menor que una o las dos en caso que se usen ambos campos 1FE y 2FE me de la alerta. A veces solo se usa el campo 1FE, pero en algunos casos se requiere uso de los dos campos 1FE y 2FE, entonces el campo E RSS GN debe detectar estas diferencias y darme alerta. ¿Alguien ayuda con este código?

2 respuestas

Respuesta
1

Personalmente lo pondría en el evento Antes de actualizar del control E RSS NG, de forma que si escribes una fecha que no cumple las condiciones, el cursor se quede en el propio control para que lo modifiques. Por ejemplo

Private Sub E_RRS_NG_BeforeUpdate(Cancel As Integer)
If ([e rrs ng]) < Me.Parent![1FE] Then
MsgBox "No puede ser menor que 1FE"
Cancel = True
Else
If ([e rrs ng]) < Me.Parent![2FE] Then
MsgBox "No puede ser menor que 2FE"
Cancel = True
End If
End If
End Sub
Respuesta
1

Si las fechas (1FE, 2FE) tienen un valor por defecto (sea NULL o mejor cero) lo primero a validar es que por lo menos exista una de ellas (fácil: se suman y el resultado no puede ser cero)

Si pasa el filtro solo hay que verificar que sean diferente de cero y superiores al valor de referencia.

Al campo E RSS NG le he modificado el nombre (no debería contener espacios)
Para evitar valores NULL los campos los inicio a cero (cero = sin fecha).

Si prefieres utilizar los NULL aplica a discreción la función NZ

Un ejemplo:

Private Sub E_RSS_NG_AfterUpdate()
If Not IsDate(Me.E_RSS_NG) Then MsgBox "Verifique el valor  de  E_RSS_NG": Me.E_RSS_NG.SetFocus: Exit Sub
If Me.FE1 + Me.FE2 = 0 Then MsgBox "FE1 y FE2 no tienen valor": Exit Sub
If Me.FE1 <> 0 And Me.FE1 < Me.E_RSS_NG Then MsgBox "Verifique el valor de FE1": Me.FE1.SetFocus: Exit Sub
If Me.FE2 <> 0 And Me.FE2 < Me.E_RSS_NG Then MsgBox "Verifique el valor de FE2": Me.FE2.SetFocus: Exit Sub
'.... Los datos de fecha son validos, se puede continuar con el proceso ....
End Sub

Verifico que el referente es una fecha y de no serlo finaliza
Verifica que al menos una de las fechas [FE1 y FE2) tiene valor
Verifica que FE1 cumple los parámetros, si los cumple continua en otro caso finaliza
Verifica que FE2 cumple los parámetros, sil os cumple continua en otro caso finaliza

Es un ejemplo, adáptalo a tus datos.


                    

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas