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