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

Круглые скобки ( )

Используются:

1) Для вызова функции
Например: Date(); User(); IsNull(...); GetList(...)

Без скобок функция не выполняется.

2) Для группировки выражений

if((This("Инициатор.Название")=="Примерсофт"), ...)

Используются при :

Используются для явного указания приоритета выполнения операций. 

Фигурные скобки { }

Используются:

Квадратные скобки [ ]

Используются внутри строк (например, при формировании параметров API или JSON) для обрамления значения параметра

Запятая ,

Разделяет параметры функции/оператора, например:
if(условие, значение1, значение2)

Например

if(IsNull(This('Дата начала (План)')), Date(), This('Дата начала (План)'))

ВНИМАНИЕ! Лишняя запятая приводит к ошибке.

Кавычки

Используются для обозначение строковых литералов.

Например:

Field('Название')
Parent('Быстрые ссылки', true)

ВНИМАНИЕ! Рекомендуем использовать Одинарные кавычки ' '

Экранирование кавычек

1. Когда требуется экранирование

Экранирование знаком "слэш" \ используется, если внутри строки необходимо поставить такие же кавычки, которыми эта строка ограничена.

Если строка заключена в ' ', то внутренние ' ' нужно записывать как:

\'

2. Примеры, когда экранирование ОБЯЗАТЕЛЬНО

1) В строковых фильтрах GetList


Неправильно:
'i => i.Id == Guid('84124eed-7049-46a8-bac9-a179ff00efe3')'


Правильно:
'i => i.Id == Guid(\'84124eed-7049-46a8-bac9-a179ff00efe3\')'

2) При формировании JSON внутри строки

Например:

'{\'id\':\'84124eed-7049-46a8-bac9-a179ff00efe3\'}'

3) В iFormat и строковых шаблонах

Например:

iFormat('param=\'{0}\'', Id())

Если строка находится внутри другой строки — экранирование обязательно.

3. Когда экранирование НЕ требуется

4. Правило проверки:

Если кавычка находится внутри уже открытой строки — требуется экранирование.

Точка . — переход к связанному объекту

Используется для доступа к атрибуту связанного объекта, например:

This('Инициатор.Название')
This('source.contenttype.name')

Структура: объект → связанный объект → его свойство

Оператор +

Используется для объединения строк, например:

Shrink(Field('Название'), 5, 3, '-') + '_' + Hash(Field('Название'), 2)

Если один из элементов строка, то выполняется конкатенация.

Лямбда-выражение =>

Используется в фильтрах GetLis, например:

'i => i.ContentTypeId == Guid("84124eed-7049-46a8-bac9-a179ff00efe3")'

Структура:
переменная => условие

Обязательная проверка перед сохранением

Перед сохранением формулы необходимо проверить: