Часто в процессе разработки возникает задача организовать интерфейс документа так, чтобы многочисленные печатные формы были упорядочены по смысловым группам. Стандартный механизм Библиотеки Стандартных Подсистем (БСП) в 1С:Бухгалтерии 3.0 автоматически помещает кнопки внешних печатных форм в подменю Печать. Попытки изменить это поведение через стандартный параметр МестоРазмещения в функции СведенияОВнешнейОбработке зачастую не приводят к успеху, так как этот параметр предназначен для выбора между предопределенными системными группами.
Рассмотрим, как решить эту задачу, принудительно переместив кнопку внешней обработки в нужное нам подменю на форме документа.
Важно понимать, что система БСП при открытии формы документа динамически создает элементы управления для всех зарегистрированных печатных форм. Имя такого элемента формируется по определенному шаблону: ПодменюПечатьОбычное_ + [ИдентификаторКомандыИзВПФ].
Чтобы управлять этим элементом, нам нужно:
Идентификатор в коде внешней печатной формы (ВПФ).ПриСозданииНаСервере.Элементы.Переместить().В модуле объекта вашей внешней печатной формы в функции СведенияОВнешнейОбработке необходимо задать четкий идентификатор команды. Это позволит нам потом легко найти кнопку среди всех остальных элементов управления.
Функция СведенияОВнешнейОбработке() Экспорт
// ... стандартный код регистрации ...
ТаблицаКоманд = ПолучитьТаблицуКоманд();
// Задаем уникальный идентификатор, например, "ДоговорВнешний"
ДобавитьКоманду(ТаблицаКоманд, "", "Рабочий договор", "ДоговорВнешний", "ВызовКлиентскогоМетода", Истина, "ПечатьMXL");
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
Теперь необходимо внести изменения в модуль формы того документа, в который мы добавляем печатную форму (лучше всего это делать в Расширении конфигурации, чтобы не снимать основной код с поддержки).
В обработчике ПриСозданииНаСервере нам нужно найти группу, куда мы хотим перенести кнопку, и сам элемент кнопки, созданный системой.
// Имя группы, которую вы создали на форме в режиме конфигуратора
ИмяГруппы = "ПодменюДоговорКонтрагента";
ГруппаФормыСКомандамиПечати = Элементы.Найти(ИмяГруппы);
// Ищем элемент, который создала БСП для нашей команды
// Имя элемента состоит из префикса БСП и нашего идентификатора
ИмяКнопки = "ПодменюПечатьОбычное_ДоговорВнешний";
ЭлементКнопки = Элементы.Найти(ИмяКнопки);
Если ЭлементКнопки <> Неопределено И ГруппаФормыСКомандамиПечати <> Неопределено Тогда
Элементы.Переместить(ЭлементКнопки, ГруппаФормыСКомандамиПечати);
КонецЕсли;
Рассмотрим подробнее преимущества такого подхода:
Расширений вы не затрагиваете типовые объекты, что делает процесс обновления конфигурации 1С безопасным и предсказуемым.Элементы.Переместить() является штатным механизмом платформы 1С для работы с динамическим интерфейсом, что гарантирует стабильную работу после переноса кнопки.При использовании данного способа важно помнить: если вы измените Идентификатор команды в коде ВПФ, не забудьте обновить имя элемента в коде ПриСозданииНаСервере. Рекомендуем также проверять наличие группы и элемента перед перемещением, чтобы избежать ошибок при открытии формы в ситуациях, когда, например, расширение отключено или ВПФ не загружена.
Теперь ваша внешняя печатная форма будет аккуратно отображаться именно в том подменю, которое вы подготовили для договоров, обеспечивая пользователям удобный и интуитивно понятный интерфейс работы с документами.