Как найти и изменить программно создаваемую кнопку «Заполнение» в формах 1С на базе БСП

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

При разработке или доработке конфигураций на базе Библиотеки стандартных подсистем (БСП), таких как УТ 11, ERP 2 или УНФ, разработчики часто сталкиваются с ситуацией, когда на форме документа внезапно появляется кнопка или подменю (например, «Заполнение» или «Заполнить»), которую невозможно найти в редакторе форм в конфигураторе. Это происходит потому, что современные типовые решения используют механизм подключаемых команд, который генерирует элементы интерфейса динамически в момент создания формы на сервере.

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

Понимание механизма подключаемых команд

Проанализируем ситуацию: когда вы подключаете внешнюю обработку через справочник «Дополнительные отчеты и обработки», БСП анализирует её свойства. Если в модуле объекта обработки в функции СведенияОВнешнейОбработке() указан вид ДополнительнаяОбработка или ЗаполнениеОбъекта, система автоматически привязывает её к определенным группам команд на форме документа.

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

Способ 1. Поиск в общих модулях БСП

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

Рассмотрим процедуру ПриОпределенииВидовПодключаемыхКоманд. Вам необходимо выполнить глобальный поиск по конфигурации этой процедуры. Обычно она располагается в одном из следующих общих модулей:

Пример кода, который отвечает за создание подменю «Заполнить»:


Процедура ПриОпределенииВидовПодключаемыхКоманд(ВидыПодключаемыхКоманд) Экспорт
    Вид = ВидыПодключаемыхКоманд.Добавить();
    Вид.Имя = "ЗаполнениеОбъектов";
    Вид.ИмяПодменю = "ПодменюЗаполнить";
    Вид.Заголовок = НСтр("ru = 'Заполнение'"); // Вот здесь задается текст кнопки!
    Вид.Порядок = 60;
    Вид.Картинка = БиблиотекаКартинок.ЗаполнитьФорму;
    Вид.Отображение = ОтображениеКнопки.КартинкаИТекст;
КонецПроцедуры

Если вы измените значение в параметре Вид.Заголовок в этом модуле, название кнопки изменится во всех документах системы, где используется этот механизм. Это самый быстрый, но глобальный способ.

Способ 2. Изменение названия в модуле менеджера конкретного документа

Иногда требуется изменить название кнопки не везде, а только в конкретном типе документа (например, только в «Реализации товаров и услуг»). В этом случае нам нужно заглянуть в Модуль менеджера этого объекта.

Найдем там процедуру ПриОпределенииКомандПодключенныхКОбъекту. В типовых конфигурациях именно здесь описывается, какие группы команд будут доступны для данного документа. Мы можем программно найти нужную группу в коллекции и переименовать её.

Рассмотрим пример кода в модуле менеджера:


Процедура ПриОпределенииКомандПодключенныхКОбъекту(Настройки) Экспорт
    // Находим вид команды "ЗаполнениеОбъектов" среди подключенных
    Для Каждого ВидКоманды Из Настройки.ВидыКоманд Цикл
        Если ВидКоманды.Имя = "ЗаполнениеОбъектов" Тогда
            ВидКоманды.Заголовок = "Мое новое название";
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Способ 3. Переопределение в модуле формы документа

Если вы не хотите менять общие модули или модули менеджера (например, чтобы сохранить поддержку конфигурации), можно прибегнуть к «хирургическому» вмешательству прямо в форме. Посмотрим на процедуру ПриСозданииНаСервере в модуле формы документа.

Обычно там присутствует стандартный вызов БСП:

ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);

После выполнения этой строки все кнопки уже созданы программно и добавлены в коллекцию ЭтаФорма.Элементы. Мы можем найти элемент формы по его имени (которое мы узнали из Способа 1) и изменить его заголовок.

Проанализируем пример реализации:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Сначала даем БСП создать все стандартные команды
    // СтандартныеПодсистемы.ПодключаемыеКоманды
    ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
    // Конец СтандартныеПодсистемы.ПодключаемыеКоманды
    
    // Теперь ищем программно созданный элемент
    // Имя "ПодменюЗаполнить" является стандартным для БСП
    ЭлементПодменю = Элементы.Найти("ПодменюЗаполнить");
    Если ЭлементПодменю <> Неопределено Тогда
        ЭлементПодменю.Заголовок = "Сервис заполнения";
    КонецЕсли;
    
КонецПроцедуры

Почему обычный глобальный поиск текста «Заполнение» не помогает?

Разберем причину, по которой поиск часто заходит в тупик. В коде 1С строки часто оборачиваются в функцию НСтр() для поддержки многоязычности. При поиске по всей конфигурации стоит искать не просто слово Заполнение, а фрагменты кода, содержащие "Заполнение" или 'Заполнение' (с учетом кавычек), либо искать имя подменю — ПодменюЗаполнить.

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

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

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

← На главную