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