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