Передача параметров во внешнюю печатную форму (управляемое приложение)

Опубликовал Андрей Лео (Leo_A) в раздел Программирование - Инструментарий

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

Первое с чего необходимо начать - для запускаемой команды указать вариант запуска внешней обработки "ОткрытиеФормы".
Все, это практически половина дела, теперь добавляем саму форму, в форме должно быть обязательно 3 реквизита и 3 параметра (параметры не обязательно):
ДополнительнаяОбработкаСсылка
ИдентификаторКоманды
ОбъектыНазначения

Данные реквизиты необходимо инициализировать в процедуре: "ПриСозданииНаСервере"
Примерно так:
ДополнительнаяОбработкаСсылка = Параметры.ДополнительнаяОбработкаСсылка;
ИдентификаторКоманды = Параметры.ИдентификаторКоманды;
ОбъектыНазначения.ЗагрузитьЗначения(Параметры.ОбъектыНазначения);
Выносить эти реквизиты на форму не обязательно и даже не желательно, чтобы пользователи их не попортили, они условно "Системные".
А вот на форму необходимо добавить и вынести все остальные необходимые вам реквизиты (параметры печати).
Добавляем на форму команду печать с следующим обработчиком:
ДополнительныеПараметрыПечати = Новый Структура;
ДополнительныеПараметрыПечати.Вставить("Получил",Получил);
	
ОбъектыНазначенияПараметр = Новый Структура;
ОбъектыНазначенияПараметр.Вставить("ОбъектыНазначения",ОбъектыНазначения.ВыгрузитьЗначения());
ОбъектыНазначенияПараметр.Вставить("ДополнительныеПараметрыПечати",ДополнительныеПараметрыПечати);

	
ПараметрыИсточника = Новый Структура;
ПараметрыИсточника.Вставить("ИдентификаторКоманды", ИдентификаторКоманды);
ПараметрыИсточника.Вставить("ОбъектыНазначения", ОбъектыНазначенияПараметр);
ПараметрыИсточника.Вставить("БезопасныйРежим", Ложь);

ПараметрыОткрытия = Новый Структура("ИсточникДанных,ПараметрыИсточника");
ПараметрыОткрытия.ИсточникДанных = ДополнительнаяОбработкаСсылка;
ПараметрыОткрытия.ПараметрыИсточника = ПараметрыИсточника;

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

		МассивОбъектов = МассивОбъектовНазначения.ОбъектыНазначения;
		ДополнительныеПараметрыПечати = МассивОбъектовНазначения.ДополнительныеПараметрыПечати;

Вот и вся хитрость.
Для примера во вложении разместил форму "Приходная накладная" для "УТ 11" с указанием ответственного принявшего товар.





Скачать файлы

Наименование Файл Версия Размер
Приходная накладная
.epf 18,48Kb
25.08.14
39
.epf 18,48Kb 39 Скачать

См. также

Комментарии
1. Призрак (davdykin) 16 25.08.14 14:11 Сейчас в теме
Если это твоя 2-ая печатная форма на УФ, пока не нашел статью, это был не "Вот и вся хитрость." а маленький пушной зверек.. гигантских размеров.
2. mikhailovaew (mikhailovaew) 128 28.08.14 11:50 Сейчас в теме
кажется, у Поручка на эту тему весьма развернутая статья.