В статье описана функция управления сменой статусов элемента, которая может применяться для упрощения контроля выполнения задач/замечаний в проекте.
Она позволяет:
Определять допустимые переходы между статусами (например, Выполняется → Выполнено).
Ограничивать возможность изменения статуса конкретными пользователями (например, Инициатором или Исполнителем).
Исключать ошибки в учете статусов и ускорять процесс согласования и закрытия задач/замечаний.
Функция актуальна при ведении большого количества задач/замечаний, где важно отслеживать последовательность действий и обеспечивать прозрачность процесса.
Пример пошаговой настройки
1. Добавление атрибутов к типу элемента "Статус"
В настройках типов элемента выберите "Статус" → перейдите на вкладку "Атрибуты"
Добавьте следующие атрибуты типа Lookup:
Перечень разрешенных типов элементов (системное имя:
content_type_allowed_list; ссылка на список: "Типы элемента"; множественный выбор)Цель: ограничивает, для каких типов элементов данный статус доступен.
Разрешенный предыдущий статус (системное имя, например:
allowed_prev_lookup; ссылка на список: "Статусы задач"; множественный выбор)Цель: задает, какие статусы могут предшествовать текущему.
ВНИМАНИЕ! Необходимо создать похожие атрибуты в случае, если они отсутствуют в Системе.
2. Настройка отображения атрибутов
- В списке "Статус задачи" через настройку вида отобразите новые атрибуты в табличном виде.
- Для каждого статуса заполните значения атрибутов: какие предыдущие статусы допустимы и какие типы элементов разрешены.
3. Настройка атрибута "Статус задачи" для типа элемента "Замечание"
- К типу элементу "Замечание" добавьте атрибут "Статус задачи" (
task_status). - Настройте фильтрацию значений.
Цель: фильтрация доступных статусов в зависимости от типа элемента и текущего статуса.
Пример формулы:
Format('i => i.GetValueAsLookupIdList(\"content_type_allowed_list\").Contains(Guid(\"{0}\")) && i.GetValueAsLookupIdList(\"allowed_prev_lookup\").Contains(Guid(\"{1}\"))', Id(This('contenttype')), Id(This('Статус задачи')))
где используются атрибуты:
task_status —Статус задачи;content_type_allowed_list —Перечень разрешенных типов элементов;allowed_prev_lookup —Разрешенные предыдущие статусы.
4. Настройка валидаторов для атрибута "Статус задачи"
Добавьте валидаторы, ограничивающие выбор некоторых статусов по ролям Пользователей.
Примеры валидаторов:
Валидатор 1 — ограничение для Инициатора
- Цель: позволяет Инициатору менять статус только при закрытии, доработке или аннулировании.
Условие срабатывания:
Id(This('Статус задачи')) == Id(Lookup('Статусы задач.Закрыто')) ||
Id(This('Статус задачи')) == Id(Lookup('Статусы задач.На доработку')) ||
Id(This('Статус задачи')) == Id(Lookup('Статусы задач.Аннулировано'))
Условие блокировки:
Contains(This('Инициатор', true), User())
Валидатор 2 — ограничение для Исполнителя
- Цель: Исполнитель может менять статус на "Выполняется" или "Выполнено".
Условие срабатывания:
Id(This('Статус задачи')) == Id(Lookup('Статусы задач.Выполняется')) ||
Id(This('Статус задачи')) == Id(Lookup('Статусы задач.Выполнено'))
Условие блокировки:
Contains(This('Исполнитель', true), User())
Примечания
Перед созданием новых атрибутов убедитесь, что похожий атрибут точно отсутствует в Системе.
При фильтрации значений формула учитывает текущий тип элемента (
contenttype) и текущий статус задачи.Валидаторы помогают избежать несогласованных изменений статусов, но их настройка должна быть согласована с регламентом работы проекта.
Для удобства просмотра используйте табличные виды со всеми атрибутами и фильтрами.
