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