Как правильно настроить функцию СведенияОВнешнейОбработке для внешней печатной формы в 1С?

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

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

Анализ проблемы: почему открывается пустая печатная форма

При переводе старого кода регистрации внешней обработки на современные методы подсистемы «Дополнительные отчеты и обработки» разработчики часто допускают ошибку при указании типа команды. Рассмотрим фрагмент кода, приводящий к некорректному поведению:


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

Выясним причину ошибки: для команды указано использование метода ТипКомандыОткрытиеФормы(). При таком значении подсистема БСП пытается открыть собственную форму внешней обработки, не запуская серверную процедуру формирования табличного документа Печать. Если у внешней обработки нет собственной управляемой формы, открывается пустое окно.

Типы команд в подсистеме дополнительных отчетов и обработок

Для правильной настройки поведения команды необходимо понимать назначение каждого типа, доступного в общем модуле ДополнительныеОтчетыИОбработкиКлиентСервер:

  1. ОткрытиеФормы (ТипКомандыОткрытиеФормы()) — предназначен для интерактивного открытия основной формы внешней обработки. Применяется для сервисных обработок и отчетов с собственным интерфейсом.
  2. ВызовКлиентскогоМетода (ТипКомандыВызовКлиентскогоМетода()) — вызывает экспортную процедуру в модуле формы обработки на клиенте. Используется, когда перед формированием печатного документа требуется диалог с пользователем (например, ввод дополнительных параметров, выбор подписанта).
  3. ВызовСерверногоМетода (ТипКомандыВызовСерверногоМетода()) — передает управление в серверный модуль объекта обработки, вызывая экспортную процедуру печати, и выводит результат в стандартную форму предварительного просмотра. Это основной и правильный вариант для классических печатных форм.
  4. ЗаполнениеФормы (ТипКомандыЗаполнениеФормы()) — применяется для обработок заполнения объекта, изменяющих реквизиты открытой формы документа или справочника.

Корректная реализация функции регистрации внешней печатной формы

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


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

Обязательные требования к процедуре формирования печати

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


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

Обратим внимание на ключевые правила взаимодействия с коллекцией печати:

  1. Значение, передаваемое вторым параметром в функцию УправлениеПечатью.НужноПечататьМакет(), должно в точности совпадать со значением свойства Идентификатор команды из СведенияОВнешнейОбработке().
  2. Добавление готового табличного документа в результат выполняется исключительно через метод УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(), что обеспечивает стандартное поведение подсистемы предварительного просмотра.
  3. При установке флага БезопасныйРежим = Истина платформа блокирует работу с внешними компонентами, привилегированным режимом и прямым доступом к файловой системе на сервере. Если печатная форма использует вспомогательные общие модули конфигурации без внешнего доступа, установим значение свойства БезопасныйРежим в Ложь.

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

← На главную