При работе с числами используются обычные математические операторы, а также встроенные математические функции.
Результат деления чисел зависит от типов исходных данных (целое или десятичное число) — при делении целых чисел результатом будет целое число; если одно из чисел десятичное, то и результат будет десятичным числом.
Например:
•1 / 5 = 0
•1.0 / 5 = 0.2
•1 / 5.0 = 0.2
•1.0 / 5.0 = 0.2
При работе с десятичными числами (Decimal) функция Округлить ("Математические" — "Округлить") выполняет операцию округления, но возвращает не целое число, а десятичное с нулями после запятой. Чтобы получить целое число, используйте функцию ВЦелоеЧисло ("Строки" — "Преобразовать" — "ВЦелоеЧисло"):
Варианты округления чисел
Для преобразования числа в строку используется функция ВСтроку ("Числа" — "ВСтроку"):
Преобразование числа в строку
При работе с датами чаще всего используются функции форматирования (для приведения к нужному представлению), работы со сроками (прибавления определенного количества дней и т.п.) и формирования даты. Следует помнить, что в "Первой Форме" используются ДП типа "Дата" и "ДатаВремя".
Для получения текущей даты используется функция ТекущиеДатаВремя(). Для формирования даты используется функция НовыеДатаВремя (год, месяц, день, час, минуты, секунды).
Пример: формирование даты последнего рабочего дня месяца и окончания рабочего дня (18 часов).
Смарт-выражение, формирующее дату последнего рабочего дня и время 18:00
Для работы со сроками используются встроенные функции из подменю Добавить..., Разница..., Округлить....
Пример: округление даты.
Округление даты
Для преобразования даты в текст используется функция Отформатировать дату (дата, шаблон). Шаблон указывается в виде текстовой строки вида 'dd.MM.yyyy HH:mi'.
Преобразование даты в текст
Если пользователи системы территориально находятся в разных часовых поясах, в смарт-выражениях удобно использовать функцию ПеревестиВЧасовуюЗонуПользователя (дата_время, ID пользователя).
Пример: перевод времени, указанного в ДП "Плановое время созвона", во время по часовому поясу заказчика задачи.
Перевод в другую часовую зону
Для последовательного соединения строк можно использовать обычный оператор сложения "+", а для сравнения — знак равенства "=".
Строковые выражения заключаются в одинарные кавычки.
Работа со строками
Работа с логическими выражениями
Логические выражения могут принимать значения 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, ...}. Например:
Смарт-выражение для работы с пользователями
Чтобы в ДП "Выбор пользователя" записать одну или несколько орг. единиц, можно использовать следующие конструкции:
•напрямую (где "1234" и "5678" — это ID орг.единиц)
Смарт-выражение для работы с орг. единицами напрямую
•с помощью ДП (где "ДП_ID_орг.единицы" — это текстовый ДП, содержащий ID орг.единицы или список ID в формате {ID1, ID2, ...}.)
Смарт-выражение для работы с орг. единицами с помощью ДП
•с помощью запроса (пример)
Смарт-выражение для работы с орг. единицами с помощью запроса
Чтобы в ДП "Выбор пользователя" записать одну или несколько групп, можно использовать следующие конструкции:
•напрямую (где "1234" и "5678" — это ID групп)
Смарт-выражение для работы с группами напрямую
•с помощью ДП (где "ДП_ID_группы" — это текстовый ДП, содержащий ID группы или список ID в формате {ID1, ID2, ...})
Смарт-выражение для работы с группами через ДП
•с помощью запроса (пример)
Смарт-выражение для работы с группами с помощью запроса
Для работы с адресами 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 |
Работа с данными в ДП типа "Таблица" осуществляется на уровне строк: если надо добавить или изменить значение в ячейке таблицы, то происходит обращение ко всей строке таблицы. Для работы со строками таблицы используются конструкции формата 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}}]'
Пример добавления строки с ДП Выбор пользователей
Внесение изменений в строку таблицы
При внесении изменений в строку можно указывать только те колонки, где значения изменяются. В остальных колонках значения останутся прежними. ID_строки берется в кавычки, ID_колонки — нет.
'={"First":"ID_строки","Second":{ID_колонки:{"First":ХХ},...,ID_колонки:{"First":ХХ}}}'
Пример изменения с вычисляемыми значениями
При удалении важен только ID строки, поэтому все остальное не указывается. ID_строки не берется в кавычки.
'-ID_строки'
Особенности работы с колонкой "Мультифайл"
В ключе "First" значение колонки с типом "Мультифайл" указывается в виде массива: [ { Name, FileId, PreuploadId, VersionId } ]
Ключ "Second" должен указываться только для ячеек типа "Выпадающий список". Для остальных типов этот ключ необязателен, поэтому может быть пропущен или равен "null".
Для выпадающих списков, которые формируются из таблицы, значение ключа "First" — это значение поля, указанного как "Колонка текста", а значение ключа "Second" — поля, указанного как "Колонка значения".
Ключи для выпадающего списка, который формируется из таблицы
Для выпадающих списков, которые формируются из набора элементов, и значение ключа "First", и значение ключа "Second" — это значение из колонки Текст.
Ключи для выпадающего списка, который формируется из набора элементов
Одновременное изменение (обновление) всех строк ДП "Таблица"
(может использоваться, например, при обмене данными с базами "1С:Предприятие")
Для одновременного обновления всех строк ДП "Таблица" могут использоваться два оператора: # и |. Эти операторы меняют исходное значение ДП "Таблица" на новое, переданное значение. Оба оператора работают примерно одинаково за исключением того, что оператор | сначала удаляет все строки из исходной таблицы, а потом создает их из переданных данных, а оператор # удаляет только те строки, которых нет в переданных данных, добавляет только те строки, которых нет в исходной таблице, и изменяет только те строки, которые присутствуют и в исходной, и в переданной таблице.
Формат записи для этих операторов одинаковый. ID_строки берется в кавычки, ID_колонки — нет.
'#{"ID_строки":{ID_колонки:{"First":ХХ},...,ID_колонки:{"First":ХХ}},...,{"ID_строки":{ID_колонки:{"First":ХХ},...,ID_колонки:{"First":ХХ}}}'
или
'|{"ID_строки":{ID_колонки:{"First":ХХ},...,ID_колонки:{"First":ХХ}},...,{"ID_строки":{ID_колонки:{"First":ХХ},...,ID_колонки:{"First":ХХ}}}'
Если ID существующих строк ДП "Таблица" точно не известны, лучше использовать оператор |. В этом случае нумерация (ID) добавляемых строк начинается с 1, поскольку сначала удаляются все строки исходной таблицы. |
---|
Если в ДП "Таблица" есть скрытые колонки, то их обязательно нужно заполнять, иначе возникнет ошибка. |
---|
Пример одновременного обновления всех строк
К текущей (актуальной) версии файла вы можете обратиться непосредственно через ДП.
Если в настройках ДП включен признак Мультифайл, в один ДП можно вложить сразу несколько файлов. С такими ДП нужно работать как с коллекцией. Если признак Мультифайл не включен, с ДП нужно работать как с единичным объектом.
Работа с ДП "Файл" как с единичным объектом: Обращение к файлу, вложенному в ДП без признака "Мультифайл" |
Работа с ДП "Файл" как с коллекцией: Обращение к файлу, вложенному в ДП с признаком "Мультифайл" |
Для обращения к файлам, вложенным в текущую задачу, используется коллекция Связи файлов с задачами, а для обращения к файлам, вложенным в ДП в текущей задаче — Связи файлов с ДП.
Работая с этими коллекциями, вы можете выбирать как сам элемент, так и его свойство FileInfo, которое содержит полную информацию о файле.
Отбор файлов, вложенных в задачу (два варианта) |
Отбор по объектам "Связи файлов с задачами" и "Связи файлов с ДП" дает корректные результаты только в контексте текущей задачи. |
---|
Смарт-выражение, использующее отбор из объектов "Связи файлов с задачами" или "Связи файлов с ДП", может возвращать как один, так и несколько файлов (список). Кроме того, если смарт-выражение должно вернуть несколько файлов, можно использовать объединение. Например, чтобы вложить в письмо все файлы, вложенные в задачу, и файл, вложенный в ДП в этой задаче, можно использовать такое-смарт-выражение:
В письмо вкладываются файлы из задачи и файл из ДП
Добавление файлов к уже вложенным
Если в значении ДП уже есть вложеные файлы и необходимо не заменить значения, а добавить файлы к уже имеющимся, используется перечисление id файлов через запятую в следующем формате: '+id_файла1, id_файла2, id_файла3'
Пример:
В ДП "Файл" вкладываются файлы без очищения старого значения
Версии файла
Обращаться можно не только к текущей версии, но и к любой предыдущей версии файла. Самый простой вариант получить ссылку на определенную версию файла — сформировать строку типа FileID.VersionID.
Пример обращения к первой версии файла, вложенного в ДП
Версии файла могут быть скрытыми (служебными). Такие версии не отображаются в истории версий в пользовательском интерфейсе, но к ним можно обратиться, например, через смарт-выражение. Скрытые версии создаются с помощью смарт-действия "Скопировать версию файла" с включенным флажком "Системная копия". Кроме того, скрытые версии могут создаваться при акцепте подписи, в момент сохранения "цифрового снимка" задачи. Создание таких скрытых копий определяется флажком "Создавать системные копии вложенных файлов при акцепте подписи" в настройках категории, ДП "Файл" или колонки "Файл" в ДП "Таблица". |
---|
Вложение файлов из других задач
Объекты "Связи файлов с задачами" и "Связи файлов с ДП" можно использовать напрямую только в контексте текущей задачи. Чтобы обратиться к файлам, вложенным в другую задачу, можно использовать конструкцию смарт-выражения как на скриншоте ниже. Исходная задача имеет ID=123456. Смарт-пакет с действием "Вложить файл" запускается из целевой задачи.
Пример копирования всех вложенных файлов из одной задачи в другую.
Способ, описанный выше, можно использовать только чтобы обратиться сразу ко всем файлам, вложенным в исходную задачу. Если нужно выбрать один из вложенных файлов или файл, вложенный в ДП, следует использовать SQL-запрос.
Обращение к файлам через SQL-запрос
Для обращения к файлам, в том числе из других задач, можно использовать запросы к БД.
Если "Первая Форма" использует собственное файловое хранилище (Диск), то данные о файлах содержаться в таблице FileStorageFiles, а связи с задачами и ДП — в таблицах FileStorageFileToTasksLinks и FileStorageFileToExtParamLinks. Версии файлов хранятся в таблице FileStorageFileVersions. Файловые провайдеры перечислены в таблице FileProviders.
/* Базовые мета-данные файлов (без версий) с атрибутом удален ли файл IsDeleted */
SELECT TOP 3 FileId, Name, IsDeleted, *
FROM FileStorageFiles
/* Мета-данные версий файлов с указанием id провайдера и ключа файла */
SELECT TOP 3 FileId, VersionId, FileProviderId, FileProviderKey, *
FROM FileStorageFileVersions
/* Список файловых провайдеров */
SELECT TOP 3 * FROM FileProviders
/* Связь файлов с задачами (без версионирования) */
SELECT TOP 3 *
FROM FileStorageFileToTaskLinks
/* Связь версий файлов с ДП и ДП "Таблица" */
SELECT TOP 3 FileId, VersionId, ExtParamId, TableColumnID, TableRowID, *
FROM FileStorageFileToExtParamLinks
/* Контент файлов (отдельная БД) */
SELECT TOP 3 * FROM [TaskFilesDB].dbo.UploadFiles
Работа с блоком "Используется"
Для более точного отбора задач в блоке "Используется" могут использоваться смарт-фильтры. Для обращения к параметрам той задачи, которая содержит блок "Используется", служат параметры события "Во время открытия задачи":
Обращение к параметрам задачи с блоком "Используется"
Для обращения к параметрам задач, которые отображаются в блоке "Используется", служат параметры, расположенные вне контекста события, ниже в дереве сущностей:
Обращение к параметрам блока "Используется"
Для обращения к дополнительным параметрам основной задачи и задач в блоке "Используется" служат объекты "Значения ДП":
Обращение к ДП задачи с блоком "Используется" и задач, которые в этом блоке отображаются
Для работы с ресурсами в обычных задачах используются следующие объекты (коллекции):
Объект (коллекция) |
Описание |
---|---|
Плановые трудозатраты |
Работает с таблицей TaskResourcesPlanEntries, содержащей плановые трудозатраты по дням для задач в разрезе исполнителей и видов ресурсов |
Плановые ресурсы |
Работает с таблицей TaskResources, содержащей общие плановые трудозатраты для задач по видам ресурсов |
Фактические трудозатраты по исполнителям |
Работает с таблицей TaskResourceFactAggregated, содержащей общие фактические трудозатраты по задачам в разрезе исполнителей и видов ресурсов |
Фактические трудозатраты по дням |
Работает с таблицей TaskResourcesFactEntries, содержащей фактические трудозатраты по дням для задач в разрезе исполнителей и видов ресурсов |
Объекты (коллекции) по ресурсам и трудозатратам
Перечисленные ниже объекты (коллекции) должны использоваться только в контексте задач из системного справочника ресурсов:
Объект (коллекция) |
Описание |
---|---|
Плановые трудозатраты по этому ресурсу (только для задач из справочника ресурсов) |
Работает с таблицей TaskResourcesPlanEntries, содержащей плановые трудозатраты по дням для задач в разрезе исполнителей и видов ресурсов |
Фактические трудозатраты по этому ресурсу по исполнителям (только для задач из справочника ресурсов) |
Работает с таблицей TaskResourceFactAggregated, содержащей общие фактические трудозатраты по задачам в разрезе исполнителей и видов ресурсов |
Фактические трудозатраты по этому ресурсу по дням (только для задач из справочника ресурсов) |
Работает с таблицей TaskResourcesFactEntries, содержащей фактические трудозатраты по дням для задач в разрезе исполнителей и видов ресурсов |