Ejemplo de Formulas con fechas y condicioneles
Utilizabamos una lista de Sharepoint para que la gente se apuntará a comer. Entre las opciones que teníamos eran menú “Vegetariano” o menú “Normal”.
Para facilitarle la gestión al catering se tenía que apuntar el personal al menu “Vegetariano” el viernes de la semana anterior a la reserva, así el mismo viernes se le indicaba al servicio de catering los menús Vegetarianos que se iban a solicitar a la semana siguiente. Mientras que para el menú normal podía puntarse antes de las 9:00 del dia de la reserva.
Vamos a explicar como se detectaba la gente que se había apuntado fuera de plazo (todo sin una lina de programación).
Creamos una columna llamada “Fuera de plazo” cuyo tipo de información es Calculado (cálculo basado en otras columnas) con el tipo de datos que devuelve es “Sí o No”. Siendo la Formula:
=IF(<!-- Revisión del menu normal, el mismo dia antes de las 9:00 -->
[Tipo de Menu]="Normal";
IF( <!-- Revisión de casos que nos indique que está fuera de plazo -->
AND( <!-- La modificación del registro y la reserva se distan
en menos de un dia -->
DATEDIF(Modificado;[Fecha de la reserva];"D")<1;
<!-- y la modificación del registro se ha realizado posterior a las 9 -->
HOUR(Modificado)>=9
);
TRUE(); <Sí que está fuera de plazo>
FALSE() <No que está fuera de plazo>
); <!-- Revisión del menu vegetariano, el viernes anterior a la semana
de la reserva antes de las 9:00 -->
IF( <!-- Revisión de casos que nos indique que está fuera de plazo -->
OR(
AND( <!-- Reserva realizada el viernes de la semana anterior
a la fecha de la reserva posterior a las 9:00 -->
DATEDIF(Modificado;[Fecha de la reserva];"D")
=(WEEKDAY([Fecha de la reserva];2)+2);
HOUR(Modificado)>=9
); <!-- La reserva se realizó la misma semana ( la distancia entre
la reserva y el dia que se realizó es menor que el dia de la semana
de la reserva) -->
DATEDIF(Modificado;[Fecha de la reserva];"D")
<(WEEKDAY([Fecha de la reserva];2)+2)
);
TRUE(); <!-- Sí que está fuera de plazo>
FALSE() <!-- No que está fuera de plazo>
)
)
Está formula tiene un error. Si el usuario pone una fecha de reserva anterior al día que se realiza. Por ello creamos otra columna calculada llamada “Error en la Reserva” para detectar dichos errores.
=IF(
OR(
<!-- la fecha de creaciónes posterior a la "Fecha de la reserva" -->
ISERROR(DATEDIF(Creado;[Fecha de la reserva];"D"));
<!-- No puedes reservar para un Sabado o un domingo -->
WEEKDAY([Fecha de la reserva])>6;
AND(
[Tipo de Menu]<>"Normal";
<!-- El viernes solo hay menu "Normal" -->
WEEKDAY([Fecha de la reserva];2)=5)
);
TRUE(); <!-- Sí que existe un error -->
FALSE() <!-- No se ha detectado un error -->
)
Para finalizar pongo 2 ejemplos más referente a fechas:
- =([Fecha de la reserva]-WEEKDAY([Fecha de la reserva];3))<!– Ver el día de inicio de semana (lunes) de la reserva –>
- =(7-WEEKDAY([Fecha de la reserva];2)+[Fecha de la reserva])<!– Ver el día de fin de semana (domingo) de la reserva –>