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