Почему не отображается печатная форма из расширения в 1С:ERP и как это исправить?

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

При разработке печатных форм в расширениях конфигураций на базе БСП (Библиотеки Стандартных Подсистем) разработчики часто сталкиваются с ситуацией: скопированная из демо-базы БСП обработка печати перенесена в расширение, однако созданная печатная форма не появляется в меню «Печать» документа. Разберем причинно-следственные связи этой проблемы и рассмотрим правильные варианты реализации печатных форм через расширение.

В чем заключается проблема

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

Написание процедур ПриОпределенииНастроек и ДобавитьКомандыПечати в модуле менеджера обработки расширения «вхолостую» не передает исполнение в подсистему печати, поэтому кнопка печати в форме списка или форме документа не появляется.

Способ 1. Расширение модуля менеджера документа

Рассмотрим наиболее прямой способ решения задачи — заимствование целевого документа в расширение и перехват процедуры добавления команд печати.

  1. Добавим целевой документ (например, РасходныйОрдерНаТовары) в расширение конфигурации.
  2. Перейдем в модуль менеджера заимствованного документа.
  3. Добавим экспортную процедуру ДобавитьКомандыПечати с помощью аннотации &После:

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

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

Способ 2. Перехват сбора команд в общем модуле подсистемы печати

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

  1. Заимствуем в расширение общий модуль УправлениеПечатьюПереопределяемый или УправлениеПечатью.
  2. Перехватываем процедуру определения объектов с командами печати:

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

Также дорабатываем процедуру формирования команд для конкретной формы:


&После("КомандыПечатиФормы")
Процедура Расш_КомандыПечатиФормы(ИмяФормы, КомандыПечати) Экспорт
    Если ИмяФормы = "Документ.РасходныйОрдерНаТовары.Форма.ФормаСписка" 
        Или ИмяФормы = "Документ.РасходныйОрдерНаТовары.Форма.ФормаДокумента" Тогда
        
        Команда = КомандыПечати.Добавить();
        Команда.Представление = НСтр("ru = 'Счет на оплату (из расширения)'");
        Команда.Идентификатор = "СчетВПФ";
        Команда.МенеджерПечати = "Обработка.Расш_ПечатьСчета";
    КонецЕсли;
КонецПроцедуры

Способ 3. Использование внешних печатных форм (ВПФ)

Если нет необходимости хранить обработку именно внутри метаданных расширения, проанализируем стандартный механизм работы БСП с внешними обработками. Сохраним созданную обработку в файл формата .epf и подключим ее штатно через пользовательский интерфейс:

  1. Перейдем в раздел Администранция — Печатные формы, отчеты и обработки — Дополнительные отчеты и обработки.
  2. Нажмем кнопку Добавить из файла и выберем файл нашей внешней обработки.
  3. В этом сценарии процедура ПриОпределенииНастроек с указанием Настройки.Размещение.Добавить(...) отработает автоматически и добавит команду печати в указанный документ без дополнительного программирования.

Важные нюансы и частые ошибки

При работе с печатными формами в расширениях обратим внимание на следующие ключевые моменты:

  1. Кэширование команд печати: БСП сохраняет кэш команд для форм. После внесения изменений в код модулей обязательно перезапустите сеанс пользователя или сбросьте кэш команд печати.
  2. Проверка прав доступа: Если пользователям не назначены права на чтение и использование нового объекта обработки из расширения, БСП автоматически скроет кнопки печати в интерфейсе.
  3. Именование менеджеров печати: При заполнении параметра МенеджерПечати всегда учитывайте префикс расширения в имени обработки (например, Обработка.Префикс_ИмяОбработки).
← На главную