Работа с типами ДП в смартах¶
Работа с числами¶
При работе с числами используются обычные математические операторы, а также встроенные математические функции.
Результат деления чисел зависит от типов исходных данных (целое или десятичное число) — при делении целых чисел результатом будет целое число; если одно из чисел десятичное, то и результат будет десятичным числом.
Например:
-
1 / 5 = 0
-
1.0 / 5 = 0.2
-
1 / 5.0 = 0.2
-
1.0 / 5.0 = 0.2
При работе с десятичными числами (Decimal) функция Округлить ("Математические" — "Округлить") выполняет операцию округления, но возвращает не целое число, а десятичное с нулями после запятой. Чтобы получить целое число, используйте функцию ВЦелоеЧисло ("Строки" — "Преобразовать" — "ВЦелоеЧисло"):
Для преобразования числа в строку используется функция ВСтроку ("Числа" — "ВСтроку"):
Работа с датами¶
При работе с датами чаще всего используются функции форматирования (для приведения к нужному представлению), работы со сроками (прибавления определенного количества дней и т.п.) и формирования даты. Следует помнить, что в "Первой Форме" используются ДП типа "Дата" и "ДатаВремя".
Для получения текущей даты используется функция ТекущиеДатаВремя(). Для формирования даты используется функция НовыеДатаВремя (год, месяц, день, час, минуты, секунды).
Пример: формирование даты последнего рабочего дня месяца и окончания рабочего дня (18 часов).
Для работы со сроками используются встроенные функции из подменю Добавить..., Разница..., Округлить....
Пример: округление даты.
Для преобразования даты в текст используется функция Отформатировать дату (дата, шаблон). Шаблон указывается в виде текстовой строки вида \'dd.MM.yyyy HH:mi\'.
Если пользователи системы территориально находятся в разных часовых поясах, в смарт-выражениях удобно использовать функцию ПеревестиВЧасовуюЗонуПользователя (дата_время, ID пользователя).
Пример: перевод времени, указанного в ДП "Плановое время созвона", во время по часовому поясу заказчика задачи.
Работа со строками¶
Для последовательного соединения строк можно использовать обычный оператор сложения "+", а для сравнения — знак равенства "=".
Строковые выражения заключаются в одинарные кавычки.
При использовании функции для проверки наличия подстроки в значении ДП в карточке задачи рекомендуется дополнительно применять проверку на пустые значения. Если ДП не заполнен в карточке, его значение становится равным null. В таком состоянии любая операция поиска или сравнения, включая проверку на содержание подстроки, будет возвращать false, даже если логически ожидается иной результат. Функция IsNullString проверяет, является ли строка пустой или null, и если это так, то возвращает значение строки2, которую можно задать как пустую или по умолчанию.
Формат: СтрокаСодержит(IsNullString(\'строка\', \'возвратить если NULL\'), \'что содержит\')
Пример:
Работа с логическими выражениями¶
Логические выражения могут принимать значения true или false. Логические выражения могут соединяться операторами "И" и "ИЛИ", при необходимости с использованием отрицания "НЕ".
Также возможно использование специальных логических операторов "есть значение", "нет значения" и "есть ложь":
В базе данных приложения для ДП типа "Галочка" (checkbox) хранятся как строковое значение "да" (true) или "нет" (false), так и бинарное значение 1 или 0. Для доступа к бинарному значению надо использовать свойство "Галочка":
Обращаться к нему можно таким образом:
Также можно использовать и текстовое значение:
Работа с ДП "Выбор пользователей"¶
Значениями ДП "Выбор пользователя" могут быть:
-
пользователь или список пользователей;
-
группа или список групп;
-
элемент орг.структуры или список элементов орг.структуры.
В дереве сущностей для ДП типа "Выбор пользователей" есть отдельные "ветви" для каждого из этих трех типов значений:
Чтобы проверить, содержит ли выбранное значение только пользователей, без групп (для элементов орг.структуры аналогично), можно использовать такую конструкцию:
Для работы с ДП "Выбор пользователей" используются конструкции формата JSON:
'{"Users":{"Deleted":[XX,...,XX],"Added":[XX,...,XX]},"Groups":{"Deleted":[XX,...,XX],"Added":[XX,...,XX]},"OrgUnits":{"Deleted":[XX,...,XX],"Added":[XX,...,XX]}}'
В качестве ключей выступают типы значений — "Users", "Groups", "OrgUnits". Для каждого из них, в свою очередь, используются ключи, обозначающие операцию — добавление ("Added") и удаление ("Deleted") элементов.
В качестве значений (вместо XX) подставляются, соответственно, ID пользователей, групп или орг.единиц, преобразованные в текст.
Вся конструкция целиком представляет собой строку, поэтому она должна заключаться в одинарные кавычки и при ее формировании должен соблюдаться синтаксис работы со строками.
При изменении значения ДП с помощью смарт-автоматизации, если в параметре разрешено добавлять более одного элемента, новые пользователи добавляются к старым значениям, а не замещают их.
Пользователи¶
Чтобы в ДП "Выбор пользователя" записать одного или нескольких пользователей, надо указать список ID пользователя или список ID в формате {ID1, ID2, ...}. Например:
Орг.единицы¶
Чтобы в ДП "Выбор пользователя" записать одну или несколько орг. единиц, можно использовать следующие конструкции:
1. Напрямую (где "1234" и "5678" — это ID орг.единиц)
2. С помощью ДП (где "ДП_ID_орг.единицы" — это текстовый ДП, содержащий ID орг.единицы или список ID в формате {ID1, ID2, ...}.)
3. С помощью запроса (пример)
Группы¶
Чтобы в ДП "Выбор пользователя" записать одну или несколько групп, можно использовать следующие конструкции:
1. Напрямую (где "1234" и "5678" — это ID групп)
2. С помощью ДП (где "ДП_ID_группы" — это текстовый ДП, содержащий ID группы или список ID в формате {ID1, ID2, ...})
3. С помощью запроса (пример)
Работа с ДП "Адресаты Email"¶
Для работы с адресами E-mail используются конструкции формата JSON:
'{"ValsToAdd":[{"UserID":XX},...,{"Email":XX}],"ValsToDelete":[{"UserID":XX},...,{"Email":XX}]}'
Адресаты могут описываться по ID пользователя (ключ "UserID") или по адресу электронной почты (ключ "Email").
Для добавления адресатов в список используется ключ "ValsToAdd", а для удаления адресатов из списка — ключ "ValsToDelete".
Вся конструкция целиком представляет собой строку, поэтому она должна заключаться в одинарные кавычки и при ее формировании должен соблюдаться синтаксис работы со строками.
Операция Пример записи
Добавление пользователя с ID=1821 и внешним адресом электронной почты sdffd@mail.ru '{"ValsToAdd":[{"UserId":1821},{"Email":"sdffd@mail.ru"}]}'
Добавление пользователя с ID, получаемым как результат выражения '{"ValsToAdd":[{"UserId":' + ВСтроку( ID заказчика ) + '}]}'
Удаление пользователя с ID=14 и внешним адресом электронной почты fdsff@mail.ru '{"ValsToDelete":[{"UserId":14},{"Email":"fdsff@mail.ru"}]}'
Если операция выполняется над несколькими пользователями, они перечисляются через запятую '{"ValsToAdd":[{"UserId":2372},{"UserId":2225},{"UserId":2211}]}'
Smart-выражение может содержать несколько действий, в этом случае они перечисляются через запятую '{"ValsToAdd":[{"UserId":1821},{"Email":"sdffd@mail.ru"}],"ValsToDelete":[{"UserId":14},{"Email":"fdsff@mail.ru"}]}'
Работа с ДП Lookup¶
ДП типа Lookup содержит ссылку за задачу, поэтому через этот ДП можно обратиться к любому параметру этой задачи. Например:
Чтобы проверить, входит ли выбранная задача в определенный список задач, нажмите на ссылку "Выбрать значения для сравнения":
При этом откроется окно для выбора задач, из которых будет сформирован список для сравнения. Выбранные задачи необходимо отметить флажком в левом столбце.
В результате формируется выражение вида:
Если какая-то категория содержит ДП типа Lookup или "Список выбора задач из категории" со ссылкой на данную категорию, то в дереве сущностей появится объект:
(причем для каждого такого ДП в дереве сущностей будет присутствовать отдельный объект)
Кроме того, можно отобрать все ссылки на данную задачу с помощью объекта:
Работа с ДП "Выбор нескольких задач из категории"¶
Значение ДП типа "Выбор нескольких задач из категории" представляет собой массив ID задач. В явном виде оно записывается так:
{ID1,ID2,...}
Например:
{12345,6789,34567,...}
где 12345, 56789, 34567 и т.д. — ID выбранных задач.
Для работы с ДП типа "Выбор нескольких задач из категории" используются типовые конструкции дерева сущностей:
Если какая-то категория содержит ДП типа "Выбор нескольких задач из категории" со ссылкой на данную категорию, то в дереве сущностей появится объект (причем для каждого такого ДП в дереве сущностей будет присутствовать отдельный объект):
Кроме того, можно отобрать все ссылки на данную задачу с помощью объекта:
Для редактирования значений ДП используются следующие конструкции:
Операция
Синтаксис
Пример
Удаление задачи из списка
'-'+ВСтроку(ID_задачи)
"-123456"
из списка значений ДП "Выбор нескольких задач в категории" удаляется задача с ID = 123456
Удаление нескольких задач из списка
см. пример 2 из пункта "Несколько операций в одном смарт-выражении"
Добавление одной задачи в список
ВСтроку(ID_задачи)
"123456"
в список значений ДП "Выбор нескольких задач в категории" добавляется задача с ID = 123456
Добавление нескольких задач в список
ID задач можно перечислять, используя разделитель ]||[:
ВСтроку(ID_задачи)+'||'+ВСтроку(ID_задачи)
"111111]||[222222]||[333333"
в список значений ДП "Выбор нескольких задач в категории" добавляются задачи с ID 111111, 222222, 333333
Обновление комментария по выбранному значению
'='+ВСтроку(ID_задачи)+'||'+"текст_комментария"
"=123456||текст_комментария"
в списке значений ДП "Выбор нескольких задач в категории" для задачи с ID = 123456 добавляется комментарий с текстом "текст_комментария"
Несколько операций в одном смарт-выражении
Множество операций можно объединять через '#'
"-111111#222222||текст_комментария"
в списке значений ДП "Выбор нескольких задач в категории" удаляется задача с ID = 111111 и добавляется задача с ID = 222222 с комментарием "текст_комментария"
"-111111#-222222#-333333"
из списка значений ДП "Выбор нескольких задач в категории" удаляются задачи с ID 111111, 222222, 333333
Полная замена всех значений
Чтобы полностью заменить текущий набор значений ДП «Выбор нескольких задач из категории», передайте строку со списком ID задач с разделителем ]||[ и префиксом $. В этом режиме существующие значения ДП будут полностью очищены и заменены переданным набором.
Синтаксис: '$' + ВСтроку(ID1) + ']||[' + ВСтроку(ID2) + ']||[' + ...¶
Например, значение $123]||[456]||[789 полностью заменит текущий набор значений на задачи с ID 123, 456 и 789.
Работа с ДП "Таблица"¶
Работа с данными в ДП типа "Таблица" осуществляется на уровне строк: если надо добавить или изменить значение в ячейке таблицы, то происходит обращение ко всей строке таблицы. Для работы со строками таблицы используются конструкции формата JSON.
Ячейка таблицы описывается конструкцией вида:
ID_колонки:{"First":ХХ,"Second":YY}
В ключе "First" (вместо XX) указывается вносимое значение. Его тип должен соответствовать типу колонки. При формировании строки значение должно преобразовываться к текстовому виду. Например, для числового значения — с помощью функции ВСтроку(). Текстовые значения должны быть заключены в двойные кавычки.
Ключ "Second" для большинства ячеек может не указываться.
Строка таблицы описывается как набор ячеек:
{"First":"ID_строки","Second":{ID_колонки:{"First":ХХ,"Second":YY},...,ID_колонки:{"First":ХХ,"Second":YY}}}
Перед описанием строки ставится знак операции: "+" для добавления строки, "-" для удаления строки или "=" для изменения значений.
Вся конструкция целиком представляет собой строку, поэтому она должна заключаться в одинарные кавычки и при ее формировании должен соблюдаться синтаксис работы со строками.
ℹ️ При добавлении или изменении строки в ДП "Таблица" с помощью смарт-автоматизаций некоторые символы необходимо экранировать.
Двойные кавычки " необходимо экранировать символом обратного слеша \:
'123:{"First":"начало \"ABC\" продолжение"}'.
Символ обратного слеша \ необходимо повторять дважды:
'123:{"First":"начало \\\\ продолжение"}'.
Символ одинарной кавычки \' необходимо повторять дважды (в примере ниже подстрока АВС окружена одинарными кавычками, повторенными дважды):
'123:{"First":"начало ''ABC'' продолжение"}'.
Перенос строки \n \r экранировать не надо (перенос строки работает только для колонок "Большой текст", в режиме чтения перенос отображается как пробел, в режиме редактирования — как перенос):
'123:{"First":"первая строка \n \r вторая строка"}'
Добавление новой строки¶
При добавлении новой строки достаточно указать только те колонки, где в ячейках есть значения, пустые колонки можно пропустить. Поскольку при добавлении новой строки значение "ID_строки" не известно, оно не указывается. Массив с описаниями ячеек заключается в квадратные скобки [ ]. ID_колонки не берется в кавычки.
'+[{ID_колонки:{"First":ХХ,"Second":YY},...,ID_колонки:{"First":ХХ,"Second":YY}}]'
Пример добавления строки:
'+[{111:{"First":"' + ДП1 + '"},222:{"First":"'+ ВСтроку(ДП2) +'"}}]'
В данном примере 111 и 222 -- ID колонок таблицы (их можно посмотреть в настройках изменяемого ДП "Таблица"). ДП1, ДП2 -- вносимые значения (в данном примере ДП1 — текстовый параметр, а ДП2 — числовой).
Пример добавления строки с ДП Выбор пользователей:
Пример 1:
'{"Users":{"Deleted":[XX,...,XX],"Added":[XX,...,XX]},"Groups":{"Deleted":[XX,...,XX],"Added":[XX,...,XX]},"OrgUnits":{"Deleted":[XX,...,XX],"Added":[XX,...,XX]}}'
В данном примере используются конструкции формата JSON. В качестве ключей выступают типы значений — "Users", "Groups", "OrgUnits". Для каждого из них, в свою очередь, используются ключи, обозначающие операцию — добавление ("Added") и удаление ("Deleted") элементов. В качестве значений (вместо XX) подставляются, соответственно, ID пользователей, групп или орг.единиц, преобразованные в текст.
Пример 2:
'+[{9:{"First":"{\"Users\":{\"Added\":[2122]}}"}}]'
В данном примере 9 — это ID колонки в ДП "Таблица", а 2122 — ID пользователя, выбранного в ДП "Выбор пользователей".