Найти в Дзене
Ната Панчо

Битрикс24. Модификация типов данных

Очень удобный инструмент для вывода нестатичных данных. Самый простой пример, вывод данных юзера в нужном формате. {=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([начальная дата], [что добавлять]) В [что добавлять] можно вводить значения
Оглавление

Очень удобный инструмент для вывода нестатичных данных.

Пользователь

Самый простой пример, вывод данных юзера в нужном формате.

{=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 #модификаторы #админам #вебсайты