Перейти к основному содержимому

Архитектура функциональных опций и оценки заданий

Дата: 2026-04-07

Проблема

Функциональные опции проекта росли исторически без единого архитектурного принципа:

  1. Нет единого правила — что является глобальной ФО, что проектным флагом, а что должно быть на обоих уровнях
  2. ФункциональностьServiceDesk — проектный флаг с пустым набором динамических реквизитов (единственный эффект — вкладка "Решения" видна заранее)
  3. Оценки заданий не управляемы на уровне проектаОценкаВыполнения привязана к глобальной ФО ИспользоватьServiceDesk, нет проектного флага
  4. Нет валидации между уровнями — проектный флаг можно включить при выключенной глобальной ФО
  5. Неясно, нужны ли две глобальные галочкиИспользоватьServiceDesk и SLAСервисыРаботы

Решение

Архитектурный принцип: трехуровневая цепочка

Редакция (лицензия)
│ определяет доступность

Глобальная ФО (константа)
│ определяет доступность

Проектный флаг (реквизит Проекты)
│ определяет UI

Форма задания

Правила:

  1. Редакция → Глобальная ФО: уже работает через СЛС.УстановитьФункционал()
  2. Глобальная ФО → Проектный флаг: если ФО выключена, чекбокс на вкладке "Функционал" проекта становится недоступным. Значение не сбрасывается — только блокируется редактирование
  3. Проектный флаг → Форма задания: уже работает через ЗаданияСервер.ИспользуемаяФункциональность()

Не каждый уровень обязателен:

  • Если функция доступна во всех редакциях и не имеет глобального "рубильника" — достаточно только проектного флага (как ФункциональностьКлиенты)
  • Если функция не имеет смысла "по проектам" — достаточно глобальной ФО (как ИспользоватьБизнесПроцессыИЗадачи)

Проектные флаги: изменения

Удалить полностью (без Удалить-префикса):

ФлагПричина
Функциональность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 — нет оценок"

Валидация между уровнями

В ПриСозданииНаСервере формы проекта — проверять глобальные ФО:

Проектный флагГлобальная ФОПри выключенной ФО
ФункциональностьSLASLAСервисыРаботыЧекбокс недоступен
ФункциональностьСкладИспользоватьСкладскойУчетЧекбокс недоступен
ФункциональностьТрудозатратыИспользоватьУчетВремениЧекбокс недоступен
ФункциональностьОценкиВсегда доступен
ФункциональностьКлиентыВсегда доступен
ФункциональностьСинхронизацияСтатусаИРазделовВсегда доступен

Глобальные ФО: без изменений

Использовать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

  1. Изменения в метаданных: удаление ФункциональностьServiceDesk, добавление ФункциональностьОценки
  2. Изменения в коде: ЗаданияСервер, форма проекта, форма задания, API проекта
  3. Обработчик обновления ИБ
  4. Документация архитектуры ФО: .claude/docs/functional-options-architecture.md

Вне скоупа

  • Рефакторинг глобальных ФО (ServiceDesk и SLA остаются)
  • Перенос ОценкаВыполнения в регистр
  • Изменение других проектных флагов
  • Новые глобальные ФО или константы