Очень удобный инструмент для вывода нестатичных данных.
Пользователь
Самый простой пример, вывод данных юзера в нужном формате.
{=Document:CREATED_BY} > User_1
{=Document:CREATED_BY > printable} > Иван Иванов [1]
{=Document:CREATED_BY > user, friendly} > Иван Иванов
Для переменной типа пользователь
{=Variable:user}> User_1
{=Variable:user > printable}> Иван Иванов [1]
Даты
В качестве даты можно установить переменные, параметры шаблона, а также поля документа, для которого создан бизнес-процесс. Кроме того можно просто ввести даты вручную или подставить текущее системное время {=System:Now}.
{=System:Now} - текущая дата со временем на сервере;
{=System:NowLocal} - текущая дата со временем у клиента (учитывается часовой пояс);
{=System:Date} - текущая дата без времени;
Добавление к дате дополнительного времени
Функция dateadd позволяет добавить к указанной дате определенное число времени (лет, месяцев, дней, часов, минут, секунд).
Выглядит она следующим образом:
=dateadd([начальная дата], [что добавлять])
В [что добавлять] можно вводить значения y, m, d, h, i, s - года, месяца, дни, часы, минуты и секунды соответственно. При этом с помощью знаков + и - можно указать даты позднее или ранее начальной. Например:
Dateadd не меняет саму дату, для которой она применяется. То есть, если в функции используется дата создания, то сама дата создания никак не меняется, мы просто берем ее значение и прибавляем к ней определенный срок. Поэтому, если важно именно сохранить новое значение, то тогда нужно записывать его отдельную в переменную или т.п.
Примеры
{{=dateadd({=Document:DATE_CREATE}, "+1d"")}} - получится значение, равное дате создания документа плюс 1 день.
=dateadd({=Document:DATE_CREATE}, "-21d") - получится значение, равное дате создания документа минус 21 день.
{{=dateadd({=System:Date}, "+19h")}} — сегодня в 19:00
{{=dateadd({=System:Date}, "+1d 19h")}} — через 1 день в 19:00
{{=DateAdd({=System:Now}, '1d')}} — через 1 день
{{=dateadd({=System:Now}, "+30i")}} — через 30 мин
{{=dateadd({=System:Now}, "+6h")}} — через 6 часов
=WorkDateAdd({=System:Now}, "+60i") — через 60 минут с учетом рабочего времени.
=WorkDateAdd({=System:Now}, "+6h") — через 6 часов с учетом рабочего времени.
Дата в нужном нам формате
{{=date("H:i, d.m", {=Variable:bbb})}} получаем 13:18, 11.11.
Пример использования
Один из самых распространенных примеров использования dateadd - создать в бизнес-процессе задачу с крайним сроком, автоматически рассчитывающимся относительно даты начала.
Поставим задачу, на выполнение которой будет отведено 10 дней с момента ее создания.
Для этого в блоке задача в поле Крайний срок введем =dateadd({=System:Now}, "+10d").
Для получения результатов функции в виде текста для уведомлений, задач, записей в живой ленте и т.п. нужно заключить ее в двойные фигурные скобки т.е. {{=dateadd({=Document:DATE_CREATE}, "+1d")}}.
Печатная форма
Если для поля документа или параметра доступен такой вариант отображения, то он будет представлен в форме Вставка значения. Если же печатная форма не предусмотрена, то можно запросить вывод печатной формы от любого значения (переменная, дополнительный результат и т.п.).
Пример: {=Variable:Datetime > date, printable} // перевод даты в печатную форму
Кроме того, можно преобразовывать не только в печатную форму, но и менять тип данных.
{=Variable:string>date} // преобразование строки в дату
Рабочие дни
Функция addworkdays позволяет добавить к дате определенное количество рабочих дней.
Выглядит она следующим образом:
=addworkdays([дата], [сколько дней добавлять])
=addworkdays([дата, к которой будут добавляться дни], [количество добавляемых рабочих дней])
Примеры строк:
=addworkdays({=Document:DATE_CREATE}, 1) - получится значение, равное дате создания документа плюс 1 рабочий день.
=addworkdays('2.02.2018', 1) - получим 5.02.2018 (понедельник), так 2.02.2018 - это пятница, в за ним идут 2 выходных - суббота и воскресенье.
{{=addworkdays('07.03.2016', 1)}} - результат: 09.03.2016 00:00:00, т.к. в настройках сайта 8 марта - выходной.
{{=addworkdays('05.02.2016 16:14:00', 1)}} - результат: т.к. 05.02.2016 - пятница, то результат: 08.02.2016 16:14:00 - понедельник.
Дополнительные настройки
- isWorkDay - проверяет, является ли дата рабочим днем (по Календарю).Синтаксис: =if(isWorkDay([проверяемая дата]), [сообщение, если дата является рабочим днем], [сообщение, если не является]).Пример:{{=if(isWorkDay({=Template:Parameter1}), 'Да', 'Нет')}} - в параметре содержится дата 28.04.2016. Результат - Да, т.к. это рабочий день.
- isWorkTime - аналогична функции isWorkDay, но для типов данных Дата/Время.Синтаксис: =if(isWorkDay([проверяемая дата со временем]), [сообщение, если дата со временем является попадает на рабочее время], [сообщение, если не попадает]).Пример:{{=if(isWorkTime({=Template:Parameter1}), 'Да', 'Нет')}} - в параметре содержится дата со временем 27.04.2016 15:00:00. Результат - Да, т.к. это рабочее время.
- WorkDateAdd - добавляет заданное количество рабочих дней, часов и минут к указанной дате.Синтаксис: =WorkDateAdd([начальная_дата], [что_добавлять]).Варианты написания: d, day, days, h, hour, hours, i, min, minute, minutes. Допустимо написание как в верхнем, так и в нижнем регистре.Пример:=WorkDateAdd({=Template:Parameter1}, "2d") - в параметре содержится дата 28.04.2016. Результат - 02.05.2016 09:00:00, т.к. 30.04 и 1.05 - это выходные дни, то они будут пропущены. 09:00:00 - начало рабочего дня. Настроить список выходных дней и начало рабочего дня можно в Настройках портала.
Вычисление данных из 2-х дат
datediff - Позволяет вычислить разницу между двумя датами
=datediff([первая дата], [вторая дата], [как выводить разницу])
Разницу можно выводить в разных единицах, в зависимости от решаемых вами задач.
Пример с переменными
=datediff({=Variable:Variable1}, {=Variable:Variable2},'%m month, %d days')
Пример подробно
Возьмем две даты (с одинаковым днём):
Date1: 18.01.2022 12:15:25
Date2: 18.01.2022 18:31:00
Посчитаем разницу между этими датами:
{{=datediff({Date1},{Date2},"%h часов %i минут %s секунд")}}
// результат: 6 часов 15 минут 35 секунд
Если для этих же дат мы запишем функцию только со значением %i:
{{=datediff({Date1},{Date2},"%i")}}
// результат: 15
Т.о. функция datediff не переводит разницу в одну единицу времени (в минуты или в секунды). Её результатом всегда является расчет в полном формате (сколько прошло лет, месяцев, дней, часов и т.д. между двумя датами). А при помощи третьего параметра функции мы указываем лишь какие данные из этого результата отобразить.
Исключением является вариант %a, который выводит общее количество дней между датами. Проверим на том же примере, только для первой даты изменим год на 2020:
Date1: 18.01.2020 12:15:25
Date2: 18.01.2022 18:31:00
{{=datediff({Date1},{Date2},"%d")}}
// %d - количество дней// результат: 0
{{=datediff({Date1},{Date2},"%a")}}
// %a - общее количество дней// результат: 731
Как видим, в первом варианте количество дней равно 0, т.к. прошло ровно 2 года и 0 дней. А во втором варианте результат 731 день, т.е. количество дней за 2 года.
Условие if
Синтаксис:
=if([условие], [результат_в_случае_выполнения_условия], [результат_в_случае_не_выполнения_условия]);
Пример: =if ({=Variable:Variable1_printable}>0, "да", "нет")При сравнении значений переменных также возможно сравнивать переменные с разным типом данных. Однако сравниваемые переменные должны соответствовать таблице преобразования типов (она есть в этой статье).
Ограничение по количеству символов выводимых данных
substr - возвращает подстроку определенной длины, начиная с указанного символа. Данная функция аналогична существующей в php, более подробно о ее возможностях вы можете прочитать здесь.
Синтаксис: substr([входная строка], [с какого символа исходной строки начнется возвращаемая статья], [какой длины будет строка])
Имейте в виду, что строка начинает с символа под номером 0. Например, в строке 'abcdef', в позиции 0 находится символ 'a', в позиции 2 - символ 'c', и т.д
Пример: {{=substr("0123456789", 3, 4)}}
вернет 3456.
Вычисление данных
В системе имеется возможность вычислять значения выражений в параметрах действий, для этого необходимо поставить знак = в поле перед операциями.
Пример:
=6^2 + {=Document:PROPERTY_NUM}/2
или
=if({Document:ID}=5, "текст1", "текст2").
В каждом поле можно использовать сразу несколько разных вычислений. В случае, если нужно не только произвести вычисление, но так же вывести дополнительные данные (значение переменных, текст), то необходимо использовать оператор конкатенации (&), а текст писать в кавычках (").
Пример:
="Ответ:" & (1+3)
или
="Автор: " & {=Document:CREATED_BY} & ", " & "Конечный срок: " & Dateadd({=Document:DATE_CREATE}, "1d")
Синтаксис символьных операторов аналогичен синтаксису соответствующих php-функций.
Доступны следующие операторы:
- + - сложение;
- - - вычитание;
- * - умножение;
- / - деление;
- = - равно;
- <> - не равно;
- < - меньше;
- > - больше;
- <= - меньше или равно;
- >= - больше или равно;
- () - порядок действий;
- & - оператор конкатенации, который возвращает строку, представляющую собой соединение левого и правого аргумента;
- ^ - возведение в степень;
- % - вычисление процентов;
- true - правда;
- false - ложь;
Источники для подробного изучения вопроса
https://www.php.net/manual/ru/function.date.php
https://helpdesk.bitrix24.ru/open/5426411
https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=57&LESSON_ID=4912&LESSON_PATH=5442.5446.5059.4912
#битрикс24 #модификаторы #админам #вебсайты