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