Шаблон внешней печатной формы на БСП с назначением

Коллеги, много видел тут шаблонов, но мне ни один не подошел. Пришлось писать свой, которым я решил поделиться. Версию БСП можете указывать свою, на версиях ниже не тестировалось. Отличительная особенность в возможности печати по-комплектно. Комментарии в коде писать не стал, и так всё интуитивно понятно.

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс  

Функция СведенияОВнешнейОбработке() Экспорт
    
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("3.1.9.144"); 
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
    ПараметрыРегистрации.Версия = "1.1.1.1"; 
    
    ПараметрыРегистрации.Назначение.Добавить("Документ.СчетНаОплатуПокупателю"); 

    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = НСтр("ru = 'Договор (внешняя печатная форма)'");
    НоваяКоманда.Идентификатор = "ДоговорСПокупателем";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    НоваяКоманда.Модификатор = "ПечатьMXL";
    Возврат ПараметрыРегистрации;
    
КонецФункции 

#КонецОбласти

#Область СлужебныйПрограммныйИнтерфейс 

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

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

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

	Возврат ТабличныйДокумент; 
	
КонецФункции

#КонецОбласти   

#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли
0

См. также

Шаблон внешней печатной формы

Шаблон внешней печатной формы

ПриПолученииСпискаВнешнихПечатныхФорм (БСП)

ПриПолученииВнешнейПечатнойФормы (БСП)

СписокПечатныхФормИзВнешнихИсточников (БСП)

ПечатьПоВнешнемуИсточнику (БСП)

ПередВыполнениемКомандыПечатиВнешнейПечатнойФормы (БСП)

ПриПолученииКомандПечати (БСП)

Модератору