Это непросто из коробки. Infopath имеет функцию добавления дней к дате. Запустите правило, которое срабатывает только тогда, когда в поле селектора установлено значение days. Пусть правило устанавливает значение целевой даты с
Правило 1:
addDays(StartDate, IncrementValue)
Это просто.
Годы также легко увеличить, извлекая год. Внутри дата хранится в формате ГГГГ-ММ-ДД, поэтому вы можете извлечь год с помощью substring-before (), используя тире в качестве разделителя. Увеличьте это число, затем используйте функцию concat (), чтобы объединить это значение нового года с остальной датой начала, то есть substring-after () с помощью тире. Создайте правило, которое срабатывает только в том случае, если в поле селектора указано значение "years", и установите целевую дату с помощью
Правило 2
concat(substring-before(StartDate, "-") + IncrementValue, "-", substring-after(StartDate, "-"))
Что действительно усложняется, так это месяц. Используя тот же принцип извлечения месяца, увеличения его и вставки обратно в дату, нетрудно. Месяц должен начинаться с нуля, хотя для правильной записи даты. Этого можно добиться, прибавив к месяцу 100 и выбрав только две последние цифры. Этот подход будет работать до тех пор, пока новая дата не перейдет в следующий год.
Правило 3
concat(substring-before(StartDate, "-"), "-", substring-after(substring-before(substring-after(StartDate, "-"), "-") + 100 + IncrementValue, "1"), "-", substring-after(substring-after(StartDate, "-"), "-"))
Если новая дата находится в следующем году, эта формула приведет к ошибке. Таким образом, вам нужно будет создать вспомогательные поля, в которых вы храните значение месяца, и если рассчитанный месяц больше 12, увеличьте год и соответствующим образом скорректируйте значение месяца.
Установите вспомогательное поле месяца с помощью этого правила:
substring-before(substring-after(StartDate, "-"), "-") + IncrementValue
Затем установите целевую дату с помощью этого правила, которое срабатывает, если помощник месяца больше 12:
concat(substring-before(StartDate, "-") + 1, "-", substring-after(MonthHelper - 12 + 100, "1"), "-", substring-after(substring-after(StartDate, "-"), "-"))
Если у помощника месяца меньше 13, выполните правило 3 выше.
Действительно сложная проблема в том, что месяцы имеют разную продолжительность. Если вы добавите один месяц к 2013-01-31 с помощью этого метода, результатом будет недопустимая строка даты 2013-02-31. Также нужно учитывать високосные годы.
В зависимости от того, чего вы хотите достичь, вы можете добавить 30 дней для каждого месяца, используя вместо этого функцию addDays ().
Если вам нужен точный метод приращения месяца, вам либо понадобится другой набор вспомогательных ячеек для оценки комбинации месяц / день и внесения корректировок, либо вам понадобится код, который делает приращение даты более изящным, но это не то, что я может помочь с.
Существуют сторонние инструменты, такие как qRules от Qdabra Software, которые обеспечивают дополнительную функциональность для форм InfoPath. qRules включает функции даты, которые могут делать то, что вы хотите, без написания кода.
person
teylyn
schedule
09.06.2013