При разработке внешних печатных форм (ВПФ) для конфигураций на базе Библиотеки стандартных подсистем (БСП) часто возникает задача запросить у пользователя дополнительные данные перед формированием печатного документа. Например, требуется выбрать подписанта, указать дату доверенности или задать опции вывода строк. Для этого перед началом формирования табличного документа необходимо открыть форму обработки.
Разберем подробно, как правильно настроить внешнюю печатную форму, зарегистрировать команду открытия формы и получить ссылки на выбранные пользователем документы.
Рассмотрим основной и самый простой способ, заложенный в механизмы БСП. Для того чтобы подсистема печати при нажатии кнопки в документе или списке сразу открывала форму обработки, достаточно правильно настроить регистрационную таблицу команд в модуле объекта ВПФ.
В экспортной функции СведенияОВнешнейОбработке() в модуле объекта внешней обработки необходимо добавить команду со специальным типом использования.
Посмотрим на пример заполнения регистрационной структуры:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
ПараметрыРегистрации.Версия = "1.0";
ПараметрыРегистрации.Назначение.Добавить("Документ.РеализацияТоваровУслуг");
// Добавление команды с типом "ОткрытиеФормы"
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Печать с выбором параметров";
НоваяКоманда.Идентификатор = "ПечатьСПараметрами";
НоваяКоманда.Использование = "ОткрытиеФормы"; // Или ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы()
НоваяКоманда.ПоказыватьОповещение = Истина;
НоваяКоманда.Модификатор = "ПечатьMXL";
Возврат ПараметрыРегистрации;
КонецФункции
Важные требования к структуре внешней обработки:
ОбъектыНазначения.Разберем, как получить выбранные документы в коде формы. В модуле созданной формы в событии ПриСозданииНаСервере извлекаем переданный массив:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("ОбъектыНазначения") Тогда
МассивОбъектов = Параметры.ОбъектыНазначения;
Иначе
МассивОбъектов = Новый Массив;
КонецЕсли;
КонецПроцедуры
Обратите внимание: всегда проверяйте наличие свойства ОбъектыНазначения через метод Параметры.Свойство(). При интерактивном открытии обработки разработчиком через пункт меню «Файл — Открыть» этот параметр передан не будет.
Проанализируем альтернативный вариант, когда команда регистрируется с типом "ВызовКлиентскогоМетода". Данный подход полезен, если перед открытием формы требуется выполнить предварительные клиентские проверки или открыть нестандартную (дополнительную) форму обработки.
В функции СведенияОВнешнейОбработке() команда регистрируется следующим образом:
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Печать с параметрами (клиент)";
НоваяКоманда.Идентификатор = "ПечатьКлиентскийМетод";
НоваяКоманда.Использование = "ВызовКлиентскогоМетода";
НоваяКоманда.ПоказыватьОповещение = Ложь;
НоваяКоманда.Модификатор = "ПечатьMXL";
В этом случае в модуле формы или в модуле обработки реализуется клиентская процедура печати. Поскольку в современных конфигурациях режим использования модальности отключен (использование ОткрытьФормуМодально() вызывает ошибку), форма вызывается асинхронно с обработчиком оповещения.
Посмотрим на пример вызова формы через описание оповещения:
&НаКлиенте
Процедура Печать(ИдентификаторКоманды, ОбъектыНазначения) Экспорт
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("ОбъектыНазначения", ОбъектыНазначения);
Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияФормыПараметров", ЭтотОбъект);
ОткрытьФорму("ВнешняяОбработка.ИмяОбработки.Форма.ФормаПараметров",
ПараметрыОткрытия,
ЭтотОбъект,
,
,
,
Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗакрытияФормыПараметров(Результат, ДополнительныеПараметры) Экспорт
Если Результат <> Неопределено Тогда
// Обработка полученных параметров и вывод печатной формы
КонецЕсли;
КонецПроцедуры
После того как пользователь заполнил нужные поля в открывшейся форме и нажал кнопку подтверждения (например, «Сформировать» или «ОК»), выполняем вывод табличного документа:
ТабличныйДокумент с учетом параметров и печатаемых объектов, после чего вызываем метод ТабличныйДокумент.Показать("Печатная форма") на клиенте либо выводим результат в поле табличного документа на самой форме.УправлениеПечатьюКлиент.ПечатьДокументов() или УправлениеПечатьюКлиент.ПечатьТабличныхДокументов(), что обеспечивает сохранение функционала отправки по почте, экспорта в PDF/Excel и встроенного предварительного просмотра.