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