Как исправить ошибку БСП при включении подсистемы «Оценка производительности» в командный интерфейс?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке и кастомизации конфигураций на платформе 1С:Предприятие 8.3 с использованием Библиотеки стандартных подсистем (БСП) программисты часто сталкиваются с необходимостью сделать те или иные служебные функции более доступными для пользователей. Одним из таких востребованных инструментов является подсистема ОценкаПроизводительности (инструментарий для замера времени выполнения операций по методологии APDEX).

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

Почему возникает ошибка при прямом изменении настроек подсистемы БСП?

Для того чтобы понять природу ошибки, заглянем во внутреннюю архитектуру Библиотеки стандартных подсистем. Попытка напрямую отредактировать свойства системной подсистемы ОценкаПроизводительности (которая является дочерней для подсистемы СтандартныеПодсистемы) нарушает сразу несколько стандартов разработки 1С:

  1. Конфликт в справочнике идентификаторов метаданных. БСП жестко контролирует структуру конфигурации. Вся иерархия объектов регистрируется в служебном справочнике ИдентификаторыОбъектовМетаданных. Когда мы принудительно меняем настройки отображения подсистемы или пытаемся перенести ее в корень дерева метаданных, физическая структура перестает соответствовать зарегистрированной. При запуске механизм обновления ИБ обнаруживает несоответствие и аварийно завершает работу.
  2. Нарушение логики инициализации параметров сеанса. Подсистема оценки производительности критична к контексту выполнения. Ее объекты (команды, формы) используют специализированные параметры сеанса, которые должны быть гарантированно инициализированы на сервере до того, как интерфейс будет отрисован на клиенте. Прямое добавление подсистемы в командный интерфейс заставляет платформу обращаться к ее объектам раньше, чем БСП завершит полный цикл инициализации системы. Это приводит к ошибке «Попытка получения неинициализированного значения параметра сеанса».
  3. Отсутствие регистрации в переопределяемых модулях. В БСП 3.1 и выше при добавлении или изменении структуры подсистем требуется их явная регистрация в общем модуле ПодсистемыКонфигурацииПереопределяемый в процедуре ПриДобавленииПодсистем(). Если интеграция нарушена, механизмы БСП передают некорректные параметры во внутренние процедуры, генерируя системную ошибку работы с типами данных.

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

Решение 1. Использование штатного интерфейса в типовых конфигурациях

Прежде чем вносить изменения в метаданные, проанализируем типовой функционал. Разработчики БСП уже позаботились о том, чтобы администраторы имели доступ к механизмам замера производительности. В любой современной типовой конфигурации (будь то 1С:ERP, 1С:Комплексная автоматизация, 1С:Управление торговлей или 1С:Бухгалтерия) этот функционал уже встроен в интерфейс.

Рассмотрим, как получить к нему доступ в режиме «1С:Предприятие»:

  1. Перейдем в раздел Администрирование (в некоторых конфигурациях этот раздел называется НСИ и администрирование).
  2. Найдем и откроем пункт Обслуживание.
  3. В открывшейся панели развернем группу Оценка производительности.

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

Решение 2. Создание собственного раздела меню для быстрого доступа

Если перед нами стоит задача вывести конкретные объекты оценки производительности (например, справочник КлючевыеОперации или отчет ОценкаПроизводительности) в специализированное меню для удобства пользователей или разработчиков, мы ни в коем случае не должны изменять свойства предопределенной подсистемы ОценкаПроизводительности.

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

  1. Создадим новую пользовательскую подсистему. Назовем ее, например, _НашАдминистратор. Установим для нее флаг «Включать в командный интерфейс». Определим ее местоположение в командном интерфейсе (например, сделаем ее разделом верхнего уровня или подчиненной подсистемой в нашем кастомном меню).
  2. Добавим конкретные объекты в состав нашей подсистемы. Откроем свойства нашей новой подсистемы _НашАдминистратор, перейдем на вкладку Состав и отметим флагами только те объекты из БСП, которые нам необходимы. Например, добавим справочник КлючевыеОперации и отчет ОценкаПроизводительности. При этом сама служебная подсистема ОценкаПроизводительности в составе СтандартныеПодсистемы останется нетронутой.
  3. Обновим идентификаторы объектов метаданных. Для того чтобы платформа корректно зарегистрировала новые связи в служебных таблицах БСП, нам необходимо запустить базу в режиме «1С:Предприятие» с параметром обновления. В параметрах запуска конфигурации (в меню Сервис — Параметры — Запуск 1С:Предприятия — Основные) в поле Параметры запуска укажем:

/С ЗапуститьОбновлениеИнформационнойБазы

После этого запустим сеанс. Программа выполнит штатные процедуры обновления ИБ, пересчитает справочник ИдентификатовОбъектовМетаданных и корректно отобразит наши элементы в новом меню без генерации runtime-ошибок.

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


ПараметрыОбновления = Справочники.ИдентификаторыОбъектовМетаданных.ПараметрыОбновления();
ПараметрыОбновления.ВызыватьИсключениеПриОшибках = Истина;
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(ПараметрыОбновления);

Этот метод гарантирует, что все связи метаданных будут актуализированы, а конфигурация будет работать стабильно и без сбоев.

Таким образом, соблюдая стандарты проектирования БСП и не вмешиваясь в структуру предопределенных служебных подсистем, мы можем гибко настраивать командный интерфейс под нужды пользователей, сохраняя при этом полную работоспособность и обновляемость конфигурации.

← На главную