Макет печатной формы. Возвращает макет печатной формы по полному пути к макету.
// Возвращает макет печатной формы по полному пути к макету.
//
// Параметры:
// ПутьКМакету - Строка - полный путь к макету в формате:
// "Документ.<ИмяДокумента>.<ИмяМакета>"
// "Обработка.<ИмяОбработки>.<ИмяМакета>"
// "ОбщийМакет.<ИмяМакета>".
// Возвращаемое значение:
// ТабличныйДокумент - для макета типа 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
///////////////////////////////////////////////////////////////////////////////////////////////////////
Печать своей печатной формы (без использования команды)
ЗадатьДействиеПриВыбореМакетаПечатнойФормы (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)