ДоступностьОтчетов (БСП)

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

Доступность отчетов. Детализирует доступность отчетов по правам и функциональным опциям.

// Детализирует доступность отчетов по правам и функциональным опциям.
Функция ДоступностьОтчетов(СсылкиОтчетов) Экспорт

	Результат = Новый ТаблицаЗначений;
	Результат.Колонки.Добавить("Ссылка");
	Результат.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
	Результат.Колонки.Добавить("Отчет", Метаданные.Справочники.ВариантыОтчетов.Реквизиты.Отчет.Тип);
	Результат.Колонки.Добавить("ТипОтчетаСтрокой", Новый ОписаниеТипов("Строка"));
	Результат.Колонки.Добавить("Доступен", Новый ОписаниеТипов("Булево"));
	
	СсылкиВариантов = Новый Массив;
	СсылкиОтчетовКонфигурации = Новый Массив;
	СсылкиОтчетовРасширений = Новый Массив;
	СсылкиДопОтчетов = Новый Массив;
	
	Дубли = Новый Соответствие;
	
	УстановитьПривилегированныйРежим(Истина);
	Для Каждого Ссылка Из СсылкиОтчетов Цикл
		Если Дубли[Ссылка] <> Неопределено Тогда
			Продолжить;
		КонецЕсли;
		Дубли[Ссылка] = Истина;
		
		СтрокаТаблицы = Результат.Добавить();
		СтрокаТаблицы.Ссылка = Ссылка;
		СтрокаТаблицы.Представление = Строка(Ссылка);
		Тип = ТипЗнч(Ссылка);
		Если Тип = Тип("СправочникСсылка.ВариантыОтчетов") Тогда
			СсылкиВариантов.Добавить(Ссылка);
		Иначе
			СтрокаТаблицы.Отчет = Ссылка;
			СтрокаТаблицы.ТипОтчетаСтрокой = ВариантыОтчетовКлиентСервер.ТипОтчетаСтрокой(Тип, СтрокаТаблицы.Отчет);
			Если СтрокаТаблицы.ТипОтчетаСтрокой = "Внутренний" Тогда
				СсылкиОтчетовКонфигурации.Добавить(СтрокаТаблицы.Отчет);
			ИначеЕсли СтрокаТаблицы.ТипОтчетаСтрокой = "Расширение" Тогда
				СсылкиОтчетовРасширений.Добавить(СтрокаТаблицы.Отчет);
			ИначеЕсли СтрокаТаблицы.ТипОтчетаСтрокой = "Дополнительный" Тогда
				СсылкиДопОтчетов.Добавить(СтрокаТаблицы.Отчет);
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	УстановитьПривилегированныйРежим(Ложь);
	
	Если СсылкиВариантов.Количество() > 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
///////////////////////////////////////////////////////////////////////////////////////////////////////

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

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

ПриОпределенииДоступностиОтчетов (БСП)

ДоступныеОтчеты (БСП)

ПриДобавленииДополнительныхОтчетовДоступныхТекущемуПользователю (БСП)

ПриДобавленииДополнительныхОтчетовДоступныхУказанномуПользователю (БСП)

ОтчетыТекущегоПользователя (БСП)

РазделыДополнительныхОтчетов (БСП)

ОпределитьРазделыСДополнительнымиОтчетами (БСП)

ОткрытьФормуКомандДополнительныхОтчетовИОбработок (БСП)

НовыйЗапросПоДоступнымКомандам (БСП)

Синтакс-помощник БСП с нейросетевым ассистентом