Будет очень трудно сделать (если не невозможно) получение значения непосредственно из списка выбора.Очевидно, преобразование значения списка выбора в число приводит к значительному увеличению размера.Следующая формула, будет делать то, что вы хотите
DATE(
FLOOR((MONTH(CalcDate__c) + VALUE(TEXT(AddMonths__c))) / 12) + YEAR(CalcDate__c),
MOD((MONTH(CalcDate__c) + VALUE(TEXT(AddMonths__c))), 12),
1) + (DAY(CalcDate__c) - 1)
Где CalcDate__c
- исходная дата, а AddMonths__c
- ваш список выбора.
Формула действительно приходитс оговоркой, что это иногда будет переходить в следующий месяц (например, добавление 1 месяца к 31.03.2011 приведет к 1.05.2011 вместо 30.04.2011).Если вам нужно обойти это, вы можете использовать операторы CASE
, как в ответе Джереми.
Другая проблема с формулой заключается в том, что она, к сожалению, составляет 5.7k символов, что превышаетмаксимум 5 КБ.
Однако этого можно избежать, сначала создав правило рабочего процесса, которое копирует значение списка выбора в скрытое числовое поле, а затем использует следующую формулу, размер которой скомпилирован 1,9k.:
DATE(
FLOOR((MONTH(CalcDate__c) + AddMonths2__c) / 12) + YEAR(CalcDate__c),
MOD((MONTH(CalcDate__c) + AddMonths2__c), 12),
1) + (DAY(CalcDate__c) - 1)
В этом случае AddMonths2__c
является вашей числовой копией AddMonths__c
.
Эта формула сохранит в Salesforce и должна достичь того, что вы пытаетесь сделать(хотя он имеет тот же самый конец месяца, что и первая формула)