Как подключить внешнюю печатную форму к документу, созданному в расширении?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом IT и автоматизация бизнеса
← На главную

При разработке функционала в расширениях 1С программисты часто сталкиваются с ситуацией, когда к новому документу, добавленному в расширение, необходимо подключить внешнюю печатную форму (ВПФ). Казалось бы, стандартный механизм Библиотеки стандартных подсистем (БСП) должен работать универсально, однако при попытке выбрать документ из расширения в справочнике ДополнительныеОтчетыИОбработки он либо отсутствует в списке, либо не выбирается. Проанализируем, почему это происходит и как правильно организовать печать для таких объектов.

Разберем причину: конфликт идентификаторов объектов

Первым делом выясним причину проблемы на уровне архитектуры данных. В типовых конфигурациях (ЗУП 3, ERP, КА) для хранения настроек внешних форм используется табличная часть Назначения справочника ДополнительныеОтчетыИОбработки. Реквизит ОбъектНазначения в этой табличной части имеет определенный тип данных. В большинстве конфигураций это СправочникСсылка.ИдентификаторыОбъектовМетаданных.

Когда мы добавляем объект (документ или справочник) непосредственно в основную конфигурацию, он регистрируется именно в этом справочнике. Однако объекты, добавленные через расширения, регистрируются в другом справочнике — ИдентификаторыОбъектовРасширений. Из-за того, что в определяемом типе реквизита часто отсутствует ссылка на идентификаторы расширений, система «не видит» ваш документ или запрещает его выбор. Рассмотрим подробнее, как обойти это ограничение и какие подходы считаются наиболее правильными.

Способ 1. Реализация команд печати внутри расширения (Рекомендуемый)

Начиная с версий БСП 2.5 и выше, компания 1С рекомендует отказываться от использования механизма внешних печатных форм (через справочник доп. обработок) в пользу разработки команд печати непосредственно внутри расширения. Это позволяет избежать проблем с правами доступа и типами идентификаторов.

Проанализируем процесс реализации этого подхода по шагам:

  1. Подготовка документа в расширении. Убедимся, что у нашего документа в расширении включено свойство Использовать стандартные команды. Это критически важно для того, чтобы механизмы БСП могли интегрировать кнопки в форму.
  2. Регистрация в модуле менеджера. В модуле менеджера документа (в самом расширении) необходимо создать процедуру ДобавитьКомандыПечати. Именно через неё БСП узнает, какие формы доступны для объекта.

Рассмотрим пример кода, который необходимо разместить в модуле менеджера документа расширения:


Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
	
	КомандаПечати = КомандыПечати.Добавить();
	КомандаПечати.Менеджер          = "Документ.МойНовыйДокумент";
	КомандаПечати.Идентификатор     = "ПФ_MXL_МояПечатнаяФорма";
	КомандаПечати.Представление     = НСтр("ru = 'Моя печатная форма (из расширения)'");
	КомандаПечати.ПроверкаПроведенности = Ложь;
	
КонецПроцедуры

После добавления этой процедуры и обновления конфигурации базы данных, кнопка печати должна появиться в форме документа автоматически, так как подсистема печати БСП сканирует модули менеджеров объектов.

Способ 2. Использование внешних обработок (ВПФ) через «хак» с идентификаторами

Если по каким-то причинам вам крайне важно использовать именно внешнюю обработку (например, чтобы иметь возможность править макет без перезапуска сеансов пользователей), можно попытаться заставить систему принять объект расширения. Рассмотрим, как это сделать программно.

Выясним ситуацию: форма выбора в справочнике ДополнительныеОтчетыИОбработки фильтрует объекты. Чтобы обойти это, можно принудительно программно записать ссылку на ИдентификаторыОбъектовРасширений в реквизит ОбъектНазначения. Технически БСП умеет обрабатывать такие ссылки при формировании меню печати, проблема заключается лишь в интерфейсе выбора.

Важный нюанс: Для корректной работы этого метода убедитесь, что справочник идентификаторов расширений актуален. Выполним в консоли кода следующую команду:

Справочники.ИдентификаторыОбъектовРасширений.ОбновитьДанныеСправочника();

Также проанализируем ситуацию с безопасным режимом. Если ваша ВПФ обращается к реквизитам документа, который существует только в расширении, стандартный «безопасный режим» внешней обработки может заблокировать доступ к этим метаданным. В настройках подключения ВПФ в интерфейсе 1С рекомендуется снять флажок «Безопасный режим».

Способ 3. Переопределение объектов с командами печати

Как упомянул автор темы, он пытался использовать процедуру УправлениеПечатьюПереопределяемый.ПриОпределенииОбъектовСКомандамиПечати. Посмотрим на правильное заполнение этой процедуры в расширении:


&Вместо("ПриОпределенииОбъектовСКомандамиПечати")
Процедура Расш_ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов)
	ПродолжитьВызов(СписокОбъектов);
	СписокОбъектов.Добавить(Метаданные.Документы.МойНовыйДокумент);
КонецПроцедуры

Однако помните, что простого добавления в этот список недостаточно, если типы данных в справочнике ДополнительныеОтчетыИОбработки не расширены в основной конфигурации. Этот метод лучше всего работает в паре со Способом 1.

Сравнение подходов: что выбрать?

Рассмотрим плюсы и минусы использования печатных форм внутри расширения (современный метод) по сравнению с внешними обработками (классический метод).

Преимущества реализации в расширении:

Недостатки реализации в расширении:

Выводы и рекомендации

Проанализировав проблему, мы видим, что 1С планомерно уходит от концепции внешних обработок для расширяемых систем. Если вы создаете новый документ в расширении, наиболее правильным и стабильным решением будет внедрение макета и кода печати в это же расширение. Это обеспечит корректную работу всех механизмов БСП и избавит от проблем с «невидимостью» объектов в списках назначения.

Если же бизнес-процесс требует именно внешней обработки, используйте программное заполнение справочника идентификаторов или воспользуйтесь «хаком» через групповое изменение реквизитов, предварительно убедившись, что в расширении разрешен небезопасный режим для корректного чтения метаданных документа.

← На главную