Доступность отчетов. Детализирует доступность отчетов по правам и функциональным опциям.
// Детализирует доступность отчетов по правам и функциональным опциям.
Функция ДоступностьОтчетов(СсылкиОтчетов) Экспорт
Результат = Новый ТаблицаЗначений;
Результат.Колонки.Добавить("Ссылка");
Результат.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Результат.Колонки.Добавить("Отчет", Метаданные.Справочники.ВариантыОтчетов.Реквизиты.Отчет.Тип);
Результат.Колонки.Добавить("ТипОтчетаСтрокой", Новый ОписаниеТипов("Строка"));
Результат.Колонки.Добавить("Доступен", Новый ОписаниеТипов("Булево"));
СсылкиВариантов = Новый Массив;
СсылкиОтчетовКонфигурации = Новый Массив;
СсылкиОтчетовРасширений = Новый Массив;
СсылкиДопОтчетов = Новый Массив;
Дубли = Новый Соответствие;
УстановитьПривилегированныйРежим(Истина);
Для Каждого Ссылка Из СсылкиОтчетов Цикл
Если Дубли[Ссылка] <> Неопределено Тогда
Продолжить;
КонецЕсли;
Дубли[Ссылка] = Истина;
СтрокаТаблицы = Результат.Добавить();
СтрокаТаблицы.Ссылка = Ссылка;
СтрокаТаблицы.Представление = Строка(Ссылка);
Тип = ТипЗнч(Ссылка);
Если Тип = Тип("СправочникСсылка.ВариантыОтчетов") Тогда
СсылкиВариантов.Добавить(Ссылка);
Иначе
СтрокаТаблицы.Отчет = Ссылка;
СтрокаТаблицы.ТипОтчетаСтрокой = ВариантыОтчетовКлиентСервер.ТипОтчетаСтрокой(Тип, СтрокаТаблицы.Отчет);
Если СтрокаТаблицы.ТипОтчетаСтрокой = "Внутренний" Тогда
СсылкиОтчетовКонфигурации.Добавить(СтрокаТаблицы.Отчет);
ИначеЕсли СтрокаТаблицы.ТипОтчетаСтрокой = "Расширение" Тогда
СсылкиОтчетовРасширений.Добавить(СтрокаТаблицы.Отчет);
ИначеЕсли СтрокаТаблицы.ТипОтчетаСтрокой = "Дополнительный" Тогда
СсылкиДопОтчетов.Добавить(СтрокаТаблицы.Отчет);
КонецЕсли;
КонецЕсли;
КонецЦикла;
УстановитьПривилегированныйРежим(Ложь);
Если СсылкиВариантов.Количество() > 0 Тогда
ЗначенияОтчетов = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(СсылкиВариантов, "Отчет", Истина);
Для Каждого Ссылка Из СсылкиВариантов Цикл
СтрокаТаблицы = Результат.Найти(Ссылка, "Ссылка");
ОтчетЗначение = ЗначенияОтчетов[Ссылка];
Если ОтчетЗначение = Неопределено Тогда
СтрокаТаблицы.Представление = НСтр("ru = '<Недостаточно прав для работы с вариантом отчета>'");
Иначе
СтрокаТаблицы.Отчет = ОтчетЗначение;
СтрокаТаблицы.ТипОтчетаСтрокой = ВариантыОтчетовКлиентСервер.ТипОтчетаСтрокой(Неопределено, СтрокаТаблицы.Отчет);
Если СтрокаТаблицы.ТипОтчетаСтрокой = "Внутренний" Тогда
СсылкиОтчетовКонфигурации.Добавить(СтрокаТаблицы.Отчет);
ИначеЕсли СтрокаТаблицы.ТипОтчетаСтрокой = "Расширение" Тогда
СсылкиОтчетовРасширений.Добавить(СтрокаТаблицы.Отчет);
ИначеЕсли СтрокаТаблицы.ТипОтчетаСтрокой = "Дополнительный" Тогда
СсылкиДопОтчетов.Добавить(СтрокаТаблицы.Отчет);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
СсылкиОтчетовКонфигурации = ОбщегоНазначенияКлиентСервер.СвернутьМассив(СсылкиОтчетовКонфигурации);
СсылкиОтчетовРасширений = ОбщегоНазначенияКлиентСервер.СвернутьМассив(СсылкиОтчетовРасширений);
СсылкиДопОтчетов = ОбщегоНазначенияКлиентСервер.СвернутьМассив(СсылкиДопОтчетов);
Если СсылкиОтчетовКонфигурации.Количество() > 0 Тогда
ПриОпределенииДоступностиОтчетов(СсылкиОтчетовКонфигурации, Результат);
КонецЕсли;
Если СсылкиОтчетовРасширений.Количество() > 0 Тогда
ПриОпределенииДоступностиОтчетов(СсылкиОтчетовРасширений, Результат);
КонецЕсли;
Если СсылкиДопОтчетов.Количество() > 0 Тогда
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда
МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки");
МодульДополнительныеОтчетыИОбработки.ПриОпределенииДоступностиОтчетов(СсылкиДопОтчетов, Результат);
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
ПриОпределенииДоступностиОтчетов (БСП)
ПриДобавленииДополнительныхОтчетовДоступныхТекущемуПользователю (БСП)
ПриДобавленииДополнительныхОтчетовДоступныхУказанномуПользователю (БСП)
ОтчетыТекущегоПользователя (БСП)
РазделыДополнительныхОтчетов (БСП)
ОпределитьРазделыСДополнительнымиОтчетами (БСП)