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