Формула даты со значениями списка выбора - PullRequest
1 голос
/ 17 ноября 2011

Мне нужно создать формулу для поля даты. Формула для нового поля даты id

Новое поле даты = Старое поле даты + Количество месяцев

Количество месяцев из списка выбора.

Ответы [ 2 ]

1 голос
/ 18 ноября 2011

Будет очень трудно сделать (если не невозможно) получение значения непосредственно из списка выбора.Очевидно, преобразование значения списка выбора в число приводит к значительному увеличению размера.Следующая формула, будет делать то, что вы хотите

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 и должна достичь того, что вы пытаетесь сделать(хотя он имеет тот же самый конец месяца, что и первая формула)

1 голос
/ 17 ноября 2011

Это простое требование накладывает некоторые ограничения на язык формул Salesforce.Т.е. формула ниже (основанная на this ) будет работать, но она невероятно не элегантна и едва вписывается в допустимый размер скрипта.Надеюсь, у кого-то есть лучшее решение.

DATE(
    year(BaseDate) + floor((month(BaseDate) + Add_Months__c)/12) 
        + if(and(month(BaseDate)=12,Add_Months__c>=12),-1,0),

    if( mod( month(BaseDate) + Add_Months__c , 12 ) = 0, 12 , mod( month(BaseDate) + Add_Months__c , 12 )),

    min(
        day(BaseDate),
        case(
            max( 
                mod( 
                    month(BaseDate) + Add_Months__c , 12 
                ) , 
                1
            ),
            9,30,
            4,30,
            6,30,
            11,30,
            2,28,
            31
        )
    )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...