Как добавить кнопку на управляемую форму в типовой конфигурации 1С без изменения модуля формы

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

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

Способ 1. Использование механизма расширений конфигурации

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

  1. Создаем новое расширение в базе данных.
  2. Добавляем в расширение нужную форму (например, форму документа РеализацияТоваровУслуг). При этом сама форма в основной конфигурации остается «замороженной».
  3. В редакторе формы расширения мы можем визуально добавить новую команду и вытащить её на командную панель или в любое другое место формы.
  4. Логику нажатия кнопки мы пишем в модуле формы расширения.

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


&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    // Здесь можно выполнить дополнительную инициализацию
КонецПроцедуры

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

Способ 2. Подключение внешней обработки через БСП (Заполнение объекта)

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

Нам необходимо создать внешнюю обработку и прописать в её модуле объекта специальную функцию СведенияОВнешнейОбработке. Рассмотрим пример кода, который регистрирует обработку как инструмент заполнения объекта, что автоматически добавляет кнопку в меню «Изменить» или командную панель:


Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = Новый Структура;
    МассивНазначений = Новый Массив;
    МассивНазначений.Добавить("Документ.ОтражениеЗарплатыВБухучете"); // Указываем нужный объект
    
    ПараметрыРегистрации.Вставить("Вид", "ЗаполнениеОбъекта");
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    ПараметрыРегистрации.Вставить("Наименование", "Моя дополнительная команда");
    ПараметрыРегистрации.Вставить("Версия", "1.0");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
    
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    ДобавитьКоманду(ТаблицаКоманд, "Название кнопки", "ИдентификаторКоманды", "ОткрытиеФормы", Истина);
    
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    Возврат ПараметрыРегистрации;
КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = Представление;
    НоваяКоманда.Идентификатор = Идентификатор;
    НоваяКоманда.Использование = Использование;
    НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
    НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры

При использовании модификатора ОткрытиеФормы БСП сама добавит кнопку на форму. При её нажатии откроется форма вашей внешней обработки, в которую в параметре ОбъектыНазначения будет передана ссылка на текущий документ. Это идеальный вариант, если нужно передать ссылку документа в свою форму, как и требовалось в обсуждении.

Способ 3. Глобальные (общие) команды

Посмотрим на ситуацию под другим углом. В дереве метаданных конфигурации есть раздел Общие -> Общие команды. Мы можем создать новую команду там. Проанализируем настройки такой команды:

Этот метод хорош тем, что мы вообще не трогаем объект «Форма». Команда живет отдельно, а платформа сама «внедряет» её в интерфейс указанных объектов. Однако для добавления общей команды в типовую конфигурацию все же придется либо снять замок с корня конфигурации, либо (что правильнее) добавить эту общую команду через расширение.

Способ 4. Переопределяемые общие модули БСП

В современных конфигурациях (таких как ERP, КА или БП 3.0) разработчики 1С предусмотрели специальные «точки входа» для программистов. Рассмотрим работу с общим модулем МодификацияКонфигурацииПереопределяемый. В нем часто встречаются процедуры, которые вызываются платформой при создании любой формы в системе.

Разберем логику: внутри такой процедуры можно написать код, который проверяет имя открываемой формы и программно добавляет на неё элементы. Это позволяет централизованно управлять изменениями интерфейса. Пример программного добавления кнопки выглядит так:


// В обработчике при создании формы на сервере
ИмяКоманды = "МояСлужебнаяКоманда";
НоваяКоманда = ЭтаФорма.Команды.Добавить(ИмяКоманды);
НоваяКоманда.Действие = "Подключаемый_ВыполнитьМоюКоманду";
НоваяКоманда.Заголовок = "Нажать меня";

НовыйЭлемент = ЭтаФорма.Элементы.Добавить("КнопкаМоя", Тип("КнопкаФормы"), ЭтаФорма.КоманднаяПанель);
НовыйЭлемент.ИмяКоманды = ИмяКоманды;

Важное примечание: При программном добавлении команды необходимо, чтобы в модуле формы существовала процедура-обработчик. Если её там нет (а мы договорились не менять модуль формы), то этот способ в чистом виде (через обычные модули) будет работать сложно. Однако в связке с расширением, где обработчик можно добавить в &После, это становится мощным инструментом.

Резюме

Мы проанализировали несколько подходов к модификации интерфейса типовых решений. Подведем итоги:

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

Выбор конкретного метода зависит от версии вашей платформы и наличия БСП в конфигурации. В большинстве случаев для современных систем (УТ 11, БП 3.0) рекомендуется начинать с расширения или механизма дополнительных обработок.

← На главную