В статье описана функция управления сменой статусов элемента, которая может применяться для упрощения контроля выполнения задач/замечаний в проекте.
Она позволяет:
Определять допустимые переходы между статусами (например, Выполняется → Выполнено).
Ограничивать возможность изменения статуса конкретными пользователями (например, Инициатором или Исполнителем).
Исключать ошибки в учете статусов и ускорять процесс согласования и закрытия задач/замечаний.
Функция актуальна при ведении большого количества задач/замечаний, где важно отслеживать последовательность действий и обеспечивать прозрачность процесса.
В настройках типов элемента выберите "Статус" → перейдите на вкладку "Атрибуты"
Добавьте следующие атрибуты типа Lookup:
Перечень разрешенных типов элементов (системное имя: content_type_allowed_list)
Цель: ограничивает, для каких типов элементов данный статус доступен.
Разрешенный предыдущий статус (системное имя, например: allowed_prev_lookup)
Цель: задает, какие статусы могут предшествовать текущему.
ВНИМАНИЕ! Необходимо создать похожие атрибуты в случае, если они отсутствуют в Системе.

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 — Разрешенные предыдущие статусы.Добавьте валидаторы, ограничивающие выбор некоторых статусов по ролям Пользователей.
Примеры валидаторов:
Условие срабатывания:
Id(This('Статус задачи')) == Id(Lookup('Статусы задач.Закрыто')) ||
Id(This('Статус задачи')) == Id(Lookup('Статусы задач.На доработку')) ||
Id(This('Статус задачи')) == Id(Lookup('Статусы задач.Аннулировано'))
Условие блокировки:
Contains(This('Инициатор', true), User())
Условие срабатывания:
Id(This('Статус задачи')) == Id(Lookup('Статусы задач.Выполняется')) ||
Id(This('Статус задачи')) == Id(Lookup('Статусы задач.Выполнено'))
Условие блокировки:
Contains(This('Исполнитель', true), User())
Перед созданием новых атрибутов убедитесь, что похожий атрибут точно отсутствует в Системе.
При фильтрации значений формула учитывает текущий тип элемента (contenttype) и текущий статус задачи.
Валидаторы помогают избежать несогласованных изменений статусов, но их настройка должна быть согласована с регламентом работы проекта.
Для удобства просмотра используйте табличные виды со всеми атрибутами и фильтрами.