При разработке и кастомизации конфигураций на платформе 1С:Предприятие 8.3 с использованием Библиотеки стандартных подсистем (БСП) программисты часто сталкиваются с необходимостью сделать те или иные служебные функции более доступными для пользователей. Одним из таких востребованных инструментов является подсистема ОценкаПроизводительности (инструментарий для замера времени выполнения операций по методологии APDEX).
Однако при попытке «в лоб» вывести эту подсистему в меню конфигурации путем установки флага «Включать в командный интерфейс» в свойствах метаданных, разработчик сталкивается с фатальной ошибкой системы при запуске программы. В этой статье мы подробно разберем, почему возникает данная проблема, проанализируем внутренние механизмы БСП и рассмотрим правильные, безопасные способы вывода нужных инструментов в пользовательский интерфейс.
Для того чтобы понять природу ошибки, заглянем во внутреннюю архитектуру Библиотеки стандартных подсистем. Попытка напрямую отредактировать свойства системной подсистемы ОценкаПроизводительности (которая является дочерней для подсистемы СтандартныеПодсистемы) нарушает сразу несколько стандартов разработки 1С:
ИдентификаторыОбъектовМетаданных. Когда мы принудительно меняем настройки отображения подсистемы или пытаемся перенести ее в корень дерева метаданных, физическая структура перестает соответствовать зарегистрированной. При запуске механизм обновления ИБ обнаруживает несоответствие и аварийно завершает работу.ПодсистемыКонфигурацииПереопределяемый в процедуре ПриДобавленииПодсистем(). Если интеграция нарушена, механизмы БСП передают некорректные параметры во внутренние процедуры, генерируя системную ошибку работы с типами данных.Выяснив причины, перейдем к решению задачи. Рассмотрим два основных сценария: использование штатных возможностей конфигурации и создание собственного корректного интерфейса.
Прежде чем вносить изменения в метаданные, проанализируем типовой функционал. Разработчики БСП уже позаботились о том, чтобы администраторы имели доступ к механизмам замера производительности. В любой современной типовой конфигурации (будь то 1С:ERP, 1С:Комплексная автоматизация, 1С:Управление торговлей или 1С:Бухгалтерия) этот функционал уже встроен в интерфейс.
Рассмотрим, как получить к нему доступ в режиме «1С:Предприятие»:
Здесь в штатном режиме доступны все необходимые инструменты: настройки профилей ключевых операций, замеры времени, а также отчет по оценке производительности (APDEX). Никаких доработок метаданных для этого не требуется.
Если перед нами стоит задача вывести конкретные объекты оценки производительности (например, справочник КлючевыеОперации или отчет ОценкаПроизводительности) в специализированное меню для удобства пользователей или разработчиков, мы ни в коем случае не должны изменять свойства предопределенной подсистемы ОценкаПроизводительности.
Разберем по шагам правильный алгоритм действий в конфигураторе:
_НашАдминистратор. Установим для нее флаг «Включать в командный интерфейс». Определим ее местоположение в командном интерфейсе (например, сделаем ее разделом верхнего уровня или подчиненной подсистемой в нашем кастомном меню)._НашАдминистратор, перейдем на вкладку Состав и отметим флагами только те объекты из БСП, которые нам необходимы. Например, добавим справочник КлючевыеОперации и отчет ОценкаПроизводительности. При этом сама служебная подсистема ОценкаПроизводительности в составе СтандартныеПодсистемы останется нетронутой.
/С ЗапуститьОбновлениеИнформационнойБазы
После этого запустим сеанс. Программа выполнит штатные процедуры обновления ИБ, пересчитает справочник ИдентификатовОбъектовМетаданных и корректно отобразит наши элементы в новом меню без генерации runtime-ошибок.
Если база данных запускается в режиме отладки и нам требуется принудительно обновить идентификаторы программным путем, мы можем использовать следующий вызов в консоли кода или во внешней обработке:
ПараметрыОбновления = Справочники.ИдентификаторыОбъектовМетаданных.ПараметрыОбновления();
ПараметрыОбновления.ВызыватьИсключениеПриОшибках = Истина;
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(ПараметрыОбновления);
Этот метод гарантирует, что все связи метаданных будут актуализированы, а конфигурация будет работать стабильно и без сбоев.
Таким образом, соблюдая стандарты проектирования БСП и не вмешиваясь в структуру предопределенных служебных подсистем, мы можем гибко настраивать командный интерфейс под нужды пользователей, сохраняя при этом полную работоспособность и обновляемость конфигурации.