Сформировать информацию об отчете по полному имени. Формирует ссылку и тип отчета по полному имени.
// Формирует ссылку и тип отчета по полному имени.
//
// Параметры:
// ОтчетПолноеИмя - Строка - Полное имя отчета в формате
// "Отчет.<ИмяОтчета>" или "ВнешнийОтчет.<ИмяОтчета>".
//
// Возвращаемое значение:
// Результат - Структура -
// * Отчет
// * ТипОтчета
// * ОтчетИмя
// * ОтчетМетаданные
// * ТекстОшибки - Строка, Неопределено - Текст ошибки.
//
Функция СформироватьИнформациюОбОтчетеПоПолномуИмени(ОтчетПолноеИмя) Экспорт
Результат = Новый Структура("Отчет, ТипОтчета, ОтчетПолноеИмя, ОтчетИмя, ОтчетМетаданные, ТекстОшибки");
Результат.Отчет = ОтчетПолноеИмя;
Результат.ОтчетПолноеИмя = ОтчетПолноеИмя;
ПозицияТочки = СтрНайти(ОтчетПолноеИмя, ".");
Если ПозицияТочки = 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
///////////////////////////////////////////////////////////////////////////////////////////////////////
ФайлНеНайденПоПолномуИмени (БСП)
МенеджерОбъектаПоПолномуИмени (БСП)