Si ha navegado por el ecosistema de Salesforce durante algún tiempo, sabrá que la búsqueda en Internet de la fórmula adecuada para satisfacer sus necesidades empresariales es cosa de un día de trabajo. Escarbar en foros y bases de conocimiento en busca de la pieza de código perfecta se ha convertido en una parte integral del conjunto de herramientas del profesional de Salesforce.

Estas búsquedas nos llevan a menudo a fórmulas tan intrincadas que parecen más arte que ciencia. Pero en lugar de copiar y pegar estas soluciones, ¿qué pasaría si pudiera aprender el arte de crearlas usted mismo? En esta guía, iremos desgranando las capas de los complejos campos de fórmulas en Salesforce, partiendo de lo más básico hasta llegar a una comprensión exhaustiva.

Días de trabajo al mes

Una de estas fórmulas que a menudo resulta muy valiosa en varias funciones empresariales es el cálculo de días de trabajo al mes. Ya sea para fines de programación, plazos de proyectos o previsiones financieras, conocer el número exacto de días laborables puede proporcionar datos esenciales para una toma de decisiones más informada.

Si busca esta fórmula en la web, puede toparse con algo parecido a esto:

CASE(WEEKDAY(DATE(YEAR(MyDateField__c), MONTH(MyDateField__c), 1)),1,0,2,5,3,4,4,3,5,2,6,1,7,0,0)+((((((ADDMONTHS(DATE(YEAR(MyDateField__c), MONTH(MyDateField__c), 1), 1) - 1) - CASE(WEEKDAY((ADDMONTHS(DATE(YEAR(MyDateField__c), MONTH(MyDateField__c), 1), 1) - 1)),1,1,2,2,3,3,4,4,5,5,6,6,7,0,0)) - ((DATE(YEAR(MyDateField__c), MONTH(MyDateField__c), 1)) + CASE(WEEKDAY((DATE(YEAR(MyDateField__c), MONTH(MyDateField__c), 1)),1,0,2,6,3,5,4,4,5,3,6,2,7,1,0))) + 1) / 7) * 5)+CASE(WEEKDAY(ADDMONTHS(DATE(YEAR(MyDateField__c), MONTH(MyDateField__c), 1), 1) - 1),1,0,2,1,3,2,4,3,5,4,6,5,7,0,0)

A primera vista, esta fórmula puede parecer imposiblemente compleja. Sin embargo, hay una estructura lógica y un método para su locura. A continuación vamos a deconstruirla pieza a pieza, explicando el propósito de cada parte y demostrando cómo abordar la creación de este tipo de fórmulas de forma sistemática.

Comencemos…

En la fórmula compleja anterior, «MiFechaCampo__c» contiene la fecha para la que pretendemos determinar el número total de días laborables dentro de su mes. Supongamos que este campo tiene un valor del 18 de noviembre de 2022. Para tener una visión clara de cómo realizar nuestros cálculos, desglosaremos el mes de noviembre de la siguiente manera:

Este desglose nos guiará a través de la estructura subyacente de nuestra fórmula, ayudándonos a entender el cálculo paso a paso. Tenga en cuenta que cada paso siguiente crea un nuevo campo de fórmula en el objeto en el que existe su campo de fecha. Por ejemplo, si «MyDateField__c» es un campo en el objeto de oportunidad, los campos de fórmula a continuación se crearían en el objeto de oportunidad.

Paso 1: Encontrar el inicio del mes

Esta es, de lejos, la fórmula más sencilla que utilizaremos como parte de este ejercicio. Simplemente creamos un nuevo campo de fórmula de fecha que utiliza el año y el mes de nuestra fecha de ejemplo y establecemos el día en «1».

Inicio_del_mes__c = DATE(YEAR(MyDateField__c), MONTH(MyDateField__c), 1)

Paso 2: Encontrar el fin de mes

Hallar el último día del mes es algo más complejo ya que tenemos que tener en cuenta los meses con diferente número de días. La forma más sencilla de hacerlo es encontrar el primer día del mes, añadir un mes y luego restar un día.

Fin_del_mes__c = ADDMONTHS(DATE(YEAR(MyDateField__c), MONTH(MyDateField__c), 1), 1) - 1

Paso 3: Encontrar el primer día de la primera semana completa

Ahora que hemos identificado el primer día del mes, podemos usarlo para encontrar la fecha del primer domingo de la primera semana completa. Podemos hacer esto determinando en qué día de la semana cae el primero del mes y luego sumando el número apropiado de días.

Inicio_de_Semana_completa__c = Inicio_de_mes + CASE(WEEKDAY(Inicio_de_mes__c),
1,0,
2,6,
3,5,
4,4,
5,3,
6,2,
7,1,
0)

La función WEEKDAY devolverá el día de la semana, «1» para un domingo, «2» para un lunes, y así sucesivamente…

Usando la función CASE, podemos especificar cuántos días añadir para cada día de la semana. En nuestro ejemplo, el primer día del mes es el martes 1 de noviembre. En este caso, la función WEEKDAY devolverá un «3», y, como resultado, la función CASE devolverá un «5». Se añadirán cinco días al inicio del mes para darnos la fecha del primer día de la primera semana completa: Domingo, 6 de noviembre.

Paso 4: Encontrar el último día de la última semana completa

Podemos encontrar el último día de la última semana completa de la misma manera – excepto que en este caso, necesitamos restar algunos días del último día del mes.

Fin_mes_completo__c - CASE(WEEKDAY(Fin_mes__c),
1,1,
2,2,
3,3,
4,4,
5,5,
6,6,
7,0,
0)

En nuestro ejemplo, el último día del mes es el miércoles 30 de noviembre. En este caso, la función WEEKDAY devolverá un «4» y, como resultado, la función CASE también devolverá un «4». Se restarán cuatro días al final del mes para obtener la fecha del último día de la última semana completa: Sábado 26 de noviembre.

Paso 5: Determinar el número de semanas laborales completas

Ahora que tenemos las fechas del primer día de la primera semana completa y del último día de la última semana completa, podemos calcular el número total de semanas completas.

Semanas_completas__c = ((Semana_completa_fin__c - Semana_completa_inicio__c) + 1) / 7

Primero, restamos la fecha de inicio de la semana completa de la fecha de fin de la semana completa. Esto nos dará cuántos días han pasado entre ambos días. Observa que luego añadimos «1» a este resultado. Esto asegura que obtenemos el número total de días reales, no el número de días que han pasado.

Restar una fecha de otra fecha funciona igual que si contáramos con los dedos. Piensa en una sola semana, empezando el domingo, y cuenta: De domingo a lunes es 1 día, de lunes a martes son 2 días, de martes a miércoles son 3 días, de miércoles a jueves son 4 días, de jueves a viernes son 5 días, y de viernes a sábado son 6 días.

Necesitamos añadir «1» para asegurarnos de que obtenemos el número total de días que hemos tocado en lugar del número de días que han pasado. A continuación, podemos dividir este número por «7» para obtener el número total de semanas completas.

En nuestro ejemplo, restando el 6 de noviembre del 26 de noviembre nos da 20 días. Sumamos «1» para obtener 21 días completos y dividimos este resultado por «7» para obtener tres semanas completas. Más tarde, podremos multiplicar este resultado por «5» para determinar el número total de días laborables que contienen estas semanas completas.

Paso 6: Determinar el número de días individuales antes de la primera semana completa

Necesitamos averiguar cuántos días extra hay al principio del mes. En otras palabras, ¿cuántos días al principio del mes son días laborables que no están incluidos en la primera semana completa? Podemos utilizar el mismo modelo CASO/DÍA DE LA SEMANA que utilizamos anteriormente. Si averiguamos en qué día de la semana comienza nuestro mes, podemos averiguar exactamente cuántos días quedan hasta el final de la semana parcial.

Days_before_first_full_week__c = CASE(WEEKDAY(Month_Start__c),
1,0,
2,5,
3,4,
4,3,
5,2,
6,1,
7,0,
0)

En nuestro ejemplo, el primer día del mes es un martes. En este caso, la función WEEKDAY devuelve un «3», lo que hace que la función CASE devuelva un «4». Esto significa que hay cuatro días laborables en esa semana parcial a principios de mes (martes, miércoles, jueves y viernes).

Paso 7: Determinar el número de días individuales después de la última semana completa

Podemos calcular el número de días laborables después de la última semana completa de forma similar.

Days_after_last_full_week__c = CASE(WEEKDAY(Month_End__c),
1,0,
2,1,
3,2,
4,3,
5,4,
6,5,
7,0,
0)

En nuestro ejemplo, el último día del mes es un miércoles. En este caso, la función WEEKDAY devolverá un «4» y, como resultado, la función CASE devolverá un «3». Esto significa que hay tres días laborables en la semana parcial de fin de mes (lunes, martes y miércoles).

Paso 8: Calcular el número total de días laborables del mes

Nuestro último paso es juntarlo todo. Sumamos el número de días de la semana parcial a principios de mes, el número de días laborables de las semanas completas y el número de días de la semana parcial a finales de mes.

Días_trabajados_Por_Mes__c = Días_antes_de_la_primera_semana_completa__c + (Semanas_completas__c * 5) + Días_después_de_la_última_semana_completa__c

Paso 9: Creación de un único campo de fórmula

Hemos desglosado la lógica de cada paso en campos separados para mayor claridad, pero en la práctica, no necesita crear cada uno de estos campos en Salesforce.

En su lugar, comience con la fórmula final del paso 8 y repase cada paso, cambiando los nombres de campo por sus fórmulas reales. Trabajando hacia atrás de esta manera, usted armará la fórmula completa que mostramos al principio de este post.

Resumen

Ahora que ha visto cómo hemos construido el campo de fórmula ‘días de trabajo al mes’, ya tiene todo listo para desarrollar sus propias fórmulas de Salesforce.

Sólo tiene que seguir el mismo enfoque: comience con un diagrama claro para trazar su lógica y divida la fórmula en distintas secciones lógicas. Para cada sección, cree un campo de fórmula dedicado para simplificar las pruebas y la validación. Una vez que hayas confirmado la precisión de cada sección, trabaja hacia atrás para crear una fórmula única y completa.

Entradas recomendadas