Коллеги, много видел тут шаблонов, но мне ни один не подошел. Пришлось писать свой, которым я решил поделиться. Версию БСП можете указывать свою, на версиях ниже не тестировалось. Отличительная особенность в возможности печати по-комплектно. Комментарии в коде писать не стал, и так всё интуитивно понятно.
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("3.1.9.144");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
ПараметрыРегистрации.Версия = "1.1.1.1";
ПараметрыРегистрации.Назначение.Добавить("Документ.СчетНаОплатуПокупателю");
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = НСтр("ru = 'Договор (внешняя печатная форма)'");
НоваяКоманда.Идентификатор = "ДоговорСПокупателем";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
НоваяКоманда.Модификатор = "ПечатьMXL";
Возврат ПараметрыРегистрации;
КонецФункции
#КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "ДоговорСПокупателем");
Если ПечатнаяФорма <> Неопределено Тогда
ПечатнаяФорма.ТабличныйДокумент = СформироватьДоговорСПокупателем(МассивОбъектов, ОбъектыПечати);
ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Договор (внешняя печатная форма)'");
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция СформироватьДоговорСПокупателем(МассивОбъектов, ОбъектыПечати)
УстановитьПривилегированныйРежим(Истина);
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.АвтоМасштаб = Истина;
ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
ТабличныйДокумент.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ДоговорСПокупателем";
Макет = ПолучитьМакет("ПФ_MXL_ДоговорСПокупателем");
Запрос = Новый Запрос();
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
Запрос.Текст = ТекстЗапросаДляПечати();
Результат = Запрос.ВыполнитьПакет();
Шапка = Результат[0].Выбрать();
ПервыйДокумент = Истина;
Пока Шапка.Следующий() Цикл
Если НЕ ПервыйДокумент Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ПервыйДокумент = Ложь;
// Запомним номер строки, с которой начали выводить текущий документ.
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
СтруктураПараметров = ПараметрыОбластей(Шапка);
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.Заполнить(СтруктураПараметров);
ТабличныйДокумент.Вывести(ОбластьШапка);
ВывестиСтрокиДокумента(ТабличныйДокумент, Макет, Шапка.Ссылка, Результат[1].Выбрать());
ОбластьШапка = Макет.ПолучитьОбласть("Подвал");
ОбластьШапка.Параметры.Заполнить(СтруктураПараметров);
ТабличныйДокумент.Вывести(ОбластьШапка);
// В табличном документе зададим имя области, в которую был
// выведен объект. Нужно для возможности печати по-комплектно
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент,
НомерСтрокиНачало, ОбъектыПечати, Шапка.Ссылка);
КонецЦикла;
Возврат ТабличныйДокумент;
КонецФункции
#КонецОбласти
#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли
ПриПолученииСпискаВнешнихПечатныхФорм (БСП)
ПриПолученииВнешнейПечатнойФормы (БСП)
СписокПечатныхФормИзВнешнихИсточников (БСП)
ПечатьПоВнешнемуИсточнику (БСП)