Перейти к содержанию

Категории

⚠️ Терминологическая инверсия (важно для поиска и разработки). В БД 1Формы таблица Subcategories хранит Категории (entity types — Клиенты, Договоры, Продажи), а Categories хранит Разделы (namespaces/папки — CRM, HR, Finance). Это инверсия индустриальной конвенции, где Category = тип сущности, а Subcategory = подтип. Сверяться с таблицей ниже и глоссарием.

Категория (entity type / bounded context) — это шаблон, по которому создаются задачи определённого вида: заявки, договоры, поручения, обращения и т. п. Категория определяет, как выглядит форма задачи, по какому маршруту (workflow / state machine) она движется, какие у неё дополнительные поля (ДП, custom fields), как отображается список задач и у кого есть к ним доступ.

Настройка категории — самый объёмный раздел администрирования: у одной категории сотни параметров. Этот документ помогает разобраться, где и как они настраиваются и как диагностировать проблемы.

Сокращения в документе:

  • ДП — дополнительные параметры (настраиваемые поля задачи);
  • НТФ — форма создания новой задачи;
  • МТФ — карточка (форма) открытой задачи;
  • БИ — блоки «Используется» (связанные задачи и объекты в карточке);
  • БП — бизнес-процесс.

Механизмы администрирования

Автоадминка (dbadmin)

Часть настроек категории доступна через формы автоадминки (dbadmin) по их alias:

Alias формы Название Таблица БД Полей Секций Где используется
subcategories Категории dbo.Subcategories 319 24 Основной массив флагов и параметров категории
categories Разделы dbo.Categories 15 1 Иерархия разделов (папок). Терминология: таблица Categories = Разделы, таблица Subcategories = Категории (см. глоссарий в корневом CLAUDE.md)
states Статусы dbo.States 21 1 Справочник статусов маршрута
bp-roles Роли dbo.BpRoles 6 1 Роли БП
bp-roles-groups Привязки групп к ролям dbo.BpRolesGroups 4 1 Связь ролей и групп
bp-roles-steps Привязка роли к переходу и подписи dbo.BpRolesSteps 10 1 Роли на шагах маршрута + подписи
subcat-notes Примечания dbo.SubcatNotes 8 1 Служебные заметки по категориям; HTML — только базовое форматирование (списки, ссылки, выделение)
subcat-state-hints Подсказки dbo.SubcatStateHints 5 1 UI-подсказки по статусам; HTML — только базовое форматирование
signatures Подписи dbo.Signatures 3 1 Справочник подписей
technical-works Технические работы dbo.Subcategories 279 — Срез для техработ и сервисной диагностики

EntityEditor

Сводные категории и их состояния настраиваются через EntityEditor:

Схема Таблица БД Назначение
summarycategories.json SummaryCategories Сводные категории, группы доступа, тип поиска
summarycategoriesstates.json SummaryStates Связи «сводная категория ↔ состояния категорий»

Форма сводного раздела: защита от несохранённых изменений. В форме создания и правки сводного раздела задают описание, тип поиска, группы доступа и список пар «категория — статус»; запись выполняется кнопкой «Создать» или «Сохранить». Форма сравнивает текущее состояние с последним загруженным или сохранённым: если уйти с изменениями — кнопкой «Отмена» или по хлебным крошкам, — открывается окно «Сохранить изменения» с действиями «Сохранить», «Не сохранять» и крестиком. «Сохранить» записывает раздел и выполняет переход только после успешной записи: при ошибке записи или незаполненной форме переход не происходит, а введённые значения остаются на месте. «Не сохранять» выполняет переход без записи, крестик оставляет форму открытой. Если изменений нет, уход происходит без вопроса.

FormsGenerator

Форма редактирования категории (API) — только чтение:

  • GET /api/admin/forms/scheme/SubCategory
  • GET /api/admin/forms/{entity}/{key}

Запись через форму недоступна: POST /api/admin/forms/{entity}/{key} отвечает 405. Категорию сохраняют страницы настроек AdminSPA, контроллеры api/admin/subcategories/* и автоадминка формы subcategories.

Форма редактирования разбита на блоки (на эти имена ссылаются разделы «Где настраивается» ниже):

Блок (SchemeBlock) Порядок Фокус
stdHeaderMain 0 Основные свойства категории
stdHeaderTerms 1 Сроки, дедлайны, напоминания
stdHeaderWord 2 Word/редлайн/сравнение файлов
EditSubcat_Counters 3 Счетчики просмотров/комментариев/лайков
stdHeaderAuto 4 Автоматизация и SP-хуки
EditSubcategory2_PerformersSubscribers 5 Исполнители/подписчики/ограничения
stdHeaderTaskText 6 Текст задачи, комментарии, поиск

Поиск по полям формы. В верхней части формы редактирования настроек категории в AdminSPA доступно поле поиска — фильтрует список секций и полей среди 319 настроек по вхождению подстроки в название (регистр не учитывается). При непустом запросе секция отображается, если её название или название хотя бы одного поля внутри неё содержит подстроку.

Admin API

Программно категории настраиваются через Admin API:

Маршрут Методы Назначение
/api/admin/categories GET, POST, DELETE Управление разделами, копирование, массовые уведомления, отзыв прав
/api/admin/subcategories GET, POST Управление категориями (создание, копирование, удаление, очистка), зависимости Lookup, массовая генерация текста
/api/admin/subcategories/tree GET Полное дерево категорий для админки
/api/admin/subcategories/{subcatId} GET, POST Основные и доп. настройки, панель инструментов, начальный статус, порядок полей МТФ
/api/admin/subcategories/blocks* GET, POST, PUT, DELETE Блоки формы, таблицы в блоках, порядок и связи
/api/admin/subcategories/*/buttons GET, POST, DELETE Кнопки в карточке задачи
/api/admin/subcategories/*/files GET, DELETE Файлы категории и генерация шаблона DOCX
/api/admin/subcategories/{subcatId}/includes/* GET, POST, DELETE JS/CSS/HTML-вставки для НТФ/МТФ
/api/admin/subcategories/{subcatId}/news-settings GET Настройки новостных категорий
/api/admin/subcategories/{subcatId}/resources GET, POST Ресурсные категории и доступные ресурсы
/api/admin/subcategories/{subcatId}/survey-settings GET, POST Настройки опросов
/api/admin/subcategories/{subcatId}/settings/text GET, POST Настройки секции «Текст»: режим текста, длина, уникальность, текст по умолчанию, HTML, изображения, локализация, права на правку, скрытие текста
/api/admin/subcategories/{subcatId}/settings/comments GET, POST Настройки секции «Комментарии»: включение комментариев, реакции, право авторов редактировать свои комментарии, запрет комментирования закрытых задач, запрет добавления комментариев, скрытие системных комментариев, запрет удаления пользовательских, автопрочтение при закрытии задачи, отправка комментария при сохранении истории изменений ДП
/api/admin/subcategories/{subcatId}/settings/participants GET, POST Настройки страницы «Участники»: режим назначения исполнителя, флаги исполнителей, ограничение исполнителей смарт-выражением, заказчик, подписчики, специальные пользователи
/api/admin/subcategories/{subcatId}/settings/due-date GET, POST Настройки секции «Срок»: режим срока, длительность по умолчанию, минимальный и рекомендуемый срок, ограничения на время, напоминания о приближении срока
/api/admin/subcategories/{subcatId}/settings/general GET, POST Настройки страницы «Общие настройки»: снимок из 14 полей; записываются модуль, ответственная группа, режим отображения на главной, инструкция, иконка, цвет, конфиденциальность, заметки, реакции на объекты и категория-источник шаблонов задач, а раздел, тип категории, режим шифрования и название — только на чтение
/api/admin/subcategories/{subcatId}/settings/mail GET, POST Настройки страницы «Почтовые сообщения»: отправка почтовых сообщений по задачам категории, параметр ДП и текст в заголовках писем, письмо об отклонении задачи, адрес и имя отправителя для внешних пользователей. Доступ — администратор системы или администратор категории
/api/admin/subcategories/{subcatId}/settings/task-card GET, POST Настройки секции «Карточка задачи»: снимок из 20 полей — показ основного маршрута, приоритет, отображение статуса и начала работы, разрешения на время начала, кнопки «Делегировать» и «перенести срок», название кнопки дополнительных действий, число колонок табличного ДП по умолчанию, цвет блоков ДП и их положение, компактность переходов и действий, режим расположения кнопок и смарт-выражение расположения, имя стандартного блока ДП, смарт-условие повторений, скрытие даты создания, кнопки «предыдущая / следующая»
/api/admin/subcategories/{subcatId}/universal-templates GET, POST Универсальные шаблоны и правила применения
/api/admin/subcategories/{subcatId}/states GET Статусы маршрута категории (id + локализованное описание) для настройки подсказок по статусам; 404 для несуществующей категории
/api/admin/subcategories/steps GET, POST, DELETE Переходы маршрута в категории
/api/admin/subcategories/steps/{stepId}/actions-with-ep GET, POST, DELETE Действия над ДП/файлами/шаблонами на переходах
/api/admin/states-routes/packs-on-events GET Пакеты действий до/после перехода
/api/admin/states-routes/{stepId}/ext-params GET, POST, DELETE Ограничения переходов по ДП
/api/admin/states-routes/{stepId}/subtasks GET, POST, PUT, DELETE Автоподзадачи на переходах

При сохранении настроек категории POST/PUT-запрос должен нести тело: пустое тело или null отклоняется с ответом 400 и сообщением о пустом теле, настройки при этом не меняются.

Для подкатегорий с чатовым типом представления в Admin SPA дополнительно отображается секция «Настройки МТФ-панели» (чекбокс showMtfPanel + мультиселект mtfPanelGroupIds). Хранение — dbo.Subcategories (ShowMtfPanel, MtfPanelGroupIds). API: GET/PUT /api/admin/subcat/{subcatId}/settings. Бизнес-правила видимости панели описаны в бизнес-документации чата, раздел «Видимость МТФ-панели».

Список категорий, создание и переход к настройкам

Все категории площадки собраны в реестре Категории и процессы (Администрирование → Категории). Для каждой категории в списке видны ID, наименование, модуль, раздел, описание, ответственная группа и режим отображения; в блоке действий доступна кнопка «Очистить», удаляющая все задачи категории.

Список категорий: ID, наименование, раздел, ответственная группа и действия

Чтобы найти категорию по номеру задачи, введите номер в поисковую строку над списком — система покажет категорию, которой принадлежит эта задача.

Поиск категории по номеру задачи в списке категорий

Создание категории

Новая категория создаётся кнопкой «Создать» в панели инструментов. В окне создания заполняют три поля: раздел, название категории и тип.

Окно создания категории: раздел, название категории и тип

Раздел — родительский раздел, в который попадёт категория (категория обязательно принадлежит какому-либо разделу). Рядом с полем выводится выбранное значение или «Не выбрано», а кнопка «Выберите раздел» открывает окно с деревом разделов. Дерево сразу раскрыто до текущего выбранного раздела, на любую глубину вложенности, и он отмечен в списке. Выбрать можно любой узел, включая родительский; разделы без вложенных категорий тоже показаны. Поиск в окне работает по названию и по ID раздела.

Выбор раздела при создании категории

Тип определяет, как будет работать процесс и какие возможности появятся внутри категории: «Задачи» (по умолчанию), «Справочник», «Ресурсы», «Экземпляры ресурсов», «Пространство», «Чаты/каналы», «Новости», «Группы соц. сетей» и «Календарь». У каждого типа в списке есть краткое описание.

Выбор типа категории при создании

Копирование категории

Категорию можно создать копированием существующей: переносятся все настройки, ДП и автоматизации (включая смарты и статические подписи маршрута). Для этого служит кнопка «Копировать категорию» в панели инструментов.

Форма копирования категории

В окне копирования вводят название новой категории и выбирают категорию-источник.

⚠️ Копирование идёт по секциям: сама категория, её настройки, дополнительные параметры и их привязка к блокам формы, смарт-выражения и остальное. Сбой в отдельной секции не отменяет всю операцию: система пишет ошибку в журнал и продолжает с остальными секциями, поэтому новая категория создаётся, но часть переносимого в ней может отсутствовать. После копирования стоит сверить состав новой категории с источником — в первую очередь привязку дополнительных параметров к блокам формы.

Копия получает и общие настройки табличного представления: вид списка задач категории и вид таблиц блоков «Используется». У блоков переносится настройка каждой вкладки (таблицы) — состав и порядок колонок, ширина, закрепление, группировка, сортировка и фильтры, заданные администратором, — вместе с классическим видом колонок блока. Настраивать их в копии заново не нужно; колонки, которых нет в источнике вкладки, в копии не восстанавливаются.

Переносятся только общие настройки, действующие для всех пользователей. Личные настройки отображения не копируются — вид под себя каждый пользователь настраивает сам. Отбор, заданный в настройке вида смарт-фильтром, в копию не переносится.

Пример копирования категории: название копии и категория-источник

Главная страница настроек категории

Выбор категории в списке открывает её настройки — блоки «Основные настройки», «Настройки категории», «Доступ», «ДП», «Маршрут», «Смарты», «Формы» и «Уведомления». Отсюда же категорию можно удалить или очистить от задач.

Главная страница настроек категории с блоками настроек

Чипы блока «Основные настройки» открывают отдельные страницы настроек AdminSPA для открытой категории:

Чип Страница
Исполнители administration/participants-executors/{subcatId}
Несколько исполнителей administration/participants-multi-performers/{subcatId}
Заказчик и подписчики administration/participants-customers/{subcatId}
Перенос и копирование задач administration/tasks-move-copy-settings/{subcatId}
Почтовые сообщения administration/subcategory-mail-messages/{subcatId}
Автоматизация administration/subcat-automation/{subcatId}

{subcatId} — идентификатор открытой категории.

Переход к настройкам категории из пользовательского интерфейса

Открыть настройки категории можно не только из режима администрирования, но и из пользовательского интерфейса.

Из дерева «Категории» в левом меню — через контекстное меню категории, пункт «Настройка».

Переход к настройкам категории из дерева категорий

Из табличного представления категории — пункт «Настройка» в меню доступных действий.

Переход к настройкам категории из списка задач категории

Из карточки задачи — пункт «Настройка» в списке действий панели инструментов.

Переход к настройкам категории из карточки задачи

Из открытого окна настроек категории текущий экран можно открыть в отдельной вкладке браузера — кнопкой «Открыть в новой вкладке». Откроется тот же экран настроек, на котором вы находитесь, как полноценная страница 1Формы (с шапкой и навигацией), а не в упрощённом виде.

Ключевые настройки

1. Основные свойства категории

Где настраивается:

  • автоадминка: subcategories
  • FormsGenerator: stdHeaderMain
  • API: POST /api/admin/subcategories/{subcatId}/settings
  • API страницы «Общие настройки»: GET / POST /api/admin/subcategories/{subcatId}/settings/general

Таблица БД: dbo.Subcategories

Ключевые поля:

Поле Что контролирует
SubcatName Имя категории в UI
Details Описание категории
CategoryId Родительский раздел
OneFMainVisibilityMode Режим видимости в 1F-main
IsDictionary Режим справочника
IsCalendar Календарный тип
FileProviderId Провайдер файлов по умолчанию
ConfidentialMode Конфиденциальность: выключена, разрешена установка флага на задачах или все задачи категории конфиденциальны (см. модель прав)

Зависимости между полями:

  • CategoryId обязателен при создании категории.
  • IsCalendar влияет на доступность смежных календарных сценариев и на требования к датам задач.

Форма «Общие настройки» категории: название, раздел, тип, владелец, режимы отображения и конфиденциальности

Контракт страницы «Общие настройки». Отдельный контракт GET и POST /api/admin/subcategories/{subcatId}/settings/general отдаёт и принимает полный снимок страницы — те же 14 полей, что видит администратор. Записываются десять: модуль, ответственная группа, режим отображения на главной, инструкция, иконка и цвет аватара, режим конфиденциальности, заметки, реакции на объекты и категория-источник шаблонов задач. Четыре поля — раздел, тип категории, режим шифрования задач и название категории — только показываются: если в запросе пришло другое значение любого из них, запрос отклоняется целиком с кодом 400, и остальные поля тоже не сохраняются.

Название категории правится на странице «Названия элементов», где переименование пересчитывает путь категории. Раздел, тип категории и режим шифрования этим контрактом не меняются: перенос категории между разделами задевает права и маршруты, смена типа добавляет системные дополнительные параметры, а смены режима шифрования для уже созданных задач не происходит — они остаются в прежнем режиме.

Контракт доступен только глобальному администратору. POST отвечает перечитанными значениями, изменение записывается в журнал административных операций со значениями до и после, после сохранения сбрасывается кэш категории. Побочные действия выполняются только при фактической смене значения: смена режима отображения на главной массово обновляет получателей комментариев по задачам категории, смена режима конфиденциальности затрагивает существующие задачи. Иконка нормализуется: пустое значение означает, что иконка не задана, значение длиннее 100 символов отклоняется.

Заданные иконка и цвет категории видны не только на странице категории, но и в дереве выбора категории: в админском дереве категорий у таких категорий показывается иконка и цвет, у категорий без заданных значений — прежние значения по умолчанию.

2. Блоки формы задачи (МТФ)

Где настраивается:

  • API: блоки формы
  • API: основные настройки (mtf/orderable-items, mtf/reorder-items)
  • API страницы «Карточка задачи»: GET / POST /api/admin/subcategories/{subcatId}/settings/task-card

Таблицы БД:

  • dbo.CustomTaskUsedAsEpBlockSettings
  • dbo.Subcategories (часть общих МТФ-флагов)

Ключевые поля/объекты:

Элемент Что контролирует
Блок формы Контейнер для ДП и таблиц
Таблица в блоке Настройка таблицы внутри блока
Порядок МТФ Порядок элементов на форме задачи
Кнопки формы Связанные действия в карточке (МТФ)

Зависимости между полями:

  • Порядок МТФ зависит от включенности и видимости блока.
  • Связи таблиц с блоками влияют на фактическое расположение ДП в карточке.

Контракт секции «Карточка задачи». Отдельный контракт GET и POST /api/admin/subcategories/{subcatId}/settings/task-card отдаёт и принимает полный снимок секции «Карточка задачи» формы subcategories — те же двадцать полей, что видит администратор. До него общий контракт настроек категории работал только с тремя из них — ReccurenceAvailableSmartExpressionId, IsCreationDateHidden и ShowPrevNextButtons; они продублированы в новом контракте, чтобы страница не читала свои значения из двух мест. Остальные семнадцать полей доступны только через этот контракт.

Тело POST — полный снимок секции: поле, которого нет в запросе, не сохраняет прежнее значение, а получает значение по умолчанию — false для логических полей и Start для режима расположения кнопок. Поля вне снимка при сохранении не меняются, поведение карточки задачи контракт не затрагивает, легаси-маршрут GET api/storage/subcategories/{id} продолжает работать как прежде.

Контракт доступен администратору системы и администратору категории. POST отвечает перечитанными значениями, изменение записывается в журнал административных операций, после сохранения сбрасывается кэш категории. Запрос без тела отклоняется с ответом 400.

Поля секции «Карточка задачи»:

Поле Тип Что контролирует
ShowMainRoute Логическое Показывать основной маршрут
AllowPriority Логическое Разрешить устанавливать приоритет
DisplayTaskState Логическое Отображать статус в задаче
DisplayTaskStartDate Логическое Отображать начало работы в задаче
AllowSetStartTimeInPast Логическое Разрешить устанавливать время начала в прошлом
AllowChangeTaskStartTimeInClosedTasks Логическое Разрешить менять время начала в закрытых задачах
DisplayTaskDelegateButton Логическое Отображать кнопку «Делегировать»
DisplayTaskChangeDueDateButton Логическое Отображать кнопку «Перенести срок» / «Установить срок»
ExtraActionsName Строка Название кнопки дополнительных действий
MtfDefaultExtParamTableColumns Число (может быть пустым) Число колонок таблицы ДП по умолчанию на МТФ
ExtParamsBlocksColor Строка Цвет блоков дополнительных параметров
ShowExtParamsAfterBlocks Логическое Показывать дополнительные параметры после блоков
IsCompactTransitions Логическое Компактные переходы
IsCompactActions Логическое Компактные действия
ButtonsPositionMode Перечисление Режим расположения кнопок; по умолчанию — Start
ButtonsPositionSmartExpressionId Число (может быть пустым) Смарт-выражение расположения кнопок
DefaultExtParamBlockName Строка Имя стандартного блока ДП
ReccurenceAvailableSmartExpressionId Число (может быть пустым) Смарт-выражение доступности повторений
IsCreationDateHidden Логическое Скрывать дату создания
ShowPrevNextButtons Логическое Показывать кнопки «предыдущая / следующая»

3. Исполнители и подписчики

Где настраивается:

  • AdminSPA: настройки участников — на отдельных страницах: «Исполнители» — administration/participants-executors/{subcatId}, «Заказчик и подписчики» — administration/participants-customers/{subcatId}, «Несколько исполнителей» — administration/participants-multi-performers/{subcatId}, «Специальные пользователи» — administration/participants-spec-users/{subcatId}
  • API страницы «Участники»: GET / POST /api/admin/subcategories/{subcatId}/settings/participants
  • FormsGenerator: EditSubcategory2_PerformersSubscribers
  • API: POST /api/admin/subcategories/{subcatId}/settings

Таблица БД: dbo.Subcategories (+ связи по группам/подписям)

Ключевые поля:

Поле Что контролирует
PerformerMode Режим автоподстановки исполнителей. Значение «обязателен» несовместимо с отключённой формой создания задачи — см. раздел 26
DoNotSelectOwner Не подставлять заказчика автоматически
RestrictPerformerRemove Ограничить удаление исполнителей
AllowGroupSubcription Разрешить подписку группами. Действует только на выбор подписчиков; на кандидатов в исполнители и заказчика не влияет — там группы отбираются по флагу типа группы «Можно добавлять в адресаты» и праву «Исполнять»
AllowMultiFinished Режим мультизавершения
MultiFinishAction Поведение после завершения участником
AllowNewTaskSeparate Создавать отдельную копию задачи каждому исполнителю
HelpersAction Действие для помощников: добавить в исполнители, добавить в подписчики или ничего не делать
AllowSetSinglePerformer Принудительно один исполнитель
SpecialUsersSmartExpressionId Смарт-определение спецпользователей
PerformersRestrictionSmartExpressionId Смарт-ограничение набора исполнителей
AllowChangePerformersInOverdueTask Разрешить смену исполнителей в просроченных задачах. Без флага в просроченной незакрытой задаче исполнителей нельзя добавлять и снимать — действие отклоняется с сообщением о запрете

Зависимости между полями:

  • DelegateTaskConfirmSignature → либо DelegateTaskConfirmSignatureId, либо DelegateTaskConfirmSignatureSmartExpressionId.
  • TaskOwnerChange → либо TaskOwnerChangeConfirmSignatureId, либо TaskOwnerChangeSmartExpressionId.
  • AllowMultiFinished открывает смысловую зависимость с MultiFinishAction.

4. Текст задачи и комментарии

Где настраивается:

  • AdminSPA: пункт «Текст» в настройках категории открывает страницу administration/subcat-text-settings/{subcatId} — режим текста, длина, уникальность, текст по умолчанию, HTML, изображения, локализация, права на правку, скрытие текста
  • FormsGenerator: stdHeaderTaskText
  • API: /settings, /settings/set-task-text-uniqueness, /generate-task-descriptions-by-template
  • API страницы «Текст»: GET / POST /api/admin/subcategories/{subcatId}/settings/text

Таблица БД: dbo.Subcategories

Ключевые поля:

Поле Что контролирует
SubcatTextMode Режим работы с текстом задачи. При отключённой форме создания любой режим, кроме «Текст может быть пустым», требует непустого DefaultText — см. раздел 26
DefaultText Дефолтный шаблон текста
TaskTextMaxLength Лимит длины текста
AllowHTMLTaskText HTML-режим ввода
AllowImagesInTaskText Картинки в тексте
OwnerCanChangeText / AdminCanEditText / SubscriberCanEditText / AnyoneCanEditText Модель редактирования текста
EnableComments / EnableCommentsEdit / DenyEnterComments Поведение комментариев
HideSystemComments Скрытие системных комментариев
TaskTextSearchType Тип поиска по тексту

Зависимости между полями:

  • При включении уникальности текста через API возможны блокировки создания дублей.
  • Массовая генерация текста зависит от шаблона и ДП категории.

Контракт страницы «Комментарии». Отдельный контракт GET и POST /api/admin/subcategories/{subcatId}/settings/comments отдаёт и принимает полный снимок секции «Комментарии» формы subcategories — те же девять полей, что видит администратор: EnableComments, ReactionsEnabled, EnableCommentsEdit, DenyPostCommentsInClosedTasks, DenyEnterComments, HideSystemComments, IsDeleteUserCommentsForbidden, AutoReadCommentsWhenTaskCloses и SendPrevEpValueOnSave. Последнее поле дублируется из общего контракта настроек категории, чтобы страница не читала свои значения из двух мест.

Тело POST — полный снимок секции: поле, которого нет в запросе, не сохраняет прежнее значение, а получает значение по умолчанию (false). Поля вне снимка при сохранении не меняются, поведение ленты комментариев в задаче контракт не затрагивает, легаси-маршрут GET api/storage/subcategories/{id} продолжает работать как прежде.

Контракт доступен администратору системы и администратору категории. POST отвечает перечитанными значениями, изменение записывается в журнал административных операций, после сохранения сбрасывается кэш категории.

Настройка «Replacer для пользовательских комментариев» в эту секцию не входит: она относится к секции «Текст задачи» (блок stdHeaderTaskText), поэтому контрактом «Комментарии» не отдаётся и не принимается.

5. Сроки и таймеры

Где настраивается:

  • FormsGenerator: stdHeaderTerms
  • API: POST /api/admin/subcategories/{subcatId}/settings
  • API страницы «Срок»: GET / POST /api/admin/subcategories/{subcatId}/settings/due-date

Таблица БД: dbo.Subcategories

Ключевые поля:

Поле Что контролирует
SrokMode Модель срока/дедлайна
DefaultDurationMode Дефолтная длительность
MinSrok Минимальный срок
RecommendedDueDate Рекомендованный срок
AllowChangeDuration Разрешение менять длительность
AllowSetTaskStartTime Разрешение задавать старт
AllowSetTimeParamsInPast Разрешить прошлые даты
SrokControl Напоминание/контроль до срока
Smart25/Smart50/Smart75/Smart100 Процентные напоминания
ExcludeFromOverdueReport Исключение из отчёта просрочки

Зависимости между полями:

  • ChangeDueConfirm → ChangeDueConfirmSignatureId или ChangeDueConfirmSignatureSmartExpressionId.

Контракт страницы «Срок». Отдельный контракт GET и POST /api/admin/subcategories/{subcatId}/settings/due-date отдаёт и принимает все двадцать полей секции, тогда как общий контракт настроек категории работает только с двумя из них — «не помечать задачи просроченными» и «разрешить переходы в просроченных задачах». Оба метода доступны администратору системы и администратору категории, POST отвечает перечитанными значениями, а изменения пишутся в журнал действий по каждому изменённому полю.

Тело POST — полный снимок секции: поле, которого нет в запросе, не сохраняет прежнее значение, а получает значение по умолчанию (например, режим срока становится обязательным, а единицы измерения — первым значением списка). Длительность по умолчанию, минимальный и рекомендуемый срок передаются парой «число и его единица измерения», как хранятся в базе. Четыре поля Smart25, Smart50, Smart75 и Smart100 — это флаги напоминаний при достижении 25, 50, 75 и 100 процентов длительности, а не смарт-выражения.

Нерабочая комбинация настроек отклоняется вместо тихого сохранения: если форма создания задачи выключена, срок обязателен, а длительность по умолчанию не задана, запрос возвращает ошибку — вводить срок вручную пользователю в такой категории негде. - Ограничения на прошлые/рабочие интервалы влияют на доступность ручной коррекции сроков.

6. Статусы и переходы

Где настраивается:

  • автоадминка: states, bp-roles, bp-roles-groups, bp-roles-steps, subcat-state-hints
  • API: переходы маршрута
  • API: роли бизнес-процесса на статусе — POST / PUT / DELETE api/subcategories/{subcatId}/states/{stateId}/roles

Таблицы БД:

  • dbo.States
  • dbo.StatesRoutesInSubcat
  • dbo.BpRoles
  • dbo.BpRolesGroups
  • dbo.BpRolesSteps
  • dbo.SubcatStateHints

Ключевые поля/объекты:

Элемент Что контролирует
Переход Переход между статусами
Роли (BpRoles) Ролевая модель на переходах
Действия по ДП Действия по ДП на переходе
Ограничения перехода Блокирующие проверки перед переходом
Автоподзадачи Автосоздание подзадач на переходе
Пакеты действий Пакеты смарт-действий до/после шага

Зависимости между полями:

  • Ограничения по ДП и actions-with-ep привязаны к конкретному stepId.
  • Пакеты действий привязываются к событиям BeforeTaskStep / AfterTaskStep.

Маршрут категории и дизайнер

Маршрут (жизненный цикл) настраивается отдельно для каждой категории на вкладке «Маршрут» и состоит из переходов между статусами. При создании категории маршрут настроен по умолчанию.

Подписи интерфейса на экранах маршрута и статусов — названия вкладок, пункты списков, подписи полей и тексты диалогов — зависят от языка администратора и правятся ресурсными ключами; см. localization/admin.md.

Маршрут категории по умолчанию (граф статусов и переходов)

В графическом дизайнере маршрута статусы создают и редактируют в окне свойств статуса: имя, цвет, почтовые сообщения и комментарии при переходе в статус.

Окно свойств статуса (создание статуса в дизайнере маршрута)

Защита от случайного закрытия. Окно свойств статуса бережёт несохранённую правку. Если форма изменена и не сохранена, закрытие окна — по кнопке «Отмена», крестику, клавише Esc или клику по фону — открывает вопрос «Сохранить изменения» с кнопками «Сохранить», «Не сохранять» и «Отмена». «Сохранить» записывает статус и закрывает окно только после успешной записи: если запись не прошла или форма заполнена с ошибками, окно остаётся открытым с внесёнными данными. «Не сохранять» закрывает без записи, «Отмена» оставляет форму в редактировании. Тот же вопрос срабатывает при уходе со страницы статуса по хлебным крошкам или ссылке. Неизменённая форма закрывается сразу, без вопроса.

Через панель инструментов дизайнера создают новый статус, добавляют существующий и добавляют переход. Эти кнопки активны только в режиме «Показать полный маршрут»: пока у категории настроен основной маршрут, добавление статусов и переходов скрыто.

Кнопки панели инструментов дизайнера

Состав панели одинаков для всех категорий, меняется только доступность кнопок. Их подписи выводятся подсказками и доступными именами на языке администратора.

Кнопка Что делает Когда доступна
Создать новый статус Открывает окно свойств нового статуса Администратору категории, в режиме полного маршрута
Добавить существующий статус Показывает список статусов для добавления Администратору категории, в режиме полного маршрута
Создать переход Открывает окно создания перехода Администратору категории, в режиме полного маршрута
Показать полный маршрут Переключает основной и полный маршрут Всегда
Показать подписи подробно Раскрывает подписи на графе: этапы и отдельные привязки с резолюциями Администратору категории, в режиме полного маршрута
Больше элементов Переключает упрощённый и детальный вид элементов маршрута Всегда
Правила маршрута Открывает панель правил маршрута Если у категории заданы правила
Увеличить, По размеру, Уменьшить Меняют масштаб графа Всегда

Заголовки окон, которые открываются из панели, — «Настройки перехода», «Подписи на переходе», «Создание перехода», «Редактирование статуса», «Добавить статус» — тоже выводятся на языке администратора. Если дизайнер открыт без задачи и без категории, вместо графа показывается сообщение о незаданных параметрах.

Роли бизнес-процесса на графе маршрута

Если для маршрута заведены роли бизнес-процесса (формы bp-roles, bp-roles-groups, bp-roles-steps — см. выше), дизайнер показывает их прямо на графе.

В панели инструментов появляется легенда «Роли БП» — перечень ролей по названиям; описание роли выводится подсказкой при наведении. Если ролей нет, легенда не отображается.

У переходов, к которым привязаны роли, появляется значок. Его подсказка перечисляет роли этого перехода, а для каждой — заполненные атрибуты «Вход», «Действие» и «Выход»; незаполненные в подсказку не попадают. Если роль не удалось сопоставить по идентификатору, вместо названия выводится «Роль #<номер>».

На самом графе роли только показываются: роль можно создать и назначить на статус из окна его свойств, на вкладке «Роли» (см. «Вкладка «Роли» в окне свойств статуса»), а привязки к отдельным переходам, группы ролей и роли, заведённые раньше, остаются в автоадминке (формы bp-roles, bp-roles-groups, bp-roles-steps) или доступны через API редактора маршрута (см. «Роль на статусе» ниже). Остальное поведение дизайнера — создание статусов и переходов, открытие окна настроек по клику — не меняется.

Роль на статусе

Роль можно привязать не к отдельному переходу, а к статусу целиком. В этом случае она относится ко всем исходящим переходам статуса — тем, по которым задача уходит дальше, — а тексты «Вход», «Действие» и «Выход» задаются один раз на статус и записываются одинаковыми во все эти переходы. Править их потом нужно только в одном месте, а не на каждом переходе отдельно.

Назначение выполняется только для статуса, у которого есть исходящие переходы, и только для роли из того же модуля, к которому относится категория. Если статус принадлежит другой категории, исходящих переходов у него нет или роль взята из другого модуля, запрос отклоняется с сообщением о причине и ничего не записывает. Повторное назначение той же роли на тот же статус обновляет тексты, а не добавляет вторую запись.

В интерфейсе то же самое делает вкладка «Роли» в окне свойств статуса дизайнера маршрута (см. «Вкладка «Роли» в окне свойств статуса» выше).

Назначение, правку и снятие роли на статусе выполняет API редактора маршрута: POST, а для правки и снятия — PUT и DELETE на адресе api/subcategories/{subcatId}/states/{stateId}/roles (для правки и снятия в адрес добавляется идентификатор роли). Состав запросов и ответов, тексты отказов и поведение при повторном назначении — в backend.md, раздел «Роли бизнес-процесса на статусе категории».

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

Создание роли бизнес-процесса в модуле

Роль бизнес-процесса — запись модуля (dbo.BpRoles), поэтому создаётся она в том модуле, к которому относится категория. Создание выполняет запрос POST api/modules/{moduleId}/roles с телом { name, description? }; в ответ приходит roleId созданной роли. После создания роль сразу видна в списке ролей модуля, а граф читает роли при каждом открытии — пересобирать конфигурацию вручную не нужно.

  • Имя обязательно и уникально в пределах модуля; проверка идёт по имени с обрезкой пробелов по краям, поэтому «Аудитор» и « Аудитор » — одна роль. Повтор имени отклоняется с понятным сообщением, а не ошибкой SQL.
  • Описание необязательно — без него роль создаётся с пустым описанием. Длина имени — до 200 символов, описания — до 1000.
  • Переводы названия и описания не заполняются: роль выводится на языке по умолчанию.
  • Отказы приходят кодом 400 с читаемым текстом (повтор имени в модуле, превышение длины, несуществующий модуль); код 404 не используется намеренно — вся валидация входа отвечает одним кодом. Пользователю без прав администратора приходит 403.
  • Правка и удаление роли отдельными запросами не поддерживаются: в модуле есть только создание, остальные операции — в автоадминке (формы bp-roles, bp-roles-groups, bp-roles-steps).
Вкладка «Роли» в окне свойств статуса

Роли статуса назначают прямо в дизайнере маршрута: клик по статусу открывает окно его свойств, и в нём есть вкладка «Роли». Вкладка показывается только тогда, когда дизайнер открыт для конкретной категории, — на странице «Статусы», где категория не задана, её нет.

Слева — роли, уже назначенные на статус; справа — карточка выбранной роли с тремя текстами: «Вход», «Действие» и «Выход».

  • Список ролей статуса собирается из маршрута: в него попадают роли, привязанные к исходящим переходам статуса. Роль показывается одной строкой, даже если она привязана к нескольким переходам, — тексты у таких копий одинаковы (см. «Роль на статусе»). Название роли берётся из ролей модуля.
  • Назначить роль можно из списка ролей модуля категории. Роль, уже назначенная на статус, в списке повторно не предлагается.
  • Создать роль можно прямо на вкладке: указывают имя и, при желании, описание. Роль сохраняется в модуле категории и сразу появляется в списке ролей статуса — пересобирать конфигурацию вручную не нужно (см. «Создание роли бизнес-процесса в модуле»).
  • Три текста «Вход», «Действие» и «Выход» — обычные поля ввода без форматирования. Они необязательны, а их состав фиксирован: поля нельзя удалить или переименовать.
  • Кнопка снятия убирает роль со статуса — сразу со всех его исходящих переходов.

Сохранение на вкладке «Роли» происходит по действию: назначение роли, правка текстов и снятие записываются сразу, поэтому общая кнопка сохранения статуса на этой вкладке не показывается — статус сохраняется на своих вкладках. После закрытия окна граф маршрута перерисовывается, и значок роли у переходов обновляется.

Если у категории не задан модуль, роли на вкладке недоступны: вместо списка выводится пояснение, что модуль не определён. Пока роли загружаются, показывается сообщение о загрузке.

Обязательные ДП на графе маршрута

У перехода, для которого на вкладке «Доп. параметры» настроены обязательные ДП, на графе дизайнера появляется красный значок «!». Подсказка значка начинается строкой «Есть обязательные поля» и перечисляет обязательные ДП перехода в виде «идентификатор — название»; название берётся из настроек ДП в этой категории. Значок видят только пользователи с доступом к администрированию, в том числе при открытии маршрута из карточки задачи; остальным граф показывается без него.

Значки перехода на графе маршрута

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

Значок Когда появляется Подсказка
Подзадачи У перехода настроены подзадачи «На переходе есть подзадачи»
Подписи У перехода есть подписи «Подписи: <перечень>»
Хранимые процедуры На переходе выполняется хранимая процедура «Хранимые процедуры: <имя>»
Автоисполнитель У перехода задан автоисполнитель «Есть автоисполнители»
Ограничения по ДП На переходе заданы ограничения по ДП «Есть ограничения по дп»
Действия с ДП На переходе настроены действия с ДП «Есть действия с ДП»

Часть значков кликабельна и открывает соответствующую вкладку настроек перехода, остальные только показывают подсказку. Значки ролей бизнес-процесса и обязательных ДП описаны выше, в подсекциях «Роли бизнес-процесса на графе маршрута» и «Обязательные ДП на графе маршрута».

Подсказки значков — статические строки интерфейса: они хранятся в ресурсных файлах SPA и выводятся на языке пользователя; если строки для его языка нет, подставляется английский вариант, а затем русский.

Отображение подписей на графе маршрута

Подписи перехода показываются на графе в трёх видах. Переключают их две кнопки панели инструментов: «Показать полный маршрут» и, в полном маршруте, «Показать подписи подробно». Пока полный маршрут выключен, подписи видны только значком на переходе — «Подписи: <перечень>».

  • Этапы — вид по умолчанию в полном маршруте. Переход с подписями рисуется не одной связью, а цепочкой узлов «Этап подписания N · Подписи: k»; в подсказке узла — названия подписей этапа. От этапа идут связь «Подписано» — к следующему этапу или к целевому статусу — и отказные связи к статусам возврата и отказных переходов с их названиями. У динамического (SQL) маршрута подписей первый узел в подсказке дополнительно несёт пометку «Динамический маршрут подписей».
  • Подробно — включается кнопкой «Показать подписи подробно». Каждый этап становится узлом «Этап подписания N: завершён», а каждая привязка подписи — отдельным узлом со своей подсказкой: признак ЭЦП, «Отключена» для выключенной подписи, смарт-фильтр со ссылкой на него и условия запроса. От узла подписи отходят связи по её резолюциям — «Подписано», «Отклонено», «Удалено», «Эскалировано», «Делегировано», «Отозвано» или название резолюции, если её действие не из этого набора; все они сходятся в узел завершения этапа.

Данные для этапного и подробного вида выдаёт серверный эндпоинт под правами администратора, поэтому у пользователя без прав администратора подписи на графе не раскрываются — остаётся вид со значком. Состав выдачи — в signatures/backend.md, раздел «BpEditorController (граф подписей в дизайнере маршрута)».

Панель правил автоматизации на карте маршрута

Переход, к которому привязаны смарт-правила группы «Маршруты/переходы», отмечается на карте маршрута смарт-иконкой — она появляется и у переходов, автоматизация которых состоит только из принудительной смены статуса. Клик по иконке открывает панель правил перехода; клик по самому ребру, как и раньше, открывает редактор перехода.

Панель строится по группам действий: заголовок группы — её видимое название и тематическая иконка, под ним — карточки правил этой группы (идентификатор правила, событие: перед переходом, после перехода или принудительная смена статуса, смарт-фильтр с идентификатором и названием, пакет действий с идентификатором и названием) и перечень уникальных действий пакета. Повторяющиеся действия показаны один раз, список сворачивается до «Ещё N». Если пакет недоступен для отображения, вместо пустой группы показывается карточка правила с пометкой, что состав действий недоступен.

Правила категории без привязки к конкретному переходу собраны в блоке «Для всего маршрута» — он виден и при открытии панели с перехода, и отдельно: в тулбаре дизайнера появляется кнопка «Правила маршрута», когда у категории есть такие правила. Идентификаторы и названия в панели — текст, ссылки на объекты из панели не открываются.

Кнопки перехода

Каждому переходу соответствует кнопка на карточке задачи; текст кнопки — это название перехода. По умолчанию кнопки выводятся в начале формы.

Кнопки перехода в начале формы задачи

Положение меняется опцией категории «Положение кнопок переходов и смарт-кнопок» (секция «Карточка задачи»); вариант «В конце формы» выводит блок кнопок после всех ДП, перед лентой сообщений.

Кнопки перехода в конце формы задачи

Таблица переходов

Маршрут в табличном виде: каждая строка — переход из статуса (колонка «Из статуса») в целевой («В статус») с текстом кнопки, переопределением права на переход (колонка «Право»), сроком перехода, признаком активности (колонка «Активна») и автоматически присваиваемым ID. Над таблицей — кнопки «Добавить переход», «Восстановить по умолчанию», «Удалить выбранные переходы».

Таблица переходов маршрута категории

Начальный статус и шаг при постановке

Начальный статус по умолчанию — «Новая»; в опции «Произвольный статус начала маршрута» над таблицей можно выбрать другой начальный статус (только из статусов с типом «Начальный»).

Выбор произвольного статуса начала маршрута

Опция «Шаг при постановке» задаёт автоматический переход сразу после создания задачи (из переходов начального статуса). ⚠️ У создающего задачу должно быть право на этот переход.

Выбор шага при постановке

Тот же автопереход можно реализовать иначе — пакетом смарт-действий на событии «После создания задачи» (вкладка «Смарт»); это удобно, когда переход нужен по условию или не из статуса «Новая».

Настройка перехода

Клик по строке таблицы открывает настройки перехода. Окно состоит из вкладок: «Настройки», «Подзадачи на переходе», «Подписи на переходе», «Доп. параметры», «Действия с ДП», «Смарты на переходе». Вкладки переключаются без перезагрузки страницы, и введённое в форме при переключении не теряется. Содержимое выбранной вкладки занимает остаток высоты окна под полосой вкладок и прокручивается внутри себя: на вкладке «Действия с ДП» форма создания действия ограничена половиной высоты панели и прокручивается, а таблица созданных действий занимает остаток высоты.

Окно настройки перехода — вкладка «Настройки»

На вкладке «Настройки» задаются параметры самого перехода:

  • Кнопка и порядок — название кнопки, описание (подсказка), порядок среди кнопок.
  • Автоисполнитель — кто становится исполнителем после перехода (нажавший кнопку, роль или пользователь из ДП). Вариант «берётся из ДП» работает с ДП-списком, в значениях которого указаны ID пользователей, и с ДП «Выбор пользователей», настроенным на выбор одного пользователя без групп и оргединиц; другие ДП «Выбор пользователей» в список не попадают. Пункт «Заказчик» в списке «Автоисполнитель» включает тот же флаг, что «Назначить заказчика исполнителем»: заказчик добавляется в исполнители вместе с исполнителем из сработавшего источника. Настройка «Действия при автоназначении» решает судьбу прежних исполнителей (оставить или удалить, назначить ответственным).
  • Срок перехода и «Альтернативный переход при просрочке» — по истечении срока задача автоматически уходит в указанный статус; если он не задан, задача остаётся в текущем статусе, а срок на кнопке становится красным.
  • Флаги: «Сбросить срок» (очищает срок; для просроченных запрашивает причину), «Кнопка скрыта» (кнопка не отображается; переход остаётся доступен в ленте маршрута, если входит в основной маршрут, — в дизайнере такой переход рисуется пунктиром), «Требовать комментарий при переходе», «Назначить заказчика исполнителем», «Автоматически делать переход при завершении всех подзадач».
  • «Изменить текст задачи» — подставляет новый текст по шаблону (не действует, если в категории включена автогенерация текста по ДП). «Перейти по ссылке после перехода» — смарт-выражение формирует URL или номер задачи, куда перейти после нажатия.
  • «Сквозное согласование» — переход выполняется независимо от резолюций акцептантов; «Разовое согласование» — подпись не запрашивается повторно у акцептанта, уже давшего положительную резолюцию (действует на все подписи перехода).

Блок «Ограничить доступ» управляет видимостью кнопки: смарт-фильтр видимости плюс матрица переопределения права. В режиме «По умолчанию» кнопка видна только пользователям с правом «Исполнять» в категории; служебные пользователи (Робот1Ф) выполняют переходы всегда.

Список групп в блоке «Ограничить доступ». Кнопка «Добавить» открывает список групп, ролей и прав категории — из него выбирают, кому переопределяется право на переход. В списке есть строка поиска, длинный список прокручивается, уже добавленные строки в нём недоступны для выбора. Клик по строке добавляет её в матрицу с правом на чтение по всем статусам и закрывает список; клик вне списка закрывает его без выбора. Список открывается рядом с кнопкой «Добавить» поверх формы: если места под кнопкой мало, он раскрывается вверх, а по ширине не выходит за границы экрана.

⚠️ Матрица переопределения права проверяет только статические права категории (группы и назначенные права), не записи кэша смарт-доступа — право, выданное динамически через смарт-доступ, кнопку перехода видимой не делает. Чтобы кнопка учитывала смарт-доступ, соответствующее условие нужно добавить в смарт-фильтр видимости кнопки.

⚠️ Поле «Процедура при переходе (SQL)» оставляйте пустым — оно предназначено только для сертифицированных специалистов разработчика; произвольный SQL здесь может повредить данные.

⚠️ Принудительная смена статуса (правка поля «Статус» в карточке) доступна только администратору категории и не запускает автоматизации перехода — подписи, проверки и изменения ДП, смарты; использовать только для исправления ошибок.

Защита от несохранённых изменений

Окно настроек перехода бережёт несохранённую правку так же, как окно свойств статуса (см. «Защита от случайного закрытия» выше). Если форма изменена и не сохранена, закрытие окна — по кнопке «Отмена», крестику, клавише Esc или клику по фону — открывает вопрос «Сохранить изменения» с кнопками «Сохранить», «Не сохранять» и «Отмена». «Сохранить» записывает настройки перехода на сервер и выполняет уход в список переходов только после успешной записи: если запись не прошла, окно остаётся открытым с внесёнными данными. «Не сохранять» уходит в список без записи, введённые правки отбрасываются. «Отмена» возвращает в редактирование. Тот же вопрос срабатывает при уходе со страницы настроек перехода по хлебным крошкам или по ссылке; неизменённая форма закрывается сразу, без вопроса. Защита действует на всех вкладках окна настроек перехода.

Мгновенные операции в таблице переходов — добавление, удаление и изменение порядка — выполняются без вопроса, двухкнопочное подтверждение удаления перехода сохранено.

Подзадачи на переходе

Автосоздание подзадач или связанных задач после выполнения перехода.

Вкладка «Подзадачи на переходе»

Новая подзадача добавляется кнопкой «Добавить подзадачу» — сначала указывается категория.

Создание подзадачи на переходе: выбор категории

На вкладке «Основное» задают текст задачи (с подстановкой $ExtNДП из родителя), срок, условие создания, заказчика и флаги (связанная задача, копировать подписчиков, переносить вложения).

Создание подзадачи на переходе — вкладка «Основное»

⚠️ Флаг «Связанная задача» создаёт связанную (а не дочернюю) задачу; при его включении в родительской задаче перестаёт работать автопереход по завершении всех подзадач.

Вкладка «Параметры» — источник значения каждого ДП подзадачи: Автоматически / Фиксированное значение / из ДП родительской задачи.

Подзадача на переходе — вкладка «Параметры»

Вкладка «Исполнители» — кто назначается исполнителем подзадачи (группа, заказчик родительской, роль и т. д.).

Подзадача на переходе — вкладка «Исполнители»

Подписи на переходе

Запрос подписей (согласование) при переходе — статический или динамический маршрут согласования.

Вкладка «Подписи на переходе»

Новая подпись создаётся в форме с вкладками «Основное», «Обязательные ДП», «Информационные ДП», «Условия запроса», «Настройки ЭП».

Форма создания подписи при переходе

Порядок подписей задаёт поле «Этап согласования» на вкладке «Основное»: одинаковый номер этапа — подписи запрашиваются параллельно, разные номера — последовательно. Вкладка «Настройки ЭП» появляется только при включённом флаге «ЭЦП».

Обязательные ДП — параметры, которые акцептант должен заполнить до вынесения резолюции.

Обязательные ДП подписи на переходе

Информационные ДП — значения, видимые акцептанту при запросе подписи (не поддерживаются типы «Большой текст с форматированием», «Таблица», «Выбор пользователей», «Адрес», «Дерево»).

Информационные ДП подписи на переходе

Динамический маршрут согласования формируется SQL-процедурой в момент перехода (опция «Сервис определения подписей на переходе» = «Маршрут из sql запроса»).

Настройка динамического маршрута согласования

Флаг «Кешировать полный маршрут согласования» фиксирует настройки маршрута на момент старта согласования: правки, внесённые по ходу, применятся только в следующем цикле.

Доп. параметры (обязательные на переходе)

ДП, обязательные к заполнению для выполнения перехода.

Вкладка «Доп. параметры» настройки перехода

Обязательный ДП добавляется выбором из списка над таблицей и кнопкой «Создать».

Добавление обязательного параметра на переходе

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

Обязательные поля в пользовательском интерфейсе

Действия с ДП

Действия с ДП типа «Файл» на переходе: сгенерировать файл по шаблону и вложить его в задачу или в ДП, ограничить доступ к файлу.

Вкладка «Действия с ДП»

Новое действие создаётся заполнением параметров и кнопкой «Создать действие» (генерация по шаблону, выбор действий, ограничение доступа, имя файла-результата).

Создание нового действия с ДП

Флаг «Шаблон находится в доп. параметре» переключает источник шаблона: включён — шаблон берётся из выбранного ДП, выключен — выбирается готовый шаблон. Уровень защиты результата задаёт «Ограничить доступ к файлу»: без защиты, только чтение (с паролем или без), отслеживание изменений, комментирование.

После создания действие появляется в таблице.

Действие с ДП создано

Смарты на переходе

Смарт-пакеты, привязанные к событиям «Перед переходом» и «После перехода» (те же пакеты доступны и на вкладке «Смарт» категории — здесь вынесены для удобства).

Вкладка «Смарты на переходе»

Если на переходе настроены и подпись, и смарты, действия выполняются по порядку: акцепт подписи → смарт-действия после подписания статической подписи → переход по маршруту → смарт-действия после перехода.

7. Файлы и вложения

Где настраивается:

  • FormsGenerator: FileProviderId, Word-блок
  • API: файлы категории
  • API: действия по ДП на переходах (файловые действия на шагах)

Таблицы БД:

  • dbo.Subcategories
  • dbo.Signatures (косвенно для сценариев подписи файлов)
  • профильные таблицы вложений (через file services)

Ключевые поля:

Поле/объект Что контролирует
FileProviderId Где хранить вложения категории
AllowDeleteFiles (AllowDeleteFilesEnum) Разрешение удаления файлов. Влияет на блок «Файлы» задачи и на кнопку удаления в ДП типа «Файл» и «Мультифайл». Значения: Allow (0), Disallow (1), DefineBySmartExpression (2). При DefineBySmartExpression: смарт-выражение возвращает true — запрещено, false — разрешено.
AllowDeleteFilesSmartExpressionId ID смарт-выражения для режима DefineBySmartExpression
ForbidUploadFilesIntoClosedTasks Блок загрузки в закрытых задачах
AutoDeletePrevVersionsOfFiles ⚠️ Устаревшая, не используется — в коде нет ссылок, версии не удаляются; удаляется из админки. Ранее предполагала автоудаление старых версий файла при совпадении имени
DisallowProtectedDocx / DisallowEmbeddingsInDocx Ограничения Docx
GenerateSubcategoryTemplate Генерация DOCX-шаблона категории

Зависимости между полями:

  • Ограничения Docx и Word-сценарии актуальны только в категориях с соответствующим процессом документов.

8. Подписи

Где настраивается:

  • автоадминка: signatures, bp-roles-steps
  • FormsGenerator: поля *ConfirmSignature*, StepSignsFromSysRobot, DeclineSignatureFromSysRobot
  • API: маршруты/шаги и роли БП

Таблицы БД:

  • dbo.Signatures
  • dbo.BpRolesSteps
  • dbo.Subcategories

Ключевые поля:

Поле Что контролирует
AllowSignatureRevoke Разрешение отзыва подписи
AllowSignatureRevokeByAcceptors Отзыв акцептантами
AllowSignatureRevokeByOwner Отзыв заказчиком
AllowSignatureRevokeByRequester Отзыв инициатором
DelegateTaskConfirmSignatureId Подпись при делегировании
TaskOwnerChangeConfirmSignatureId Подпись при смене заказчика
ChangeDueConfirmSignatureId Подпись при смене срока

Зависимости между полями:

  • Для каждой проверки подтверждения выбирается источник: статическая подпись (...SignatureId) или смарт-выражение (...SmartExpressionId).

9. Шаблоны задач

Где настраивается:

  • API: универсальные шаблоны
  • API: категории и разделы (auto-task-text-template, массовая генерация)

Таблицы БД:

  • таблицы контура TaskUniversalTemplates
  • dbo.Subcategories (часть template-related параметров)

Ключевые поля/объекты:

Элемент Что контролирует
Шаблон задачи Шаблоны создания задач
Правило применения Правила применения шаблонов
Генерация шаблона Генерация шаблона по структуре категории
auto-task-text-template Шаблон автогенерации текста

Зависимости между полями:

  • Правила шаблонов привязаны к категории и могут конфликтовать по приоритету.

10. JS/CSS вставки

Где настраивается:

  • API: JS/CSS-вставки

Таблицы БД: таблицы контура вставок (includes)

Ключевые поля/объекты:

Объект Что контролирует
GET .../includes/ntf Вставки на форму создания задачи (НТФ)
GET .../includes/mtf Вставки на карточку задачи (МТФ)
SubcatIncludeType Тип/режим отображения вставки

Зависимости между полями:

  • Одна и та же вставка может иметь разные типы отображения для НТФ и МТФ.

11. Опросы и новости

Где настраивается:

  • API: настройки опросов
  • API: настройки новостей
  • API: категории и разделы (/news)
  • EntityEditor: summarycategories* (для сводных категорий состояний)

Таблицы БД:

  • SummaryCategories / SummaryStates
  • настройки новостей/опросов через профильные сервисы

Ключевые поля/объекты:

Элемент Что контролирует
Настройки новостной категории Поведение новостной категории
Настройки опросов Шаблон и условия опросов
AllowPartialSurveyComplete Разрешить частичное прохождение опроса: участник может закрыть опрос на середине, промежуточные ответы автоматически сохраняются, финал фиксируется только при нажатии «Готово». При false опрос должен быть пройден за одну сессию
TaskTextSearchType (сводная категория) Поиск в сводной категории
SummaryCategoryIDSummaryStates Состояния, включённые в сводку

Smart-события при прохождении опроса:

Когда срабатывает EventID / код
Промежуточное автосохранение ответов (IsComplete = false, есть изменения) 187 — AfterSurveyResultUpdated
Финальное «Готово» (IsComplete = true) 188 — AfterSurveyCompleted + custom event SURVEY_RESULT (для смарт-пакетов «После завершения опроса»)

AfterSurveyCompleted и SURVEY_RESULT срабатывают на финальное «Готово» независимо от настройки AllowPartialSurveyComplete. Повторное нажатие «Готово» по уже завершённому опросу отбивается ошибкой SurveyHasAlreadyBeenCompleted — событие не дублируется.

Зависимости между полями:

  • Сводная категория зависит от выбранных состояний и привязанных групп доступа.

SQL view сводного раздела (с 2.268.394)

При сохранении сводного раздела через AdminSPA-админку SummaryCategoriesAdminService в той же транзакции вызывает SummaryCategoryService.GenerateSummaryCategorySqlView(id) — создаёт (или пересоздаёт через DROP+CREATE) SQL-view vsummary{id}, через которую строится выборка задач сводного раздела. Раньше при сохранении через новую админку view не создавалась (в старой админке вызов был, в AdminSPA — пропущен), из-за чего свежесозданный сводный раздел не отдавал задачи. Теперь вызов есть в трёх точках SummaryCategoriesAdminService: Create (после SummaryStatesEntityService.CreateStatesForCategory), Update (после UpdateStatesForCategory) и Delete — на удалении вызывается DropSummcaryCategoryView(id), чтобы не оставлять view-сироту в БД.

12. Кнопки действий

Где настраивается:

  • API: кнопки действий

Таблицы БД: контур пользовательскых кнопок (TaskFormCustomButton*)

Ключевые поля/объекты:

Элемент Что контролирует
Создание кнопки Параметры создаваемой кнопки
Условия кнопки Условия показа и действия
Список кнопок Список кнопок категории
buttons/update Изменение кнопок без редактирования категории целиком

Зависимости между полями:

  • Видимость кнопки зависит от её условий и от структуры переходов/ролей.

Аудит. Изменения панели инструментов категории (настройка состава кнопок, отдельных кнопок и сброс к умолчанию) записываются в журнал действий — найти записи можно в AdminSPA → Журналы → Общий лог. На создание, изменение и удаление кнопки приходится одна запись: в её описании — тип операции и имя кнопки, а в структурированной части — значения изменённых атрибутов кнопки до и после, а также добавленные и удалённые привязки кнопки к дополнительным параметрам и к таблицам блоков «Используется». Запись появляется только после успешного завершения операции: если сохранение прервалось ошибкой, в журнале ничего не остаётся.

Типичные ошибки настройки

Частые проблемы настройки категории и где их проверять:

Симптом Причина Где проверить SQL-диагностика
Не видны нужные блоки/ДП в карточке Нарушен порядок МТФ или связи блок-таблица блоки формы + subcategories select top 100 * from dbo.CustomTaskUsedAsEpBlockSettings where SubcatID = @SubcatId order by SortOrder;
Переход не срабатывает Ограничение по ДП на шаге или неверный role-step states-routes*, bp-roles-steps select * from dbo.BpRolesSteps where StepId = @StepId;
Нельзя делегировать/сменить заказчика Включено подтверждение подписью, но не настроен источник подписи блок исполнителей в FormsGenerator select top 1 SubcatId, DelegateTaskConfirmSignatureId, TaskOwnerChangeConfirmSignatureId from dbo.Subcategories where SubcatId = @SubcatId;
Невозможно загрузить файл в закрытой задаче Активен запрет для закрытых задач subcategories / files settings select SubcatId, ForbidUploadFilesIntoClosedTasks from dbo.Subcategories where SubcatId = @SubcatId;
Массовая генерация текста изменила все задачи не так, как ожидалось Ошибка в шаблоне автотекста generate-task-descriptions-by-template select SubcatId, AutoTaskTextTemplate from dbo.Subcategories where SubcatId = @SubcatId;
Категория «пропала» из нужного дерева Сбита привязка к разделу или видимость categories + subcategories select s.SubcatId, s.CategoryId, c.Name as CategoryName from dbo.Subcategories s left join dbo.Categories c on c.CategoryId = s.CategoryId where s.SubcatId = @SubcatId;
В пути категории остался разделитель на конце У категории пустое название, а путь сохранён прежней версией название категории на странице «Названия элементов» select s.SubcatID, s.Description, s.CategoryID, s.FullPath from dbo.Subcategories s where s.SubcatID = @SubcatId;

SQL-диагностика метамодели админки

Проверка, какими формами и полями управляется категория:

select
    af.Alias,
    af.Name,
    do.FullObjectName,
    afc.CountColumns,
    afs.CountSections
from dbadmin.AdminForms af
left join (
    select FormId, count(1) as CountColumns
    from dbadmin.AdminFormSectionColumns
    group by FormId
) afc
    on afc.FormId = af.Id
left join (
    select FormId, count(1) as CountSections
    from dbadmin.AdminFormSections
    group by FormId
) afs
    on afs.FormId = af.Id
left join dbadmin.DbaObjects do
    on do.Id = af.DbaObjectId
where af.Alias in (
    'subcategories',
    'categories',
    'states',
    'bp-roles',
    'bp-roles-groups',
    'bp-roles-steps',
    'subcat-notes',
    'subcat-state-hints',
    'signatures',
    'technical-works'
)
order by af.Alias;

Проверка зависимостей полей в форме subcategories:

select
    dep.AdminFormSectionColumnId as ColumnId,
    dep.DependsOnColumnId,
    dep.OperationType,
    dep.Value,
    dep.DependencyRuleType
from dbadmin.AdminFormSectionColumnsDeps dep
where dep.FormId = (
    select top 1 af.Id
    from dbadmin.AdminForms af
    where af.Alias = 'subcategories'
)
order by dep.AdminFormSectionColumnId;

Admin API — создание категорий и разделов

Создание раздела (Category)

Раздел создаётся запросом:

POST("/api/admin/categories", {
    "CategoryName": "Название раздела"  # НЕ "Name"!
})

Создание категории (Subcategory)

Категория создаётся запросом:

POST("/api/admin/subcategories", {
    "SubcategoryName": "Название категории",  # НЕ "Name"!
    "CategoryID": category_id  # Поле БД: CategoryId; в API принимается как CategoryID
})

Создание переходов (StateRoutes / Steps)

Переходы маршрута создаются запросом. Кроме полей из примера, обязательно поле StepDescription — название перехода: без него создание и изменение перехода отвечают 400 Bad Request.

POST("/api/admin/subcategories/steps", {
    "SubcatID": subcat_id,
    "StateID": state_id,
    "HiddenStep": False  # ОБЯЗАТЕЛЬНО — bool?, NULL → InvalidCastException
})

Системные steps создаются автоматически при создании категории (stateId:1 «Новая», stateId:2 «Завершена»). Повторный вызов с теми же stateId → 500.

Типичные ошибки Admin API категорий

Частые ошибки при работе с Admin API категорий:

Проблема Причина Решение
Name → 500 Поле называется CategoryName / SubcategoryName Использовать точные имена полей (см. примеры запросов выше)
HiddenStep не передан → InvalidCastException bool? → NULL в БД → ошибка приведения типа Всегда передавать HiddenStep: false
500 при создании step Дубль stateId (системные steps уже созданы) Проверять наличие перед созданием
StepDescription не передан или пустой → 400 Название перехода обязательно при создании и изменении перехода Передавать непустое StepDescription

13. Дополнительные параметры (ДП) в категории

Дополнительные параметры (ДП) — настраиваемые поля задачи помимо системных: они определяют, какие данные собираются в категории, как они отображаются на форме и в карточке задачи и кто имеет к ним доступ.

Привязка ДП к категории и все их настройки описаны в профильном домене ДП — ext-params/admin.md → «Привязка ДП к категории».


14. Блоки «Используется» (БИ)

БИ отображают связанные задачи и объекты (письма, звонки, файлы) в карточке задачи.

В карточке задачи блок «Используется» выглядит как отдельный список связанных задач или объектов с собственной панелью инструментов и (при настройке) кнопкой «Создать».

Блок «Используется» в карточке задачи (пользовательский режим)

Где настраивается:

  • UI: настройки категории → «Блоки Используется»
  • API: блоки формы

Таблицы БД: dbo.CustomTaskUsedAsEpBlockSettings, dbo.EpBlockSettingsToBlocks

Все блоки БИ категории собраны в списке: идентификатор, имя, порядок на форме и признаки сворачивания. Новый блок создаётся кнопкой «Создать».

Список блоков «Используется» в категории

Настройки блока

Параметры блока «Используется» (БИ):

Параметр Описание
ID Присваивается автоматически при создании
Имя Название блока
Порядок на форме Общий порядок с блоками ДП (порядок 1 выше порядка 2)
Может сворачиваться / По умолчанию свернут Управление раскрытием
Доступен по смарт-фильтру Видимость блока по условиям (пользователь, параметры задачи). Недоступно при создании — задаётся на форме редактирования
Видимость Скрыта / Только мобильный / Только веб / Отображать везде. Приоритет над смарт-фильтром. Недоступно при создании — задаётся на форме редактирования
Вид отображения Таблица (стандартный список), Формы задач подряд (последовательность карточек), Галерея задач

Новый блок создаётся в форме с полями «Имя», «Порядок на форме» и флагами сворачивания.

Форма создания блока «Используется»

Существующий блок редактируется на вкладке «Редактировать блоки»: сверху — параметры блока, снизу — список его вкладок.

Редактирование настроек блока «Используется» и список его вкладок

В виде отображения «Таблица» связанные задачи показываются стандартным списком.

Вид отображения «Таблица»

В виде «Формы задач подряд» каждая связанная задача выводится отдельной карточкой без панели инструментов и ленты комментариев; ДП, ресурсы и вложения можно редактировать прямо из блока, как в форме задачи. Если в блоке одна таблица — задачи показываются раскрывающимися блоками с заголовком «имя БИ + номер»; если таблиц несколько — единой лентой с горизонтальными разделителями.

Вид отображения «Формы задач подряд»

Если у категории-источника включено «Скрыть текст задачи» и задано «Название сущности», это название показывается вместо имени блока БИ. Если в категории-источнике задан «Текст кнопки постановки», он используется как надпись кнопки создания задачи из БИ.

Источники данных вкладки БИ

Вкладка БИ может брать данные из разных источников:

Тип источника Описание
Связанная категория Категория с Lookup-ДП на данную. При создании из БИ — автозаполнение Lookup. В выпадающем списке доступны только категории, где уже есть такой Lookup-ДП (иначе сначала создайте его в категории-источнике)
Хранимая процедура SQL Обязательные параметры: @UserID, @TaskID, @UserNameMode, @ShowAllTasks, @StartIndex, @EndIndex. Обязательные поля: TaskID, IsOverdue, StateID, PriorityID, IsClosed, IntColor, FinishWork, ParentTaskID. Опционально: TaskIdToDrillDown (int) — цель перехода при клике. Для корректной группировки/фильтрации переведите вкладку на «Произвольный источник»
Произвольный источник ХП с произвольными колонками. @UserID обязательно, @TaskID опционально
Смарт-фильтр Отбор задач из любых категорий. Поле «Категория» определяет куда ставить новые задачи
Существующая таблица Повторное добавление вкладки из другого БИ. Одна таблица может быть в нескольких блоках, но в одном блоке — только один раз

⚠️ БИ работает с уникальными TaskID — основной TaskID должен быть уникален для каждой строки набора данных (повторы допустимы только в колонке TaskIdToDrillDown).

PostgreSQL. Источник «Хранимая процедура SQL» на стенде PostgreSQL должен быть табличной функцией (RETURNS TABLE / SETOF), а не процедурой: платформа читает набор строк запросом вида select * from схема.имя(...). Процедура PostgreSQL (CREATE PROCEDURE) набор строк не возвращает, и вкладка с таким объектом не откроется. Обязательные параметры и колонки — те же, что в таблице выше. На Microsoft SQL Server вызов не меняется.

Новая вкладка добавляется на вкладке «Добавить таблицу в блок»: выбирают тип источника, блок, категорию и параметры отображения. После сохранения приложение возвращается на вкладку «Редактировать блоки».

Добавление таблицы (вкладки) в блок «Используется»

Настройки вкладки

Параметры вкладки БИ:

Параметр Описание
Имя Название вкладки; если не задано — берётся имя источника (только для SQL и Smart)
Тип Тип источника данных вкладки. Выбирается из списка: «Связанная категория», «Смарт-фильтр», «Произвольный источник» — в том числе у уже созданной вкладки. При смене типа поле «Источник» переключается на соответствующий контрол, а значения источников других типов очищаются. Для вкладки на хранимой процедуре SQL тип не меняется; для вкладки типа «Существующая таблица» не заполняется
Показывать только активные На вкладке только незавершённые задачи (только для связанных категорий)
Категории источники Мультивыбор категорий; для оптимизации запросов данных
Показывать кнопку «Создать» Да / Нет / Smart+TSql. Кнопка видна только пользователям с правом создавать задачи в категории
Пакетная обработка Кнопка пакетной обработки на панели инструментов. Для SQL/Smart источников — ограниченный набор операций
Режим выбора Выбор задач для пакетной обработки
Тип контента Задача / Прочее (для SQL-источников)
Брать ссылку из Колонка набора данных со ссылкой; по клику на строку открывается она вместо карточки задачи (только SQL)
Открывать ссылку в По умолчанию (по профилю) / Новое окно / Модальное окно (только SQL)
Приоритетный режим таблицы Прямое редактирование (двойной клик → edit, только при праве менять параметр) или Просмотр (клик → карточка). По умолчанию «Не указано» — применяется режим из РМ группы «Приоритет режима редактирования»
Не закрывать окно после создания Задача остаётся в модальном окне
Видимость Скрыта / Только мобильный / Только веб / Везде. Приоритет над смарт-фильтром видимости
ДП в категории-источнике Ограничивает вкладку задачами, связанными через один выбранный дополнительный параметр категории-источника; не задан — задачи по всем полям ссылки. Действует только для источника «Связанная категория», задаётся через API администрирования

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

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

Редактирование таблицы (вкладки) блока

У каждой вкладки блока своя настройка таблицы: состав и порядок колонок, сортировка, группировка и фильтры запоминаются отдельно по вкладкам и восстанавливаются при возврате на вкладку. Колонки, которых нет в источнике вкладки, из сохранённой настройки не восстанавливаются — например, после смены категории-источника.

Это личный вид вкладки — пользователь настраивает его под себя. Кроме личного у таблицы блока есть общий вид: его задаёт администратор, и его по умолчанию видят все пользователи, у которых нет собственного сохранённого вида. При копировании категории переносится именно общий вид блока (см. «Копирование категории»), личные настройки пользователей — нет.

Несохранённые изменения настроек блока и вкладок

Настройки блока БИ и его вкладок защищены от потери правок. Пока на вкладке «Редактировать блоки» есть изменения — правленые параметры блока или заполненная форма добавления таблицы, — уход со страницы настроек, нажатие Esc и кнопка «Отмена» открывают окно «Сохранить изменения» с действиями «Сохранить», «Не сохранять» и «Отмена». «Сохранить» записывает параметры блока и, если менялась форма добавления таблицы, саму таблицу, и выполняет исходный переход только после успешного ответа сервера: при ошибке окно остаётся открытым с внесёнными данными. «Не сохранять» уходит без записи, «Отмена» возвращает в редактирование. Форма без изменений закрывается без вопроса.

Если форма добавления таблицы заполнена не полностью, «Сохранить» её не записывает: приложение открывает вкладку «Добавить таблицу в блок» с незаполненными полями и остаётся на странице настроек.

Сохранение по Ctrl+Enter из формы блока и подтверждение при удалении блока работают как прежде.

Форма быстрой постановки

Откуда открывается. Форма быстрой постановки вызывается из блока «Используется» (БИ), привязанного на категорию: в этом блоке на карточке задачи есть кнопка «Создать» (в интерфейсе открывается модальное окно «Задача»). Появится по ней краткая форма или полная — зависит от настройки блока и обязательных ДП категории (условия — ниже).

Флаг IsQuickCreateForm в CustomTaskUsedAsEpBlockSettings. Показывает краткую форму (системные поля + обязательные ДП). Недоступна если есть обязательные ДП типа Таблица или Multilookup. Только для БИ на категорию.

При включённой быстрой постановке кнопка «Создать» открывает краткую форму — только системные поля (в зависимости от настроек категории) и обязательные при создании ДП.

Краткая форма постановки задачи из блока «Используется»

В выпадающем меню у кнопки «Создать» остаётся пункт «Полная форма» — для открытия полной карточки постановки.

Пункт «Полная форма» в выпадающем меню кнопки «Создать»

Итоги (агрегаты)

CustomSetting DataSourceAggregates:

[{"type": "taskUsed", "id": 39, "gridTotalColumns": {"ExtParam1709": ["sum", "avg"]}}]
Поддержка: sum, avg, min, max. Для ДП — ключ ExtParam{ID}, для системных — имя параметра (overallPlan, overallFact).

Связь БИ-таблицы с блоком ДП

Одна таблица БИ (режим «Таблица») может быть встроена внутрь блока ДП — отображается рядом с полями. Порядок блоков ДП и БИ — общий.

Встраивание включается в настройках блока ДП опцией «Связь таблицы БИ с блоком ДП» (доступно только для БИ с видом отображения «Таблица»).

Опция «Связь таблицы БИ с блоком ДП» в настройках блока ДП

После связывания таблица БИ отображается внутри блока ДП рядом с его полями.

Таблица БИ, встроенная в блок ДП

UI-переход к настройкам

Открыть настройки БИ можно из пользовательского интерфейса: ПКМ на блоке в карточке задачи → «Настройки» — откроется соответствующий раздел администрирования. Пункт «Настройки» в контекстном меню доступен только администраторам.

Переход к настройкам блока «Используется» из карточки задачи

Аудит. Изменения блоков «Используется» записываются в журнал действий — найти записи можно в AdminSPA → Журналы → Общий лог. На создание, изменение и удаление блока приходится одна запись: в её описании — тип операции и имя блока, а в структурированной части — сам блок и, при изменении, значения изменённых полей до и после. Сохранение состава таблиц блока тоже попадает в журнал, причём и тогда, когда состав не изменился: в такой записи разбора изменений нет, только блок и перечень его таблиц. Если состав изменился, в структурированной части видно, какие связи добавлены и какие удалены.


15. Смарт-кнопки

Кнопки действий в карточке задачи и в статьях пространств.

Где настраивается:

  • UI: настройки категории → вкладка «Кнопки»
  • API: кнопки действий

Таблицы БД: контур TaskFormCustomButton*

Смарт-кнопки настраиваются в настройках категории на вкладке «Кнопки» — здесь их список и кнопка «Создать». По умолчанию кнопки выводятся в начале формы вместе с переходами по маршруту; их положение меняется опцией категории «Положение кнопок переходов и смарт-кнопок» (секция «Карточка задачи»).

Список смарт-кнопок категории (вкладка «Кнопки»)

Основные параметры кнопки

Основные параметры смарт-кнопки:

Параметр Описание
Имя Текст кнопки (или tooltip при наличии иконки)
Описание Всплывающая подсказка
Иконка Из набора /spa/content-icons
Порядок Порядок среди кнопок
Видимость Скрыта / Только мобильный / Только веб / Отображать везде. Приоритет над всеми остальными настройками видимости
Отображать в «Других действиях» Группировка в выпадающее меню. Доступно только при Видимость = «Только веб» / «Отображать везде». Название меню задаётся опцией категории «Другие действия»

Новая кнопка создаётся кнопкой «Создать» — в окне свойств задают имя, описание, иконку, порядок, видимость, действие (JS/пакет/URL), права и связь с ДП/БИ.

Окно свойств настраиваемой кнопки

Действие кнопки

Действие кнопки задаётся одним из вариантов:

Вариант Описание
JavaScript выражение Скрипт при нажатии
Пакет действий Глобальный или локальный пакет смарт-действий
URL Произвольная ссылка / Форма новой задачи / Форма задачи / Раздел / Категория. FastReport: /reports/view/{id}/print-form. onlyCloseAfterCreate=true — закрыть модалку без редиректа (только для ссылок в модальном окне). Для «Форма новой задачи» — смарт-выражения: Категория (обяз.), Задача-источник/Подзадача/Связанная (опц.); ДП переносятся из задачи-источника
Открывать ссылку в В текущем окне / В модальном окне / В новом окне — способ открытия URL

⚠️ Если указаны и JS/пакет, и URL — сначала JS/пакет, затем URL. Ошибка JS → переход по URL не выполняется.

Режим недоступности

Поведение недоступной кнопки:

Параметр Описание
Сообщение пользователю Текст или смарт-выражение при нажатии на недоступную кнопку
Смарт-фильтр активности true → доступна, false → недоступна
Скрыть по смарт-фильтру При false — кнопка полностью скрыта

Права на кнопку

Доступ к кнопке:

  • По умолчанию — только с правом «Исполнять». Робот1Ф всегда имеет доступ
  • Матрица доступа — статусы × группы/роли/права

Матрица настраивается по кнопке «Настройка прав доступа»: статусы × группы/роли/права, иконка 👁 — просмотр, ✏️ — редактирование.

Настройка прав доступа к кнопке (матрица по статусам)

Связь с ДП и БИ

Кнопку можно привязать к полю ДП или таблице БИ:

  • С ДП — кнопка рядом с полем (одна кнопка ↔ несколько ДП и наоборот). С иконками — друг за другом, без иконок — свёрнуты в «Действия». Для «Большой текст» — max 2 кнопки напрямую, с 3-й переносятся в «Действия»; длинный текст кнопки обрезается (полный — в подсказке)
  • С таблицами БИ — кнопка в панели инструментов блока (одна кнопка ↔ несколько таблиц и наоборот)

С иконками кнопки выводятся рядом с ДП друг за другом.

Пример отображения кнопок с иконками рядом с ДП

Без иконок кнопки сворачиваются в меню «Действия».

Пример отображения кнопок без иконок (меню «Действия»)

Привязанная к таблице БИ кнопка отображается в панели инструментов блока.

Пример кнопки в панели инструментов блока «Используется»

Созданная кнопка появляется в списке; чтобы изменить её — кликните по строке (удаление — через контекстное меню строки).

Редактирование кнопки

Кнопки в пространствах

Доступны через иконку действий в статье. иконка по умолчанию из /spa/content-icons. Отделены от стандартных действий горизонтальной чертой. Кнопки можно сгруппировать в «Другие действия», как в карточке задачи.

Пример смарт-кнопок в статье пространства

Автоматически создаваемые кнопки

Пример: «Пройти опрос» при включении режима опросов, «Редактор» для категории-справочника опросов.

UI-переход к настройкам

Открыть настройки кнопки можно из пользовательского режима: ПКМ на кнопке в карточке задачи → «Настройки» (доступно только администраторам).

Переход к настройкам кнопки из карточки задачи


16. Опросы

Двухкатегорийная архитектура: справочник опросов + категория прохождения.

Где настраивается:

  • UI: настройки категории → вкладка «Опросы»
  • API: настройки опросов

Таблицы БД: dbo.Surveys, dbo.SurveyQuestions, dbo.SurveyResults, dbo.SurveyResultQuestions

⚠️ Не путать с опросами в сообщениях (чаты/соцсеть) — там таблицы Polls, PollsQuestions, PollsQuestionsAnswersOptions, PollsResponses.

Режим «Опросы» (категория-справочник)

Автосоздаётся смарт-кнопка «Редактор» с URL /spa/survey/creator/?surveyTaskId={surveyTaskId}. Настройки кнопки можно корректировать (видимость, статусы и т.д.).

Сохранить конфигурацию опроса может пользователь, у которого есть доступ к задаче-опросу и право «Администратор задач» в её категории. Одного права просмотра задачи для сохранения недостаточно.

Перенос между площадками. Утилита переноса конфигурации забирает только шаблон опроса: саму конфигурацию, список вопросов и задачу-шаблон, а также режим категории и связь с параметром выбора. Созданные опросы и результаты прохождения остаются на площадке-источнике и не переносятся. Вложенные в конфигурацию файлы и ссылки на задачи пересчитываются при импорте автоматически; задача, не попавшая в пакет, ищется на приёмнике по её идентификатору GUID, а если не находится — импорт продолжается, и в журнал миграции пишется предупреждение.

Режим «Прохождение опросов» (категория-исполнитель)

Требует ДП Lookup (источник — категория-справочник), указанный в «Выбор опроса».

Параметр Описание
Разрешить частичное прохождение Автосохранение каждого ответа, возврат к прерванному месту. Если выключено — сохранение только по кнопке «Готово»
Опрос — настройка доступа Матрица доступа к кнопке прохождения (статусы × группы/роли). По умолчанию — доступно всем
Результат — настройка доступа Матрица доступа к блоку результатов и к чтению назначения опроса. По умолчанию — доступно всем, у кого есть доступ к задаче

Анонимные опросы. Анонимность включается ДП-флажком: в системных настройках указывается ДП «Анонимный опрос», в категории у него ставится значение по умолчанию. ДП типа «Флажок» с таким названием заводится системной настройкой автоматически, а его ссылка хранится в Общих настройках приложения. Признак анонимности хранится не в самом ДП, а в значении по умолчанию его связи с категорией; скрытость — свойство той же связи, а не ДП: связь, которую админ-API создаёт сам при сохранении настроек опросов, помечается скрытой и на форме задачи не показывается, а привязанный к категории вручную ДП виден по настройкам своей связи, как любой другой. Если ДП в Общих настройках не указан, анонимность недоступна: категория работает в обычном режиме. Для анонимного режима нужен настроенный системный анонимный пользователь — без него ответ не принимается.

В анонимном режиме результат сохраняется без автора, поэтому на одну задачу может приходиться несколько ответов, а ограничение «один ответ на задачу» не действует. Ограничения на число ответов нет: каждое сохранение, включая промежуточное автосохранение при частичном прохождении, добавляет отдельную запись результата и не дописывается в предыдущую. Событие автоматизации после опроса выполняется от имени анонимного пользователя, поэтому смарты и уведомления респондента не видят. Общий блок результатов в задаче отдельный ответ не показывает: прочитать конкретный ответ может только тот, у кого есть право выставлять оценки; в самом ответе вместо автора отдаётся системный анонимный пользователь.

Отдельного переключателя в форме «Настройки опросов» нет: форма флаг не показывает и в запросе его не передаёт, а незаполненный флаг трактуется как выключенный — поэтому сохранение настроек опросов сбрасывает анонимность категории. Изменение флага пишется в журнал администрирования отдельной записью.

Кнопка «Пройти опрос» доступна только исполнителю. В результатах — только показанные вопросы с записанными ответами (включая пустые). Скрытые по условиям вопросы не выводятся.

Ограничения проверяются и на сервере, а не только видимостью кнопки. Пройти опрос и отправить ответ может исполнитель, назначенный ответственным по задаче. Назначение опроса и его результаты читает тот, у кого есть доступ к задаче и кому матрица «Результат — настройка доступа» даёт право не ниже чтения; ответственный исполнитель читает их всегда, а ненастроенная матрица никого не ограничивает. Матрица «Опрос — настройка доступа» действует на прохождение опроса.

События автоматизации

При работе с опросом доступны события автоматизации:

  • «После завершения опроса»
  • «После обновления результата опроса»

17. Права доступа к категории

Вкладка «Доступ» в настройках категории. Детальная матрица 12 прав — см. ../permissions/admin.md.

Где настраивается:

  • UI: настройки категории → вкладка «Доступ»
  • UI: настройки группы → «Права на категории»

Переходы блока «Доступ»: «По группам», «По правам» и «Журнал» — отображаются чипами. Первые два переключают режимы просмотра прав, поиск групп — по названию и ID. «Журнал» открывает журнал административных действий, отфильтрованный по этой категории: пользователь, сообщение, дата и время, затронутые объекты.

Права группы на категории: вкладка «Права на категории» с режимами «По группам» / «По правам»

12 прав на категорию

Полный набор прав, выдаваемых группам на категорию:

Право Описание
Администратор задач Менять любые параметры, удалять задачи/комментарии, принудительные переходы, редактировать пространства. Рекомендуется назначать владельцу бизнес-процесса, для которого создана категория
Администратор категории Настройка категории, включая создание дополнительных параметров и их настройку в своей категории; недоступны удаление категории и изменение маршрута. Смарт-поиск, табличный вид. Создание параметра доступно и из карточки задачи этой категории — правый клик по полю → «Создать ДП»
Добавлять и менять акцептантов Делегирование подписей, добавление акцептантов
Запретить экспортировать в Excel Блокировка выгрузки
Исполнять Работа с задачами, переходы по маршруту
Менять заказчика Смена заказчика задачи
Редактировать исполнителей Назначение/удаление исполнителей, трудозатраты за других
Пакетная обработка Массовые действия над задачами
Переносить срок Смена срока (при включённом ограничении в настройках)
Просмотр всех задач Просмотр и комментирование всех задач
Просмотр зашифрованных задач Доступ к тексту/ДП зашифрованных задач
Создавать задачи Создание задач (пользователь = заказчик)

Взаимодействие «Редактировать исполнителей» × «Ограничить удаление»

Совместное действие двух настроек:

Редактировать исполнителей Ограничить удаление Результат
+ + Можно удалить себя, можно добавлять
+ − Можно добавлять и удалять любых
− − Только чтение
− + Только чтение

SQL view доступа на просмотр

v2.265 Цефей+. View/таблица возвращает (TaskID, UserID). Имя хранится в dbo.Subcategories.TSQLAccessFunction. ⚠️ WITH (NOLOCK) обязательно. Права категории > SQL view.

Наследование руководителями

Право «Просмотр всех задач» может наследоваться руководителями двумя способами:

  1. CustomSetting ForbidSubcatRightsInheritanceToDirector — наследование права «Просмотр всех задач» по группам
  2. Общая настройка «Руководитель наследует право на просмотр задач» — по роли в задаче

Заместители

Получают все права замещаемого, кроме просмотра конфиденциальных задач и просмотра зашифрованных задач.


18. Настройки раздела (Category)

Раздел = папка для группировки категорий (dbo.Categories).

Где настраивается:

  • UI: режим администрирования → раздел
  • API: разделы

Параметры раздела

Доступные параметры раздела:

Параметр Описание
Родительский раздел Иерархия разделов
Стандартное представление вид по умолчанию для всех категорий раздела (Лента, Таблица, Календарь, Канбан, Галерея, Иерархия, Диск, Проекты, Соц. сети и др.)
Дополнительный синдикат Подключение портала к разделу
Модуль Привязка к модулю. Новые категории наследуют модуль раздела

Выбор родительского раздела осуществляется через выпадающий список в настройках раздела (вкладка «Основное»). Пункт списка показывает название раздела и его идентификатор в скобках — Название (ID); иерархия при этом не отображается, поэтому одноимённые разделы разных ветвей различаются только по идентификатору. Поиск по списку идёт по этой же строке, то есть и по названию, и по идентификатору. Текущий раздел в списке не предлагается.

Массовые действия с правами

Блок «Массовые действия» на вкладке «Основное» настроек раздела, кнопки «Права» и «Действия». Область применения — все категории раздела и всех вложенных подразделов; у самого раздела собственных прав нет, они выставляются на входящие в него категории.

Единственный способ массово настроить доступ при создании нового раздела:

  • Кнопка «Права» → выбрать «Группа» + «Право» → Выдать (добавляет право всем вложенным категориям) или Отобрать (снимает). Подтверждения нет, изменение применяется сразу
  • В списке «Право» доступны все стандартные права категории — тот же набор, что и при настройке прав отдельной категории, отсортированный по названию. Право «Просмотр зашифрованных задач» доступно только при наличии лицензии: без неё оно недоступно для выдачи, и попытка выдать его отклоняется
  • Отобрать все права у всех групп — полный сброс, выполняется после подтверждения

Весь блок доступен только администратору с полными правами: методы админ-API, которые вызывают обе кнопки, отдают отказ доступа всем остальным, включая администратора категории. При выдаче и снятии права каждая категория раздела дополнительно проверяется на право «Администратор категории» — категории без него пропускаются без сообщения об ошибке, остальные обрабатываются; администратору с полными правами доступны все категории, поэтому пропусков не возникает. Итог пишется в журнал администрирования только при реальном изменении: хотя бы одно право выдано там, где его ещё не было, либо хотя бы одна запись права удалена. Если менять было нечего — право у групп уже стояло, а снимать оказалось нечего, — в журнал не попадает ничего. При реальном изменении на каждую затронутую группу пишется одна запись с перечнем выданных и снятых прав, списком обработанных категорий и списком пропущенных; условие проверяется на весь запрос целиком, поэтому запись появляется и по тем группам, у которых ничего не изменилось. В списке обработанных перечислены все категории раздела, доступные администратору по праву «Администратор категории», — в том числе те, где право у группы уже было или снимать было нечего; фактически изменённые категории журнал не выделяет.

Полный сброс прав. Кнопка «Отобрать все права у всех групп» журналируется не так, как выдача и снятие одного права: запись делается по каждой категории, где состав прав реально изменился, — и в текущем разделе, и во всех вложенных подразделах. Число записей по одной операции равно числу затронутых категорий во всём поддереве разделов, а не числу групп; у каждой записи указан выполнивший операцию. Категории, где снимать было нечего, записей не оставляют.

Кнопка «Действия» — массовое назначение персональных действий по всем категориям раздела: «Добавлять в исполнители», «Автоматическое подписание на комментарии», уведомления о поступлении новой задачи, о смене срока и об отклонении. Выбирается один пользователь или группа, кнопки «Выдать» и «Отобрать»; подтверждения нет. Сбой на отдельной категории обработку не прерывает — такие категории перечисляются в одном итоговом сообщении об ошибке.

Быстрые действия

Быстрые действия с разделом:

  • Быстрое создание категорий в разделе
  • Копировать в новый раздел (с вложенными категориями)
  • Переименовать (контекстное меню)

19. Счётчики задач

Где настраивается:

  • UI: настройки категории → Инструменты → Счётчики
Настройка Описание
Показывать количество новых задач Синий индикатор в дереве (начальный статус). Кроме Справочников
Показывать количество просроченных Красный индикатор в дереве + в Панели навигации (где пользователь = исполнитель)
Показывать количество всех задач Серый индикатор в дереве. Кроме Справочников
Показывать количество в заголовках Над списком задач — количество с учётом фильтров
Количество просмотров Только для Новостей — счётчик просмотров новости

Счётчики в дереве считаются не для всех типов категорий: пересчёт агрегированных счётчиков категории идёт по задачам категорий типа «Задачи» и «Новости». У категорий других типов включённые настройки счётчиков ни на что не влияют — индикаторы в дереве остаются пустыми.


20. Названия интерфейса

Названия элементов интерфейса настраиваются в AdminSPA на двух отдельных страницах с общим заголовком «Названия элементов интерфейса». Первая — administration/subcat-element-names/{subcatId}: название категории, название сущности и текст кнопки постановки. Вторая — administration/subcat-element-names-additional/{subcatId}: названия срока выполнения, даты начала работы и заказчика, текст назначения исполнителя при постановке, ссылка на текст родительской задачи, сообщение о создании задачи, тексты комментариев при добавлении одного и нескольких подписчиков, шаблон для текста напоминания. На каждую страницу ведут два пути: пункт «Основные настройки» или «Дополнительные настройки» в блоке «Настройки категории» и чип «Основные названия интерфейса» или «Прочие названия интерфейса» в блоке «Основные настройки» — пункт и чип открывают одну и ту же страницу. Изменения записываются кнопкой «Сохранить». У названия категории, названия сущности, текста кнопки постановки и названий срока выполнения, даты начала работы и заказчика рядом с полем есть кнопка локализации (иконка глобуса) — она открывает окно перевода на языки площадки.

Основные названия

Основные интерфейсные названия категории:

Настройка Описание По умолчанию
Подсказка (тултип) Всплывающая подсказка при наведении на категорию в дереве —
Название сущности Вместо «Задача» — «Документ», «Поручение» и т.д. Задача
Текст кнопки постановки Текст кнопки на НТФ Поставить задачу
Название категории Имя категории; при его изменении пересчитывается путь категории — см. ниже —

Название категории и путь. Название входит в путь категории — строку из названия раздела и названия самой категории. Путь показывается там, где выводится принадлежность задачи к категории: в колонке пути в списках задач, в письмах со ссылкой на задачу, в списках прав на категории. При сохранении страницы путь пересчитывается, только если название действительно изменилось; остальные названия на этой странице на путь не влияют. Пустое название даёт путь раздела без завершающего разделителя, и правило одинаково во всех случаях, когда путь собирается заново: при создании категории, при переименовании её раздела, при переносе категории в другой раздел и при синхронизации модуля с этой категорией. У категорий с заполненным названием вид пути не меняется. Переименование раздела пересобирает пути не только его категорий, но и категорий всех вложенных разделов. Отдельной операции «пересчитать все пути» нет: путь обновляется по перечисленным событиям, поэтому путь, сохранённый раньше с разделителем на конце, поправится при ближайшем из них. Название сущности в текстах интерфейса. Заданное «Название сущности» уходит клиенту в метаданных категории и подставляется вместо слова «Задача» — в частности, в уведомление об отсутствии доступа к задаче. Для русского интерфейса платформа дополнительно отдаёт название в дательном падеже. Дательная форма формируется только для однословных названий («Кейс» — «Кейсу», «Контакт» — «Контакту»); если название состоит из двух и более слов («Элемент справочника», «Задача на тестирование»), дательная форма не отдаётся вовсе и показывается обычный текст. Отсюда практический вывод: чтобы фраза вида «нет доступа к …» была грамматически верной, задавайте название сущности одним словом.

Прочие названия

Прочие настраиваемые названия и тексты:

Настройка Описание По умолчанию
Название срока выполнения Срок
Название даты начала работы Начало работы
Текст назначения исполнителя Системное сообщение при назначении —
Ссылка на текст родительской Заголовок текста родителя в подзадаче —
Наименование исполнителя Подпись роли в карточке. Это же наименование подставляется в сообщения о запретах при назначении и снятии исполнителей и при проверках действий с задачей Исполнитель
Наименование заказчика Подпись роли в карточке. Это же наименование подставляется в сообщение о запрете смены заказчика и в системный комментарий ленты о смене заказчика. Для Новостей → автоматически «Автор» Заказчик
Сообщение о создании Поступила новая задача
Текст при добавлении подписчика (один) Добавлен подписчик
Текст при добавлении подписчиков (несколько) Добавлены подписчики
Шаблон напоминания Текст напоминания, поддерживает вставки автогенерации —

Приоритет наименования роли. Имя роли берётся сначала из локализации категории (перевод для языка пользователя), затем из настройки «Наименование заказчика» или «Наименование исполнителя»; если не задано ни то, ни другое — подставляется стандартное «Заказчик» или «Исполнитель». Пустое значение и строка из пробелов переопределением не считаются. Правило одинаково для обеих ролей и действует всюду, где роль упоминается: в системных сообщениях, записях журнала и подписях интерфейса. Переопределённое имя выводится в кавычках, со стандартным именем текст остаётся прежним.

Роль в текстах карточки и формы создания задачи. Переименованная роль подставляется и в тексты интерфейса: подсказки в пустых полях заказчика и исполнителей на форме создания задачи, в том числе в мобильной версии, надпись о том, что пользователь в роли ещё не назначен, и подтверждения удаления исполнителя, добавления пользователей в роль и исключения пользователя из блока ресурсов. Как и в комментариях ленты, текст строится по отдельной формулировке с названием роли в кавычках — например, «Вы действительно хотите удалить пользователя в роли «Мастер»?». Такие формулировки заведены для русского и английского языков; на остальных языках, а также для непереименованной роли выводится стандартный текст. Название роли показывается как есть, разметка в нём не обрабатывается.

Роль в диалоге исполнителей на канбане. Диалог изменения исполнителей, открытый из контекстного меню карточки на канбане, тоже использует переименованную роль исполнителя: в заголовке окна, в надписи о том, что исполнитель ещё не назначен, и в подтверждении удаления исполнителя. Если наименование пустое или состоит из пробелов, выводятся стандартные тексты.

Роль в служебных комментариях ленты. Переименование доходит до шести событий: добавление пользователей в роль, смена ответственного, смена заказчика, снятие роли, внесение трудозатрат и изменение индивидуального плана. Подставляется не отдельное слово — комментарий строится по другой формулировке, с названием роли в кавычках. Такие формулировки заведены только для русского и английского интерфейса, а для трудозатрат — только для русского; на остальных языках комментарий остаётся стандартным. Переименованием не считается и значение, совпадающее со стандартным названием роли на любом языке системы: «Performer» или «Task owner» в полях наименования роли оставят комментарий в обычном виде.


21. Иерархический вид

Два метода настройки иерархии:

  1. По ДП Lookup: создать ДП Lookup (источник = сама категория) + ДП Галочка. В настройках иерархии указать «Лукап родителя» и «Чекбокс папки»
  2. По дереву подзадач: создать настройку без выбора ДП — иерархия соответствует дереву подзадач

Доп. параметры в гриде — список ДП для отображения в иерархическом представлении.


22. Новостные категории

Доступно при типе категории «Новости».

Настройка Описание
Наличие обложки Обязательная при включении. Пропорция 2:3
Отображать автора Автоподстановка «Автор» в «Наименование заказчика»
Теги Обязательные при включении. ДП «Новости - Теги»
Рубрика Обязательная при включении. ДП «Новости - Рубрика»
Аннотация Max 150 символов. ДП «Новости - Аннотация»

По умолчанию все настройки включены.


23. Рекомендуемые категории

Список категорий, рекомендуемых для создания подзадач/связанных задач. Отображается перед полным списком. В проектном управлении — первая категория из списка становится целевой для новой подзадачи.


24. Подзадачи

Настройки поведения подзадач в категории:

Настройка Описание
Ставить только подзадачи Задачи создаются только как дочерние
Отклонять дочерние при отклонении родительской Каскадное отклонение
Для завершения требуется завершить подзадачи Блокировка завершения
Фиксировать смену статусов дочерних Сообщение в родительскую при смене статуса
Срок зависит от дочерних/родительских Дочерняя не позже родительской
Копировать подписчиков в подзадачи Автокопирование подписчиков

25. Повторения задач

Настройки материализации повторяющихся задач.

Параметр Описание
Включить материализацию повторений Создание цепочек задач. Опорная дата = дата начала работы. При перематериализации: будущие задачи корректируются, прошлые — нет
Отображать в задаче (Смарт) 1 = показать блок повторений, 0 = скрыть
Дата начала / Дата окончания (Смарт) даты по умолчанию повторения
Право редактировать повторение (Смарт) 1 = можно менять настройки, 0 = нельзя
Порядок повторений Порядок блока относительно ДП
Стилизация календаря (Смарт) Набор данных: datetime2, color, title
Срок (Смарт) срок по умолчанию для каждого экземпляра
Скрыть выбор даты окончания серии Убрать элемент выбора окончания («Никогда» / дата / после N повторений). Действует в карточке задачи; на форме создания задачи выбор окончания серии доступен всегда
Скрыть выбор срока Убрать выбор типа срока задач серии («В тот же день» / «Относительный» / «Ко времени»); срок тогда рассчитывается как «В тот же день». Действует в карточке задачи; на форме создания задачи выбор типа срока доступен всегда

Материализация при переносе с нерабочих дней (с 2.268.332). Если в правиле повторения используется перенос с нерабочего дня (настройка «При попадании на нерабочий день» = «Перенести на ближайший рабочий день»), материализация включается принудительно, независимо от значения параметра «Включить материализацию повторений» в категории. Механизм переноса реализован только в материализованной ветке исполнения, бэк-валидация ValidateRecurrences отклоняет такие расписания при отключённой материализации. В остальных случаях, когда фронт не передаёт isMaterializationEnabled, бэк подставляет значение из настройки категории (Subcategories.IsRecurrenceMaterializationEnabled). Глубина материализации задаётся пользовательской настройкой RecurrenceTasksMaterializationDays (по умолчанию 365 дней).

Доступность переноса в интерфейсе. Если настройка «Включить материализацию повторений» отключена, для новых правил повторения чекбокс «Переносить на рабочий день» не отображается. Повторение сохраняется без переноса и не включает материализацию. Исключение — правило, в котором перенос был сохранён ранее: чекбокс остаётся доступным, чтобы существующая настройка не потерялась. Пока для такого правила выбран перенос, материализация включается принудительно.


26. Форма создания задачи (НТФ)

Настройки карточки создания новой задачи.

Параметр Описание
Не использовать форму создания Мгновенное создание без НТФ. Недоступно если: есть обязательные ДП, текст обязателен без default, срок обязателен без default, исполнитель обязателен
Разрешить назначать приоритет Выбор приоритета на форме создания задачи и его установка у уже созданной задачи: кнопка «Приоритет» в тулбаре карточки, контекстные меню в списках и лентах, мобильное приложение. При выключенной настройке приоритет показывается, но не меняется; запрос на его смену сервер отклоняет. Клиентские места перечислены в Работа с задачами › Приоритет
Разрешить добавление подписчиков Поле «Подписчики» на НТФ
Разрешить указывать получателей уведомлений Поле «Уведомить» на НТФ
Разрешить устанавливать повторения Кнопка «Параметры времени» на НТФ
Разрешить устанавливать напоминания Кнопка «Напоминания» на НТФ
Разрешено устанавливать дату начала Поле «Начало работы» на НТФ
Заполнять дату начала текущим временем Автозаполнение при создании
Отображать кнопку «Закрепить как чат» Пункт в карточке и меню «Участники»
Лимит вложений Суммарный размер файлов (байты). Автоформатирование: байты → КБ → МБ → ГБ
Количество колонок доп.параметров (НТФ) По умолчанию = 3. Влияет на «Количество занимаемых колонок» ДП

Совместимость с режимом «Не использовать форму создания». Когда форма создания отключена, настройки, требующие ввода при постановке задачи, сохранить нельзя: проверка выполняется до записи и на старой странице настроек категории, и на страницах AdminSPA «Участники» и «Текст».

Страница настроек Сочетание, которое отклоняется
Участники Режим исполнителей «обязателен» (PerformerMode = Must)
Текст Любой режим текста, кроме «Текст может быть пустым» (SubcatTextMode = Free), при пустом DefaultText

Ограничение по тексту действует и для режимов «Запретить вносить текст задачи» и «Заблокировать изменение текста задачи»: непустой текст по умолчанию нужен для всех режимов, кроме «Текст может быть пустым». Сообщение об отказе называет свойство «Не использовать форму создания задачи» и требование — назначение исполнителя не должно быть обязательным либо текст задачи должен быть необязательным или задан по умолчанию. Запрос отклоняется целиком, остальные поля страницы не сохраняются. Чтобы сохранить такие значения, сначала снимите флаг «Не использовать форму создания» или задайте параметры, не требующие ввода на форме. На выполнение уже созданных задач ограничение не влияет.


27. Прочие настройки

Прочие настройки категории:

Параметр Описание
Тип поиска Вхождение / Полнотекстовый / Полное совпадение / Обрамлять справа / Обрамлять слева
Искать в ДП по умолчанию режим по умолчанию поиска «в полях»
Ограничить просмотр истории Нет / Согласно доступам на редактирование / Смарт-выражение
Частота обновления грида (сек) Автообновление списка. Не чаще 30 сек
Напоминание за N дней Автосоздание напоминания подписчикам
Использовать триграмм Нечёткий поиск с учётом опечаток. Минимум 3 символа. SP OnChangeSubcatUseTrigramSearchF (MS SQL only)
Напоминание 25%/50%/75%/в день окончания Процентные напоминания
Скрыть быстрое создание в ДП Блокировка быстрой постановки в Lookup/Multilookup
Скрыть кнопку создания Блокировка создания во всех представлениях

CustomSettings для триграмм:

Поиск при выключенном триграмме. Снятая галка не отключает поиск в таблице: текст ищется по денормализованной таблице категории, по колонке с текстом задачи, с приведением «ё» к «е» и экранированием служебных символов. Триграммы такой категории не строятся и удаляются при снятии галки, поэтому нечёткий поиск с учётом опечаток не работает — совпадение идёт по подстроке. Ограничение в три символа относится к триграммному поиску; в интерфейсе запрос пока отправляется начиная с трёх символов независимо от настройки.

  • UseTrigramInSimpleSearch — нечёткий поиск в быстром поиске
  • FilterChain.MaxTrigramCountForTrigramSearch — max триграмм (по умолчанию: 100000)
  • FilterChain.MinSubcatSizeForTrigramSearch — min размер категории (по умолчанию: 100000)

28. Представления категории

Включение/отключение представлений и выбор представления по умолчанию.

⚠️ Между доменами: масштабы Ресурсов (7 масштабов) и Календаря (6 масштабов) + флаг «Отображать в терминальном статусе» настраиваются в календаре. Здесь — только включение/отключение и выбор представления по умолчанию.

Параметр Описание
Включение представлений Активация переключателей для каждого типа (Таблица, Лента, Канбан, Календарь и т.д.)
Представление по умолчанию Кнопка ★ на блоке. Вступает в силу после перезагрузки страницы
Закреплять по умолчанию как чат Задачи автоматически приравниваются к чатам

Для блока «Таблица» — переход к настройкам табличного вида (см. ниже).

Настройки табличного вида категории

Доступны через блок «Таблица» представлений категории. Настройки определяют дефолтный вид списка задач для всех пользователей.

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

Общие настройки

Общие настройки табличного вида:

Параметр Описание
Отбор по умолчанию Преднастроенный отбор категории, применяемый при открытии списка
Тип статуса Все / Активные / Завершённые / Отклонённые. С 2.268.363 значение «Все» применяется корректно при открытии грида — раньше оно автоматически подменялось дефолтным «Активные». С 2.268.366 (#2097422, ч.2) также корректно сохраняется ручной выбор «Все» в пользовательских настройках грида (раньше null терялся при сериализации). См. ../grids/business.md § «Системные отборы по статусу»
Группировать по Одно или несколько полей для дефолтной группировки
Группировать одной строкой Склеивает группу в одну строку (по умолчанию вкл)
Позиция закрепления Слева / Справа — для столбцов с активной опцией «Закрепить столбец»
Скрыть невидимые поля Скрывает поля без видимости по умолчанию

Кнопки: «Открыть предпросмотр» (проверка изменений до сохранения), «Сбросить на рекомендуемые» (Выравнивание/Ширина/Тип фильтра в дефолт), «Сбросить» (откат изменений и колонок с «Видимостью по умолчанию» до предыдущего сохранения для всех), «Сбросить порядок как в задаче» (выстраивает колонки в том порядке, в каком поля расположены в карточке задачи: сначала системные поля, затем дополнительные параметры по порядку следования — шапка, далее блоки слева направо и сверху вниз, каждый параметр по первому появлению). После сброса порядок колонок можно менять вручную.

Колонки табличного вида

В списке столбцов на экране настройки табличного вида (и для категории, и для ресурсов) идентификатор и тип дополнительного параметра выведены отдельными колонками, рядом с именем. Это упрощает поиск нужного столбца, когда в категории есть одноимённые или похожие поля.

Прямо в шапке этой таблицы есть постоянные фильтры: поля «Код» и «Имя» отбирают строки по подстроке системного кода поля и по подстроке названия колонки, регистр не учитывается — например, «1678» оставит строку с кодом ExtParam1678, а «дата» — колонки, в названии которых есть это слово. Рядом с полями — кнопка со значком глаза («Скрыть невидимые поля»): она оставляет только поля с включённой видимостью по умолчанию, повторное нажатие снимает отбор. Отбор идёт в браузере по мере ввода, без запроса к серверу; порядок колонок от него не сбрасывается, а перетаскивать строки можно и по отфильтрованному списку. Фильтры есть на экранах настройки колонок категории и ресурсов; на других экранах с этой же таблицей шапка не менялась.

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

Дополнительные настройки таблицы

«Больше настроек»:

Параметр По умолчанию Поведение
Можно менять ширину столбцов Вкл Перетаскивание угла столбца. Установленная ширина сохраняется индивидуально для каждого пользователя
Можно менять порядок столбцов Вкл Перемещение заголовка мышью. Сохраняется индивидуально для каждого пользователя
Сохранять пользовательские настройки Вкл При повторном входе таблица открывается с пользовательскими настройками. При экспорте в Excel учитывается тоже: вкл = пользовательские, выкл = дефолт
Можно включать фильтры Вкл Кнопка фильтрации + пункт «Фильтровать по значению» в контекстном меню. Панель по умолчанию раскрыта
Можно включать группировку Вкл Кнопка группировки + пункт «Группировать» в контекстном меню. Если группировка задана — раскрыта; иначе свёрнута
Можно включать доп. поле столбца Выкл Кнопка «Показать меню» в панели; иначе — в меню действий
Переносить заголовки по строкам Вкл Полные заголовки с переносом; иначе обрезаются многоточием

С версии 2.268 быстрая фильтрация по аватарке исполнителя включена по умолчанию (доп. настройки не требуются).

Доступ по группам к колонкам

При настройке доступа по группам к колонкам виртуальные группы (например, «Подписчики задач (всем)») не применяются — нужно использовать обычные или связанные группы.


29. Блоки ДП и группы блоков

Настройки блоков ДП и групп блоков (список, создание и редактирование блока, цвет, смарт-фильтры, группы) — в ext-params/admin.md → «Блоки ДП и группы блоков». Здесь — связь с БИ.

Связь БИ-таблицы с блоком ДП

Одна таблица БИ (вид «Таблица») может быть встроена в блок ДП. Порядок блоков ДП и БИ — общий (блок с порядком 1 выше блока с порядком 2). Привязка хранится в ExtParamsInSubcatToBlocks.

Группы блоков ДП

Блоки объединяются в группы. Порядок внутри группы — по Порядок на форме. Группа связывается с категорией через страницу «Группы блоков ДП».

Смарт-фильтры блоков

Видимостью блоков можно управлять смарт-фильтрами:

Фильтр Контекст
Сворачивать по смарт-фильтру МТФ: true = свёрнут
Скрывать по смарт-фильтру МТФ: true = скрыт
Сворачивать при постановке НТФ: true = свёрнут
Скрывать при постановке НТФ: true = скрыт

Контекстный параметр @eventParam1 (WhenOpenTask=64): 0=Undefined, 1=Spa, 2=Mobile, 3=Conference.


30. ДП на мобильном

Ключевые принципы настройки ДП с учётом мобильного приложения:

  • ДП должны быть сгруппированы в тематические блоки
  • Порядок — по ходу заполнения
  • Видимость — по правам и логике процесса
  • Обязательность — на каждом переходе хотя бы один ДП
  • Не требовать много параметров при создании — использовать статус «Подготовка» с автопереходом

Наследование значений из задачи-источника

При создании из контекста (БИ, Lookup, Multilookup, подзадачи) — совпадающие ДП наследуют значения. Отключение — опция «Не копировать значения из задачи-источника» в настройках ДП.


31. Автосоздание подзадач на переходах

Настройка подзадач, создаваемых при переходе по маршруту.

Где настраивается:

  • API: автоподзадачи на переходах
  • См. также: transition-settings-reference.md (поля StatesRoutesSubtask*)

Основные параметры подзадачи на переходе

Основные параметры автосоздаваемой подзадачи:

Параметр Описание
Текст задачи С вставками $Ext{ID} из родительской задачи
Срок задачи На основе поправки срока
Имя параметра Условное создание: если ДП родителя = значение
От кого От исполнителя / От заказчика / От нажавшего кнопку
Связанная задача Не дочерняя, а связанная (отключает автопереход по завершении подзадач)
Копировать подписчиков Из родительской
Переносить вложения Все файлы из родителя
Каждому исполнителю — копию Отдельная подзадача на каждого

Исполнители подзадачи

Исполнители подзадачи определяются одним из способов:

  • Исполнители из группы
  • Назначить исполнителем заказчика родительской
  • Назначать роль заказчика (по группе)
  • Копировать исполнителей

Параметры подзадачи

Для каждого ДП — источник: Автоматически / Фиксированное значение / Из ДП родителя.


CustomSettings — глобальные ключи поведения категорий

Глобальные ключи CustomSettings, влияющие на поведение категорий:

Ключ Тип Назначение
ExtendedSubcatSettings JSON Расширенные настройки категории (per-SubcatID): отключить вопросы (commentQuestionsAllow=false) и/или требование комментария при «Вопрос не мне» (commentNotMeAnswerRequired=false). Формат: {"$SUBCAT_ID":{"commentQuestionsAllow":bool,"commentNotMeAnswerRequired":bool}}
FromUtpTableFirstOrderSubcats array ID категорий, для которых в SQL-запросе списка задач предикат проверки прав ставится первым в FROM — оптимизация для крупных таблиц с дорогостоящими JOIN
CalendarPopupMenuSubcats array ID категорий, попадающих в контекстное меню календарных категорий для быстрой постановки задачи. Если ключ не задан — в меню стандартный набор (Событие в календаре, Задача в категории, все календарные категории)

Последовательность действий при переходе по маршруту

При выполнении перехода система последовательно выполняет 38 шагов, в том числе:

  1. Проверка статуса подзадач (если требуется).
  2. Проверка прав пользователя.
  3. Проверка динамических подписей.
  4. Выполнение коннекторов и смартов «перед сменой статуса».
  5. Проверка плановых трудозатрат (если назначаются исполнители).
  6. Мультизавершение (если включено).
  7. Запрос подписей (задача переходит в «На подписи»).
  8. Выполнение перехода и запись в журнал.
  9. Генерация текста задачи (по шаблону), сброс срока.
  10. Комментарий о переходе, email-рассылка уведомлений.
  11. Постановка подзадач на переходе.
  12. Выполнение хранимых процедур.
  13. Смарты «После перехода» и «После изменения статуса».
  14. Обновление денормализации.

Принудительная смена статуса (через редактирование поля «Статус») не выполняет переход по маршруту и пропускает все автоматизации. Доступна только пользователям с правами администратора категории.

Связи с другими доменами

Категория связана с другими доменами системы:

Домен Связь
Задачи Категория — шаблон для создания задач; определяет маршрут, ДП, представления, права
Дополнительные параметры Привязка ДП к категории с индивидуальными настройками (имя, обязательность, блок)
Подписи Подписи на переходах маршрута; настройки отзыва и делегирования через подписи
Маршруты / Статусы Маршрут жизненного цикла задач; автопереходы, альтернативные переходы
Смарт-логика Смарты на переходах, смарт-доступ, смарт-выражения для исполнителей/подсказок
Комментарии Настройки ленты сообщений на уровне категории
Пользователи и группы Права доступа на категорию выдаются группам; роли определяют доступ к задачам
Уведомления Оповещения при переходах, просрочках, изменениях
Почта Настройки почтовых ящиков категории
Файлы Настройки вложений, шаблоны файлов
Порталы Раздел может отображаться как портал (дополнительный синдикат)
Проекты Проектные задачи, рекомендуемые категории для подзадач
Календарь Категории типа «Календарь» отображаются в календарях пользователей
Чат Категории типа «Чаты/каналы» для мессенджера
Отчеты Рекомендуемый срок, исключение из отчетов о просрочке
Интеграции Синхронизация с 1С, коннекторы, хранимые процедуры

Связанные документы

См. также: