При разработке расширений для типовых конфигураций часто возникает задача добавить дополнительную кнопку или команду во все формы объектов системы (документов или справочников). Многие разработчики на начальном этапе пытаются использовать подписку на событие ОбработкаПолученияФормы, однако сталкиваются с тем, что в момент срабатывания подписки экземпляр формы еще не создан, и управлять ее элементами невозможно. Давайте разберем, как решить эту задачу правильно.
Подписка на событие ОбработкаПолученияФормы предназначена исключительно для подмены метаданных открываемой формы. Она срабатывает на сервере до того, как будет сформирован объект формы на клиенте. В этот момент вы работаете не с конкретным экземпляром формы, который увидит пользователь, а с описанием формы из метаданных. Поэтому любые попытки добавить элементы управления или кнопки через ПолучитьФорму в рамках этой подписки не принесут результата — форма будет пустой или стандартной.
Для решения задачи универсального добавления функционала в конфигурации, основанные на Библиотеке стандартных подсистем (БСП), рекомендуется использовать штатный механизм ПодключаемыеКоманды. Это позволяет добавлять кнопки в командную панель формы автоматически, не снимая конфигурацию с поддержки и не модифицируя формы каждого объекта.
Реализация задачи через расширение конфигурации включает следующие шаги:
&После для процедуры ПриСозданииНаСервере в модуле формы или соответствующих обработчиках БСП.Самый надежный способ «вклиниться» в процесс создания формы — расширить процедуру ПриСозданииНаСервере. Если в конфигурации используется механизм БСП, вы можете задействовать процедуру ПодключаемыеКоманды.ПриСозданииНаСервере.
Разберем пример кода, который можно разместить в расширении для добавления кнопки:
&После("ПриСозданииНаСервере")
Процедура Расш_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Вызываем стандартный метод БСП для добавления команд
// Эта процедура анализирует настройки и добавляет кнопки в командную панель
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтаФорма);
КонецПроцедуры
Важно помнить, что для корректной работы кнопки вам потребуется:
ДополнительныеОтчетыИОбработки или программно).Использование ПодключаемыеКоманды является «чистым» решением по нескольким причинам:
Если ваша задача — сделать универсальную кнопку «Создать заявку программисту» или любой другой сервис во всех формах системы, не пытайтесь использовать ОбработкаПолученияФормы. Вместо этого используйте возможности БСП по подключению команд. Это позволит вам создать гибкое расширение, которое будет работать в любой конфигурации на базе БСП без риска сломать стандартную логику при обновлении системы.