Архитектура функциональных опций и оценки заданий
Дата: 2026-04-07
Проблема
Функциональные опции проекта росли исторически без единого архитектурного принципа:
- Нет единого правила — что является глобальной ФО, что проектным флагом, а что должно быть на обоих уровнях
ФункциональностьServiceDesk— проектный флаг с пустым набором динамических реквизитов (единственный эффект — вкладка "Решения" видна заранее)- Оценки заданий не управляемы на уровне проекта —
ОценкаВыполненияпривязана к глобальной ФОИспользоватьServiceDesk, нет проектного флага - Нет валидации между уровнями — проектный флаг можно включить при выключенной глобальной ФО
- Неясно, нужны ли две глобальные галочки —
ИспользоватьServiceDeskиSLAСервисыРаботы
Решение
Архитектурный принцип: трехуровневая цепочка
Редакция (лицензия)
│ определяет доступность
▼
Глобальная ФО (константа)
│ определяет доступность
▼
Проектный флаг (реквизит Проекты)
│ определяет UI
▼
Форма задания
Правила:
- Редакция → Глобальная ФО: уже работает через
СЛС.УстановитьФункционал() - Глобальная ФО → Проектный флаг: если ФО выключена, чекбокс на вкладке "Функционал" проекта становится недоступным. Значение не сбрасывается — только блокируется редактирование
- Проектный флаг → Форма задания: уже работает через
ЗаданияСервер.ИспользуемаяФункциональность()
Не каждый уровень обязателен:
- Если функция доступна во всех редакциях и не имеет глобального "рубильника" — дос таточно только проектного флага (как
ФункциональностьКлиенты) - Если функция не имеет смысла "по проектам" — достаточно глобальной ФО (как
ИспользоватьБизнесПроцессыИЗадачи)
Проектные флаги: изменения
Удалить полностью (без Удалить-префикса):
| Флаг | Причина |
|---|---|
ФункциональностьServiceDesk | Набор динамических реквизитов пустой. Если проект в ServiceDesk — решения нужны по умолчанию |
При удалении:
- Убрать реквизит из
Проекты.mdo - Убрать чекбокс и обработчик
ФункциональностьServiceDeskПриИзменениииз формы проекта - Убрать
"Service Desk"изЗаданияСервер.ИспользуемаяФункциональность() - Вкладку "Решения" показывать по наличию данных
- Убрать ключ
features_service_deskиз API сериализации/десериализации - Убрать поле из СКД форм списка/выбора
Добавить:
| Флаг | Тип | Глобальная ФО-пара | Эффект |
|---|---|---|---|
ФункциональностьОценки | Boolean | Нет (все редакции) | Поле ОценкаВыполнения в динамических реквизитах задания |
При добавлении:
- Новый реквизит Boolean в
Проекты.mdo - API-ключ:
features_ratings - Значение по умолчанию:
Ложь - Чекбокс на вкладке "Функционал", подсказка: "Отображать поле оценки выполнения в задачах проекта"
- В
ЗаданияСервер.ИспользуемаяФункциональность()— добавить"Оценки"в запрос и обработку - В
ЗаполнитьДинамическиеРеквизиты()— добавить"ОценкаВыполнения"в набор для"Оценки"
Оставить без изменений:
| Флаг | Причина |
|---|---|
ФункциональностьSLA | Полноценная двухуровневая логика |
ФункциональностьСклад | Вкладка "Номенклатура" + реквизит МестоХранения |
ФункциональностьТрудозатраты | Вкладка "Трудозатраты" |
ФункциональностьКлиенты | Реквизит "Клиент" + автозаполнение |
ФункциональностьСинхронизацияСтатусаИРазделов | Автоперемещение заданий при смене статуса |
Хранение оценки
ОценкаВыполнения остается реквизитом документа Задание. Не переносится в РеквизитыSLA.
Причины:
- Оценка — самостоятельная практика (ITIL CSI), не привязана к SLA
- Используется в 25+ файлах, в API (
execution_rating), в 3 отчетах, в правилах событий - Доступна во всех редакциях, включая СТАНДАРТ
- Перенос в
РеквизитыSLAсоздал бы ложную зависимость: "нет SLA — нет оценок"
Валидация между уровнями
В ПриСозданииНаСервере формы прое кта — проверять глобальные ФО:
| Проектный флаг | Глобальная ФО | При выключенной ФО |
|---|---|---|
ФункциональностьSLA | SLAСервисыРаботы | Чекбокс недоступен |
ФункциональностьСклад | ИспользоватьСкладскойУчет | Чекбокс недоступен |
ФункциональностьТрудозатраты | ИспользоватьУчетВремени | Чекбокс недоступен |
ФункциональностьОценки | — | Всегда доступен |
ФункциональностьКлиенты | — | Всегда доступен |
ФункциональностьСинхронизацияСтатусаИРазделов | — | Всегда доступен |
Глобальные ФО: без изменений
ИспользоватьServiceDesk и SLAСервисыРаботы остаются как есть.
ИспользоватьServiceDesk— базовый модуль заданий (все редакции)SLAСервисыРаботы— расширение ServiceDesk (ПРОФ/КОР П)ИспользоватьServiceDeskявляется пререквизитом дляSLAСервисыРаботы(неявная зависимость, документируется)
Причины не объединять:
- Разные редакции: СТАНДАРТ имеет ServiceDesk, но не SLA
- 76 объектов в composition — рискованная миграция
- Существующий код проверяет
ИспользованиеSLA()в 5+ модулях - Разделение корректно отражает бизнес-модель: базовый helpdesk vs. расширенный SLA
Обновление ИБ
Для существующих проектов с ФункциональностьServiceDesk = Истина — установить ФункциональностьОценки = Истина (обработчик обновления, выполнить до удаления реквизита).
Редакции и доступность
| Редакция | Глобальные ФО | Проектные флаги |
|---|---|---|
| СТАНДАРТ | ServiceDesk, СкладскойУчет | Все флаги доступны, но SLA/Склад/Трудозатраты блокируются валидацией |
| ПРОФ | + SLA, Ремонты, Telegram, SMS, МобильныйТСД | + разблокирован ФункциональностьSLA |
| КОРП | + УчетВремени, Бюджетирование, Agile, CRM, Проблемы, Метрики | + разблокирован ФункциональностьТрудозатраты |
Deliverables
- Изменения в метаданных: удаление
ФункциональностьServiceDesk, добавлениеФункциональностьОценки - Изменения в коде:
ЗаданияСервер, форма проекта, форма задания, API проекта - Обработчик обновления ИБ
- Документация архитектуры ФО:
.claude/docs/functional-options-architecture.md
Вне скоупа
- Рефакторинг глобальных ФО (ServiceDesk и SLA остаются)
- Перенос
ОценкаВыполненияв регистр - Изменение других проектных флагов
- Новые глобальные ФО или константы