Добрый день!
Столкнулся с таким вопросом - у меня есть внешняя обработка по загрузке сотрудников из Excel-файла. (кстати, пользовался новым методом 8.3.6, который стал доступен с 8.3.6.1977 - ТабличныйДокумент.Прочитать, за что спасибо публикации //infostart.ru/public/341855/) и весь код был в основном расположен в модуле управляемой формы. А мне нужно было из нее вывести табличный документ с ошибками загрузки на печать, причем метод ТабличныйДокумент.Показать мне не подходил, так как в нем не было никаких кнопок (печать, сохранить, отправить), которые добавляют удобства работы.
Во-первых, что делать с макетом? В обычных формах было все просто: Макет = ПолучитьМакет(«ИмяМакета»), в управляемом интерфейсе такого не получится. Подобная конструкция в модуле управляемой формы неизменно вызывает ошибку, в каком бы контексте она не использовалась. Поэтому мне пришлось добавить к обработке реквизит, с типом произвольный и в модуле объекта обработки, после всех стандартных процедур типа СведенияОВнешнейОбработке() добавить строчку:
//выполняется до открытия формы
РеквизитМакет = ЭтотОбъект.ПолучитьМакет("Макет");
Далее в модуле формы уже обращался к нему стандартно:
//возвращает табличный документ с ошибками
функция ПечатьОшибокСервер(резПроверки) экспорт
ТД=Новый ТабличныйДокумент;
макет = Объект.РеквизитМакет;
областьМ = макет.ПолучитьОбласть("Область");
областьМ.Параметры.текстошибки = СокрЛП(резПроверки);
тд.Вывести(областьМ);
конецфункции
А вот затем встал вопрос, как же красиво вывести получившийся ТабличныйДокумент на печать. Стандартные функции для внешних обработок типа УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "Макет", "Макет", ТабДок); не подходят, но после изучения методом тыка была найдена подходящая в модуле УправлениеПечатьюКлиент (этот модуль есть в ЗУП 3.0, на котором я проверял обработку):
&НаКлиенте
Процедура печатьОшибок(Команда)
резПроверки = ПроверкаНаСервере();
ТабДокОшибок = ПечатьОшибокСервер("ошибки");
//массив
коллекция = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм("Макет");
//структура в массиве
структураКоллекции = коллекция .получить(0);
структураКоллекции .ТабличныйДокумент =ТабДокОшибок ;
УправлениеПечатьюКлиент.ПечатьДокументов(коллекция,,ЭтаФорма);
//не подходит - ТабДокОшибок.показать("Ошибки");
КонецПроцедуры
Весь секрет оказался в том, что в полученную коллекцию надо добавить наш табличный документ в строке структураКоллекции .ТабличныйДокумент =ТабДокОшибок ; и после этого у пользователя появляется красивая печатная форма: