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

Дата: 26.10.2025 16:00:25
БСП
Внешняя
печатная
форма
Печать
Печатная
форма
Комментарий:
0
Конфигурация:
Любая
Формы:
Управляемые
Код:
                        #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

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

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

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

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

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

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

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

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

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

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

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

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

Станьте частью сообщества!
Войдите или зарегистрируйтесь, и вы сможете участвовать в обсуждениях.


1c-only | Фриланс © 2025