Как подключить внешнюю печатную форму к документу Прием и передача в ремонт в 1С:УНФ?

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

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

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

Почему документ не видит внешние печатные формы: анализируем причины

В типовых решениях 1С функционал печати управляется централизованно через БСП. Для того чтобы документ мог использовать как встроенные, так и подключаемые внешние печатные формы, он должен удовлетворять нескольким обязательным условиям:

  1. Регистрация в подсистеме печати: метаданные документа должны быть явно включены в список объектов, поддерживающих печать, внутри общего модуля подсистемы. Если разработчики конфигурации изначально не предполагали печать для этого объекта, его просто нет в составе подсистемы.
  2. Наличие интерфейсных процедур в модуле менеджера: документ обязан содержать экспортную процедуру сбора команд печати, к которой обращается БСП при формировании подменю.
  3. Инициализация команд в экранных формах: формы документа и списка должны динамически подключать команды печати при своем открытии.

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

Шаг 1. Регистрация документа в подсистеме печати БСП

Разберем ключевое действие, решающее основную проблему видимости объекта. Нам необходимо зарегистрировать документ в общем перечне объектов конфигурации, поддерживающих печать.

Откроем конфигуратор и найдем общий модуль УправлениеПечатьюПереопределяемый. В нем найдем процедуру ПриОпределенииОбъектовСКомандамиПечати. Добавим в нее наш документ:


Процедура ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов) Экспорт
    
    // Добавляем документ в общий список подсистемы печати
    СписокОбъектов.Добавить(Документы.ПриемИПередачаВРемонт);
    
КонецПроцедуры

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

Шаг 2. Проверка модуля менеджера документа

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

Если в документе нет собственных типовых печатных форм, процедура может быть пустой, однако ее наличие критически важно для предотвращения ошибок времени выполнения:


// Модуль менеджера документа ПриемИПередачаВРемонт

Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
    
    // Если встроенных команд печати нет, оставляем тело процедуры пустым.
    // Наличие процедуры необходимо для БСП при поиске и подключении внешних форм.
    
КонецПроцедуры

Шаг 3. Подключение подсистемы в формах документа и списка

Проанализируем экранные формы объекта. Чтобы кнопка «Печать» и выпадающий список внешних обработок отобразились на форме, форма должна инициализировать элементы командной панели программно.

Откроем форму документа и проверим обработчик события ПриСозданииНаСервере:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Инициализация команд подсистемы печати
    УправлениеПечатью.ПриСозданииНаСервере(ЭтотОбъект);
    
КонецПроцедуры

Также в модуле формы документа на клиенте должен присутствовать обработчик подключаемых команд печати. Добавим следующую процедуру:


&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуПечати(Команда)
    
    УправлениеПечатьюКлиент.ВыполнитьПодключаемуюКомандуПечати(Команда, ЭтотОбъект, Объект.Ссылка);
    
КонецПроцедуры

Аналогичным образом вызов УправлениеПечатью.ПриСозданииНаСервере настраивается и в форме списка документов, если требуется печать выделенных документов прямо из журнала.

Шаг 4. Настройка регистрации в самой внешней печатной форме

Посмотрим на требования к модулю объекта самой внешней обработки. В функции СведенияОВнешнейОбработке() необходимо точно указать полное имя объекта метаданных:


Функция СведенияОВнешнейОбработке() Экспорт

    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
    
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
    ПараметрыРегистрации.Версия = "1.0";
    ПараметрыРегистрации.БезопасныйРежим = Ложь;
    
    // Указываем точный объект метаданных назначения
    ПараметрыРегистрации.Назначение.Добавить("Документ.ПриемИПередачаВРемонт");
    
    Команда = ПараметрыРегистрации.Команды.Добавить();
    Команда.Представление = "Акт приема в ремонт";
    Команда.Идентификатор = "АктПриемаВРемонт";
    Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    Команда.ПоказыватьОповещение = Истина;
    Команда.Модификатор = "ПечатьMXL";
    
    Возврат ПараметрыРегистрации;

КонецФункции

Альтернативные способы реализации без снятия с поддержки

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

  1. Использование расширения конфигурации: создадим расширение, подключим в него модуль УправлениеПечатьюПереопределяемый и перехватим процедуру ПриОпределенииОбъектовСКомандамиПечати с аннотацией &После, добавив вызов СписокОбъектов.Добавить(Документы.ПриемИПередачаВРемонт). Формы документа также можно адаптировать через расширение. Это сохранит конфигурацию типовой при последующих обновлениях.
  2. Регистрация как команды заполнения объекта: если изменения метаданных невозможны, обработку можно зарегистрировать с видом ЗаполнениеОбъекта. В таком случае команда появится в меню «Еще» или «Заполнить», а внутри процедуры обработки вместо перезаписи реквизитов можно программно сформировать табличный документ и вывести его на экран через стандартный метод УправлениеПечатьюКлиент.ПечатьДокументов(...).
← На главную