Как открыть форму ввода параметров во внешней печатной форме (ВПФ) на управляемых формах

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

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

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

Способ 1. Использование стандартного типа команды «ОткрытиеФормы»

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

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

Посмотрим на пример заполнения регистрационной структуры:


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

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

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

Важные требования к структуре внешней обработки:

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

Разберем, как получить выбранные документы в коде формы. В модуле созданной формы в событии ПриСозданииНаСервере извлекаем переданный массив:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    Если Параметры.Свойство("ОбъектыНазначения") Тогда
        МассивОбъектов = Параметры.ОбъектыНазначения;
    Иначе
        МассивОбъектов = Новый Массив;
    КонецЕсли;

КонецПроцедуры

Обратите внимание: всегда проверяйте наличие свойства ОбъектыНазначения через метод Параметры.Свойство(). При интерактивном открытии обработки разработчиком через пункт меню «Файл — Открыть» этот параметр передан не будет.

Способ 2. Вызов клиентского метода и программное открытие формы

Проанализируем альтернативный вариант, когда команда регистрируется с типом "ВызовКлиентскогоМетода". Данный подход полезен, если перед открытием формы требуется выполнить предварительные клиентские проверки или открыть нестандартную (дополнительную) форму обработки.

В функции СведенияОВнешнейОбработке() команда регистрируется следующим образом:


НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Печать с параметрами (клиент)";
НоваяКоманда.Идентификатор = "ПечатьКлиентскийМетод";
НоваяКоманда.Использование = "ВызовКлиентскогоМетода";
НоваяКоманда.ПоказыватьОповещение = Ложь;
НоваяКоманда.Модификатор = "ПечатьMXL";

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

Посмотрим на пример вызова формы через описание оповещения:


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

    ПараметрыОткрытия = Новый Структура;
    ПараметрыОткрытия.Вставить("ОбъектыНазначения", ОбъектыНазначения);
    
    Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияФормыПараметров", ЭтотОбъект);
    
    ОткрытьФорму("ВнешняяОбработка.ИмяОбработки.Форма.ФормаПараметров", 
        ПараметрыОткрытия, 
        ЭтотОбъект, 
        , 
        , 
        , 
        Оповещение);

КонецПроцедуры

&НаКлиенте
Процедура ПослеЗакрытияФормыПараметров(Результат, ДополнительныеПараметры) Экспорт

    Если Результат <> Неопределено Тогда
        // Обработка полученных параметров и вывод печатной формы
    КонецЕсли;

КонецПроцедуры

Формирование печатной формы после ввода данных

После того как пользователь заполнил нужные поля в открывшейся форме и нажал кнопку подтверждения (например, «Сформировать» или «ОК»), выполняем вывод табличного документа:

  1. Автономный вывод: на сервере формируем ТабличныйДокумент с учетом параметров и печатаемых объектов, после чего вызываем метод ТабличныйДокумент.Показать("Печатная форма") на клиенте либо выводим результат в поле табличного документа на самой форме.
  2. Стандартный вывод БСП: сформированный табличный документ передается в стандартную процедуру УправлениеПечатьюКлиент.ПечатьДокументов() или УправлениеПечатьюКлиент.ПечатьТабличныхДокументов(), что обеспечивает сохранение функционала отправки по почте, экспорта в PDF/Excel и встроенного предварительного просмотра.
← На главную