МакетПечатнойФормы (БСП)

Автор: 1С
ОбщийМодуль.УправлениеПечатью
БСП

Макет печатной формы. Возвращает макет печатной формы по полному пути к макету.

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

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ОбластьМакета (БСП)

ПолучитьМакетOOWriter (БСП)

МакетИзДвоичныхДанных (БСП)

ЗакрытьСоединение (БСП)

ПрисоединитьОбласть (БСП)

Печать своей печатной формы (без использования команды)

ЗадатьДействиеПриВыбореМакетаПечатнойФормы (БСП)

Галка "Подпись и печать" в свою внешнюю печатную форму

ЗарегистрироватьНовоеИмяМакета (БСП)

Обновлятор-1С: групповое (пакетное) обновление и обслуживание всех баз за один раз