Заметки
Дата в БП: System:Date, System:Now, System:NowLocal — чем отличаются
Чем отличаются системные даты в бизнес-процессах Bitrix24 и почему сравнение дат может ломаться из-за времени и часового пояса.
{=System:Date} — это текущая дата без времени.
{=System:Now} — текущие дата и время сервера.
{=System:NowLocal} — текущие дата и время пользователя с учётом часового пояса.
Если смешать эти значения в одном условии, робот может сработать раньше или позже ожидаемого.
Задача
В бизнес-процессах Bitrix24 часто нужно сравнить дату из поля с текущей датой: проверить просрочку, поставить дедлайн, запустить действие сегодня или отложить задачу до нужного момента.
На этом месте легко ошибиться, потому что в БП есть несколько похожих системных значений:
{=System:Date}, {=System:Now} и {=System:NowLocal}.
Они похожи по названию, но дают разные результаты.
Если робот просто заполняет текстовое поле, разница может быть незаметной. Но в условиях, паузах, расчёте дедлайнов и сравнении дат она становится важной.
Чем отличаются значения
Главное отличие — есть ли во значении время и к какому часовому поясу оно относится.
{=System:Date} — это текущая дата без времени. Такое значение удобно,
если в логике нужен именно день: сегодня, завтра, дата отчёта, дата контрольной точки.
{=System:Date} {=System:Now} — текущие дата и время сервера. В коробочной версии это время
сервера, на котором установлен продукт. Такое значение подходит для технической логики,
которая должна опираться на серверное время.
{=System:Now} {=System:NowLocal} — текущие дата и время пользователя с учётом его часового
пояса. В CRM-роботах это часто более ожидаемый вариант, потому что он ближе к тому,
что человек видит в интерфейсе.
{=System:NowLocal} Из-за этого нельзя выбирать значение только по названию. Нужно понимать, что именно сравнивает робот: календарную дату, точный момент времени или момент времени глазами пользователя.
Где ломается сравнение дат
Самая частая ошибка — сравнивать поле типа Дата со значением, где есть
часы и минуты.
Например, в поле «Крайний срок» хранится только дата:
04.07.2026 А робот сравнивает её с текущим моментом:
{=System:NowLocal} Для пользователя это может выглядеть как «срок сегодня». Но для вычисления дата без времени часто превращается в начало дня. В итоге в середине дня условие может уже считать срок прошедшим.
Похожая проблема появляется, когда один сотрудник работает в одном часовом поясе,
а портал или сервер — в другом. Если сравнение построено на {=System:Now},
оно может сработать по серверному времени, а не по времени пользователя.
Поэтому для условий важно заранее решить, что именно считается просрочкой: наступление календарной даты или конкретное время внутри дня.
Что использовать в роботах
Универсального варианта нет. Выбор зависит от того, какую задачу должен решить робот.
Если нужно сравнивать только календарные дни, лучше использовать дату без времени:
{{=if({{Контрольная дата}} < {=System:Date}, "просрочено", "не просрочено")}} Если нужно сравнить точный момент времени, используйте дату со временем:
{{=if({{Крайний срок}} < {=System:NowLocal}, "просрочено", "не просрочено")}}
Если робот должен считать срок относительно пользователя, обычно логичнее брать
{=System:NowLocal}. Если логика техническая и должна быть единой для всех,
можно использовать {=System:Now}.
Для вывода даты в сообщении или комментарии можно дополнительно использовать модификаторы часового пояса. Например:
{{=Document:DEADLINE > responsible}}
Такой подход полезен, когда дата хранится как одно значение, но показать её нужно
во времени ответственного. Для похожих задач также используются модификаторы
local, server и responsible.
Главное — не смешивать два сценария. Для расчёта робот должен использовать подходящее значение даты, а для красивого отображения можно уже отдельно привести дату к нужному часовому поясу.