При работе с современными конфигурациями на базе Библиотеки стандартных подсистем (БСП), такими как УТ 11, ERP 2 или КА 2, разработчики часто сталкиваются с ситуацией, когда стандартные элементы управления на формах настроек ведут себя необычно. Одним из таких элементов является гиперссылка Расширения на форме ПечатныеФормыОтчетыИОбработки. На первый взгляд кажется, что это обычная кнопка с назначенным обработчиком, но при попытке найти код в конфигураторе разработчик обнаруживает пустое окно выбора команды или переход к общим командам без явного программного кода.
В этой статье мы подробно разберем, какой механизм стоит за этой кнопкой, как платформа 1С взаимодействует с системными командами и какими способами можно изменить стандартное поведение этого элемента.
Проанализируем структуру формы. Кнопка Расширения в типовых решениях — это не просто локальная команда формы. Платформа 1С:Предприятие 8.3 предоставляет ряд встроенных системных функций, которые выносятся в интерфейс как Стандартные команды. В данном случае мы имеем дело с командой управления расширениями конфигурации.
Выясним причину, по которой поиск кода через свойство ИмяКоманды не дает результата. В свойствах элемента формы указано имя Расширения, но если мы попытаемся перейти к её определению, то окажемся в разделе Глобальные команды. Это означает, что обработчик этой команды «зашит» на уровне самой платформы или делегирован общей команде администрирования. В БСП эта связь реализуется через механизм динамического построения панелей администрирования.
Рассмотрим пошагово, как обнаружить местоположение этой команды в метаданных, чтобы понять логику её появления на форме:
ПечатныеФормыОтчетыИОбработки обработки ПанельАдминистрированияБСП.Общие команды -> Администрирование или напрямую на стандартную команду управления расширениями.Важно понимать, что видимость этой кнопки регулируется не только правами доступа, но и функциональными опциями, а также программным кодом БСП при инициализации панели.
Посмотрим на то, как БСП формирует список гиперссылок. За состав панелей администрирования отвечают специальные переопределяемые модули. Если нам необходимо выяснить, при каких условиях появляется кнопка, нам следует изучить общий модуль ОбщегоНазначенияБСППереопределяемый или специализированные модули настройки параметров системы.
Проанализируем ситуацию: команда Расширения требует наличия у пользователя роли АдминистраторСистемы. Если этой роли нет, платформа автоматически скроет команду, даже если она добавлена на форму в конфигураторе. Это происходит на уровне проверки прав платформой к стандартной функции управления расширениями.
Поскольку команда является системной, мы не можем просто зайти в её модуль и дописать код. Однако существует несколько эффективных способов вмешаться в процесс открытия окна расширений. Рассмотрим их подробнее.
Наиболее корректный метод с точки зрения архитектуры 1С — это создание расширения для формы ПанельАдминистрированияБСП (или конкретной подчиненной формы настройки). Мы можем использовать событие ПередВыполнениемКоманды. Это позволит нам идентифицировать нажатие именно на «Расширения» и выполнить свой код вместо стандартного или вместе с ним.
Рассмотрим пример кода в расширении формы:
&НаКлиенте
Процедура Расш1_ПередВыполнениемКоманды(Команда, Отказ)
Если Команда.Имя = "Расширения" Тогда
// Здесь мы можем выполнить свои проверки
Сообщить("Выполняется переход к управлению расширениями...");
// Если нужно полностью заменить стандартное окно своим:
// Отказ = Истина;
// ОткрытьФорму("МояСвояФормаУправления");
КонецЕсли;
КонецПроцедуры
Если задача стоит в том, чтобы радикально изменить логику (например, открывать расширения с предустановленными фильтрами), мы можем программно скрыть стандартный элемент и добавить свой. Рассмотрим, как это сделать в обработчике ПриСозданииНаСервере.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Находим стандартный элемент и скрываем его
ЭлементРасширения = Элементы.Найти("ГруппаРасширения");
Если ЭлементРасширения <> Неопределено Тогда
ЭлементРасширения.Видимость = Ложь;
КонецЕсли;
// Создаем свою команду и кнопку-гиперссылку
НоваяКоманда = Команды.Добавить("МояКомандаРасширения");
НоваяКоманда.Действие = "Подключаемый_МояКомандаРасширения";
НовыйЭлемент = Элементы.Добавить("МояГиперссылкаРасширения", Тип("ДекорацияФормы"), Элементы.ГруппаСервис);
НовыйЭлемент.Вид = ВидДекорацииФормы.Гиперссылка;
НовыйЭлемент.Заголовок = "Управление расширениями (кастомное)";
НовыйЭлемент.ИмяКоманды = "МояКомандаРасширения";
КонецПроцедуры
Подводя итог, отметим, что механизм «Панели администрирования» в БСП спроектирован так, чтобы минимизировать ручное редактирование форм. Большинство элементов там — это ссылки на Общие команды. При нажатии на Расширение платформа вызывает встроенное диалоговое окно управления расширениями, которое не имеет модуля в дереве метаданных конфигурации, так как является частью ядра 1cv8.exe.
Для модификации этого поведения всегда выбирайте путь наименьшего сопротивления: сначала проверьте возможность использования профилей групп доступа (для скрытия кнопки), и только если этого недостаточно, прибегайте к программному перехвату команды в расширении формы через ПередВыполнениемКоманда.