СформироватьИнформациюОбОтчетеПоПолномуИмени (БСП)

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

Сформировать информацию об отчете по полному имени. Формирует ссылку и тип отчета по полному имени.

// Формирует ссылку и тип отчета по полному имени.
//
// Параметры:
//   ОтчетПолноеИмя - Строка - Полное имя отчета в формате
//       "Отчет.<ИмяОтчета>" или "ВнешнийОтчет.<ИмяОтчета>".
//
// Возвращаемое значение: 
//   Результат - Структура -
//       * Отчет
//       * ТипОтчета
//       * ОтчетИмя
//       * ОтчетМетаданные
//       * ТекстОшибки - Строка, Неопределено - Текст ошибки.
//
Функция СформироватьИнформациюОбОтчетеПоПолномуИмени(ОтчетПолноеИмя) Экспорт
	Результат = Новый Структура("Отчет, ТипОтчета, ОтчетПолноеИмя, ОтчетИмя, ОтчетМетаданные, ТекстОшибки");
	Результат.Отчет          = ОтчетПолноеИмя;
	Результат.ОтчетПолноеИмя = ОтчетПолноеИмя;
	
	ПозицияТочки = СтрНайти(ОтчетПолноеИмя, ".");
	Если ПозицияТочки = 0 Тогда
		Префикс = "";
		Результат.ОтчетИмя = ОтчетПолноеИмя;
	Иначе
		Префикс = Лев(ОтчетПолноеИмя, ПозицияТочки - 1);
		Результат.ОтчетИмя = Сред(ОтчетПолноеИмя, ПозицияТочки + 1);
	КонецЕсли;
	
	Если ВРег(Префикс) = "ОТЧЕТ" Тогда
		Результат.ОтчетМетаданные = Метаданные.Отчеты.Найти(Результат.ОтчетИмя);
		Если Результат.ОтчетМетаданные = Неопределено Тогда
			Результат.ОтчетПолноеИмя = "ВнешнийОтчет." + Результат.ОтчетИмя;
			ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Предупреждение,
				СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
					НСтр("ru = 'Отчет ""%1"" не найден в программе, он будет значиться как внешний.'"),
					ОтчетПолноеИмя));
		ИначеЕсли Не ПравоДоступа("Просмотр", Результат.ОтчетМетаданные) Тогда
			Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Недостаточно прав доступа к отчету ""%1"".'"),
				ОтчетПолноеИмя);
		КонецЕсли;
	ИначеЕсли ВРег(Префикс) = "ВНЕШНИЙОТЧЕТ" Тогда
		// Получение метаданных и проверок не требуется.
	Иначе
		Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'Для отчета ""%1"" невозможно определить тип (не установлен префикс).'"),
			ОтчетПолноеИмя);
		Возврат Результат;
	КонецЕсли;
	
	Если Результат.ОтчетМетаданные = Неопределено Тогда
		
		Результат.Отчет = Результат.ОтчетПолноеИмя;
		Результат.ТипОтчета = Перечисления.ТипыОтчетов.Внешний;
		
		// Заменить тип и ссылку внешнего отчета для дополнительных отчетов, подключенных к хранилищу подсистемы.
		Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда
			
			Результат.Вставить("ПоУмолчаниюВсеПодключеныКХранилищу", ПоУмолчаниюВсеПодключеныКХранилищу());
			МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки");
			МодульДополнительныеОтчетыИОбработки.ПриОпределенииТипаИСсылкиЕслиОтчетДополнительный(Результат);
			Результат.Удалить("ПоУмолчаниюВсеПодключеныКХранилищу");
			
			Если ТипЗнч(Результат.Отчет) <> Тип("Строка") Тогда
				Результат.ТипОтчета = Перечисления.ТипыОтчетов.Дополнительный;
			КонецЕсли;
			
		КонецЕсли;
		
	Иначе
		
		Результат.Отчет = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Результат.ОтчетМетаданные);
		Результат.ТипОтчета = ТипОтчета(Результат.Отчет);
		
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

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

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

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

ОбъектПоПолномуИмени (БСП)

ОтчетОбъект (БСП)

ФайлНеНайденПоПолномуИмени (БСП)

МенеджерОбъектаПоПолномуИмени (БСП)

СформироватьОтчет (БСП)

СформироватьСловарьПолныхПутейКФормам (БСП)

ИмпортФайловСформироватьОтчет (БСП)

ЭтоПолноеИмяПерерасчета (БСП)

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