В процессе разработки на платформе 1С:Предприятие часто возникает задача расширения функционала существующих форм (например, документов или справочников) без внесения изменений в основную конфигурацию. Это критически важно для сохранения возможности легкого обновления типовых решений. Рассмотрим подробнее, как реализовать добавление кнопки на форму, используя возможности Библиотеки стандартных подсистем (БСП) и внешних обработок.
Основной способ решения данной задачи — использование подсистемы БСП «Дополнительные отчеты и обработки». Этот механизм позволяет подключить внешний файл .epf, который при регистрации в системе автоматически «внедрит» свои команды в командный интерфейс указанных объектов метаданных.
Для того чтобы система распознала обработку и поняла, где именно должна появиться кнопка, в модуле объекта внешней обработки необходимо реализовать экспортную функцию СведенияОВнешнейОбработке(). Разберем по шагам структуру этой функции.
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", "СозданиеСвязанныхОбъектов"); // Указывает тип обработки
МассивНазначений = Новый Массив;
МассивНазначений.Добавить("Документ.РеализацияТоваровУслуг"); // Объект, на форме которого появится кнопка
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
ПараметрыРегистрации.Вставить("Наименование", "Создать связанный документ");
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
ПараметрыРегистрации.Вставить("Информация", "Дополнительная обработка для создания документа на основании.");
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд,
"Создать новый документ", // Представление кнопки
"СоздатьНовыйДок", // Идентификатор
"ВызовКлиентскогоМетода", // Использование
Истина); // Показывать оповещение
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
В данном примере мы используем вид СозданиеСвязанныхОбъектов. Это приведет к тому, что кнопка автоматически появится в меню «Создать на основании» формы документа РеализацияТоваровУслуг.
Проанализируем параметр Использование в таблице команд. От него зависит поведение системы при нажатии на кнопку:
ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения).ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполнения).Если наша задача — создать документ на основании текущего, проанализируем следующий пример кода, который может располагаться в модуле объекта обработки при серверном вызове:
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполнения) Экспорт
Если ИдентификаторКоманды = "СоздатьНовыйДок" Тогда
Для Каждого СсылкаОснование Из ПараметрыВыполнения.ОбъектыНазначения Цикл
НовыйДокумент = Документы.СчетНаОплатуПокупателю.СоздатьДокумент();
НовыйДокумент.Заполнить(СсылкаОснование);
НовыйДокумент.Записать();
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Здесь используется стандартный метод Заполнить(), который вызывает обработчик ОбработкаЗаполнения в модуле целевого документа. Это наиболее правильный способ создания «на основании».
Многие разработчики сталкиваются с трудностями при отладке кода внешних обработок, так как при запуске через справочник «Дополнительные отчеты и обработки» система создает временную копию файла. Выясним причину ошибки, описанной в обсуждении, когда метод Менеджер.Создать() не находил файл по прямому пути.
Во-первых, при работе в клиент-серверном варианте путь c:\МояОбработка.epf должен быть доступен серверу 1С, а не только вашему локальному компьютеру. Во-вторых, для упрощения отладки рекомендуется использовать следующий прием:
Файл -> Открыть в режиме «1С:Предприятие».Также важно помнить про Безопасный режим. Если при регистрации указано БезопасныйРежим = Истина, обработка будет ограничена в правах: она не сможет работать с файловой системой, внешними COM-объектами и некоторыми методами метаданных. Для полноценной работы с объектами конфигурации обычно устанавливают Ложь.
Рассмотрим ситуацию, когда стандартного меню БСП недостаточно. Если вам нужно поместить кнопку в произвольное место формы (например, рядом с полем «Контрагент» или в конкретную командную панель), на помощь приходят Расширения конфигурации.
Алгоритм действий в расширении:
&НаКлиенте).Этот метод дает полный контроль над визуальным интерфейсом, но требует минимального «вмешательства» (создания самого расширения), в то время как внешняя обработка подключается полностью штатными средствами через пользовательский интерфейс.
Мы проанализировали два основных способа добавления кнопок на формы 1С. Метод через внешние обработки БСП идеален для команд заполнения и создания связанных объектов, так как он не требует модификации структуры базы. Расширения же предоставляют максимальную гибкость в оформлении интерфейса. Выбор метода зависит от конкретных требований к расположению кнопки и необходимости сохранения «чистоты» конфигурации.