#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
#Область ДляВызоваИзДругихПодсистем
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
Настройки.ОтключитьСтандартноеКонтекстноеМеню = Истина;
Если КлючВарианта = "ПраваПользователяНаТаблицу" Тогда
Настройки.РазрешеноИзменятьСтруктуру = Ложь;
КонецЕсли;
Настройки.ФормироватьСразу = Истина;
Настройки.События.ПередЗагрузкойНастроекВКомпоновщик = Истина;
Настройки.События.ПриСозданииНаСервере = Истина;
Настройки.События.ПриОпределенииИспользуемыхТаблиц = Истина;
КонецПроцедуры
Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт
Если ЗначениеЗаполнено(Форма.НастройкиОтчета.ВариантСсылка) Тогда
Форма.НастройкиОтчета.Наименование = Форма.НастройкиОтчета.ВариантСсылка;
КонецЕсли;
Если Форма.КонтекстВарианта = Метаданные.Справочники.Пользователи.ПолноеИмя()
И Форма.Параметры.КлючВарианта <> "ПраваПользователейВРазрезеРазрешенногоЗначения"
И Форма.Параметры.Свойство("ПараметрКоманды") Тогда
Если Форма.Параметры.ПараметрКоманды.Количество() > 1 Тогда
Форма.КлючТекущегоВарианта = "ПраваПользователейНаТаблицы";
Форма.Параметры.КлючВарианта = "ПраваПользователейНаТаблицы";
Иначе
Форма.КлючТекущегоВарианта = "ПраваПользователяНаТаблицы";
Форма.Параметры.КлючВарианта = "ПраваПользователяНаТаблицы";
КонецЕсли;
Форма.ВариантыКонтекста.Очистить();
Форма.ВариантыКонтекста.Добавить(Форма.КлючТекущегоВарианта);
КонецЕсли;
Если ЗначениеЗаполнено(Форма.КонтекстВарианта) Тогда
Форма.ФормаПараметры.НачальныйКлючВарианта = Форма.КлючТекущегоВарианта;
Форма.ФормаПараметры.Отбор.Вставить("НачальныйОтбор");
КонецЕсли;
Если УправлениеДоступомСлужебный.УпрощенныйИнтерфейсНастройкиПравДоступа() Тогда
Форма.НастройкиОтчета.СхемаМодифицирована = Истина;
Схема = ПолучитьИзВременногоХранилища(Форма.НастройкиОтчета.АдресСхемы);
Поле = Схема.НаборыДанных.ПраваПользователей.Поля.Найти("ГруппаДоступа");
Поле.Заголовок = НСтр("ru = 'Профиль пользователя'");
Поле.ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.ПрофилиГруппДоступа");
Форма.НастройкиОтчета.АдресСхемы = ПоместитьВоВременноеХранилище(Схема, Форма.УникальныйИдентификатор);
КонецЕсли;
КонецПроцедуры
Процедура ПередЗагрузкойНастроекВКомпоновщик(Контекст, КлючСхемы, КлючВарианта, НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД) Экспорт
Вариант = ?(НовыеНастройкиКД = Неопределено, "",
НовыеНастройкиКД.ДополнительныеСвойства.КлючПредопределенногоВарианта);
Если Вариант = "АнализПравДоступа" Тогда
НастроитьВариантАнализПравДоступа(НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД);
ИначеЕсли Вариант = "ПраваПользователейНаОбъект" Тогда
НастроитьВариантПраваПользователейНаОбъект(НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД);
ИначеЕсли Вариант = "ПраваПользователейВРазрезеРазрешенногоЗначения" Тогда
НастроитьВариантПраваПользователейВРазрезеРазрешенногоЗначения(НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД);
КонецЕсли;
Если НовыеНастройкиКД <> Неопределено Тогда
СкрытьЛишниеПоляДанных(Вариант, НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД);
УстановитьДоступныеЗначенияПоляВидДоступа(Вариант, НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД);
КонецЕсли;
Если КлючСхемы <> "1" Тогда
КлючСхемы = "1";
Если ТипЗнч(Контекст) = Тип("ФормаКлиентскогоПриложения") И НовыеНастройкиКД <> Неопределено Тогда
РеквизитыФормы = Новый Структура("КонтекстВарианта");
ЗаполнитьЗначенияСвойств(РеквизитыФормы, Контекст);
Если ЗначениеЗаполнено(РеквизитыФормы.КонтекстВарианта) Тогда
НастроитьПараметрыКонтекстногоОткрытия(Контекст,
Вариант, НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда
СхемаКомпоновкиДанных.Параметры.Пользователь.ОграничениеИспользования = Истина;
СхемаКомпоновкиДанных.Параметры.ВидПользователей.ОграничениеИспользования = Истина;
КонецЕсли;
Если Не Константы.ИспользоватьВнешнихПользователей.Получить() Тогда
СхемаКомпоновкиДанных.Параметры.ВидПользователей.ОграничениеИспользования = Истина;
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда
МодульОтчетыСервер = ОбщегоНазначения.ОбщийМодуль("ОтчетыСервер");
МодульОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, СхемаКомпоновкиДанных, КлючСхемы);
КонецЕсли;
КонецПроцедуры
Процедура ПриОпределенииИспользуемыхТаблиц(КлючВарианта, ИспользуемыеТаблицы) Экспорт
ИспользуемыеТаблицы.Добавить(Метаданные.РегистрыСведений.ПраваРолей.ПолноеИмя());
ИспользуемыеТаблицы.Добавить(Метаданные.Справочники.ПрофилиГруппДоступа.ПолноеИмя());
ИспользуемыеТаблицы.Добавить(Метаданные.Справочники.ГруппыДоступа.ПолноеИмя());
ИспользуемыеТаблицы.Добавить(Метаданные.РегистрыСведений.СоставыГруппПользователей.ПолноеИмя());
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область ОбработчикиСобытий
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда
ТекстОшибки = НСтр("ru = 'Для использования отчета требуется внедрить подсистему Варианты отчетов.'");
ВызватьИсключение ТекстОшибки;
КонецЕсли;
Если ВариантПравНаОбъект() И Не УправлениеДоступом.ПроизводительныйВариант() Тогда
ТекстОшибки = НСтр("ru = 'Вариант отчета ""Права пользователей на объект"" поддерживается только в производительном варианте ограничений доступа на уровне записей (RLS).'");
ВызватьИсключение ТекстОшибки;
КонецЕсли;
НастройкиКомпоновщика = КомпоновщикНастроек.ПолучитьНастройки();
ПараметрВидПользователей = НастройкиКомпоновщика.ПараметрыДанных.Элементы.Найти("ВидПользователей");
ПараметрПользователь = НастройкиКомпоновщика.ПараметрыДанных.Элементы.Найти("Пользователь");
Если ПараметрПользователь.Использование
И Не ЗначениеЗаполнено(ПараметрПользователь.Значение) Тогда
ПараметрПользователь.Использование = Ложь;
КонецЕсли;
Если ПараметрПользователь.Использование Тогда
ПараметрВидПользователей.Использование = Ложь;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
НастройкиПрав = НастройкиПравПоОбъектам();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновщика, ДанныеРасшифровки);
ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("ПраваПользователей", ПраваПользователей());
ВнешниеНаборыДанных.Вставить("НастройкиПравПоОбъектам", НастройкиПрав.НастройкиПравПоОбъектам);
ВнешниеНаборыДанных.Вставить("НастройкиПравИерархия", НастройкиПрав.НастройкиПравИерархия);
ВнешниеНаборыДанных.Вставить("НастройкиПравЛегенда", НастройкиПрав.НастройкиПравЛегенда);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
ЗавершитьВывод(ДокументРезультат, ДанныеРасшифровки, НастройкиПрав);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура ЗавершитьВывод(ДокументРезультат, ДанныеРасшифровки, НастройкиПрав)
ГруппаДоступаЗаголовок = НСтр("ru = 'Группа доступа'");
Если УправлениеДоступомСлужебный.УпрощенныйИнтерфейсНастройкиПравДоступа() Тогда
ГруппаДоступаЗаголовок = НСтр("ru = 'Профиль пользователя'");
КонецЕсли;
ТекстЕстьОграничение = ?(ВариантПравНаОбъект(), "", НСтр("ru = 'Есть ограничение'"));
ТекстПравоНеНазначено = НСтр("ru = '●'");
ТекстПравоРазрешено = НСтр("ru = '✔'");
ТекстПравоЗапрещено = НСтр("ru = '✘'");
ШрифтПравоНеНазначено = Неопределено;
ШрифтПравоРазрешено = Неопределено;
ШрифтПравоЗапрещено = Неопределено;
ЦветПравоНеНазначено = Метаданные.ЭлементыСтиля.НеназначенноеПравоДоступаЦвет.Значение;
ЦветПравоРазрешено = Метаданные.ЭлементыСтиля.РазрешенноеПравоДоступаЦвет.Значение;
ЦветПравоЗапрещено = Метаданные.ЭлементыСтиля.ЗапрещенноеПравоДоступаЦвет.Значение;
ЦветПравоВычисленное = Метаданные.ЭлементыСтиля.ВычисленноеПравоДоступаЦвет.Значение;
РасшифровкиСтрок = Новый Соответствие;
РасшифровкиКолонок = Новый Соответствие;
НастроенноеПравоДляПодпапок = ОписаниеКолонкиДляПодпапок().Заголовок;
НетЛинии = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии);
ТипИдентификаторРасшифровкиКомпоновкиДанных = Тип("ИдентификаторРасшифровкиКомпоновкиДанных");
ВысотаТаблицы = ДокументРезультат.ВысотаТаблицы;
ШиринаТаблицы = ДокументРезультат.ШиринаТаблицы;
Для НомерСтроки = 1 По ВысотаТаблицы Цикл
Для НомерКолонки = 1 По ШиринаТаблицы Цикл
Область = ДокументРезультат.Область(НомерСтроки, НомерКолонки);
Расшифровка = Область.Расшифровка;
Если ТипЗнч(Расшифровка) <> ТипИдентификаторРасшифровкиКомпоновкиДанных Тогда
ТекстОбласти = Область.Текст;
Если ТекстОбласти = "*" Тогда
Область.Текст = "";
Область.Примечание.Текст = ТекстЕстьОграничение;
ИначеЕсли ТекстОбласти = "&ГруппаДоступаЗаголовок" Тогда
Область.Текст = ГруппаДоступаЗаголовок;
ИначеЕсли ТекстОбласти = "&ВладелецНастроекЗаголовок" Тогда
Область.Текст = НастройкиПрав.ВладелецНастроекЗаголовок;
КонецЕсли;
Продолжить;
КонецЕсли;
ЗначенияПолей = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля();
Если ЗначенияПолей.Найти("Право") <> Неопределено
И ЗначенияПолей.Найти("Право").Значение > 0
И ЗначенияПолей.Найти("ПравоБезОграничения") <> Неопределено
И ЗначенияПолей.Найти("Право").Значение
> ЗначенияПолей.Найти("ПравоБезОграничения").Значение
Или ЗначенияПолей.Найти("ПравоПросмотр") <> Неопределено
И ЗначенияПолей.Найти("ПравоПросмотр").Значение = Истина
И ЗначенияПолей.Найти("ПравоЧтениеБезОграничения").Значение = Ложь
Или ЗначенияПолей.Найти("ПравоРедактирование") <> Неопределено
И ЗначенияПолей.Найти("ПравоРедактирование").Значение = Истина
И ЗначенияПолей.Найти("ПравоИзменениеБезОграничения").Значение = Ложь
Или ЗначенияПолей.Найти("ПравоИнтерактивноеДобавление") <> Неопределено
И ЗначенияПолей.Найти("ПравоИнтерактивноеДобавление").Значение = Истина
И ЗначенияПолей.Найти("ПравоДобавлениеБезОграничения").Значение = Ложь Тогда
Область.Примечание.Текст = ТекстЕстьОграничение;
ИначеЕсли ЗначенияПолей.Найти("ЗначениеПрава") <> Неопределено Тогда
ЗначениеПрава = ЗначенияПолей.Найти("ЗначениеПрава").Значение;
Если ЗначениеПрава = Null Тогда
ЗначениеПрава = 0;
ЭтоВладелецНастроек = РасшифровкиСтрок.Получить(НомерСтроки).Найти("ЭтоВладелецНастроек").Значение;
НастроенноеПраво = РасшифровкиКолонок.Получить(НомерКолонки).Найти("НастроенноеПраво").Значение;
Иначе
ЭтоВладелецНастроек = ЗначенияПолей.Найти("ЭтоВладелецНастроек").Значение;
Если ЗначениеПрава = 0 Тогда
НастроенноеПраво = ЗначенияПолей.Найти("НастроенноеПраво").Значение;
КонецЕсли;
КонецЕсли;
Если ЗначениеПрава = 0 Тогда
Если ЭтоВладелецНастроек И НастроенноеПраво <> НастроенноеПравоДляПодпапок Тогда
ЗначениеПрава = 2;
ИначеЕсли НастроенноеПраво <> НастроенноеПравоДляПодпапок Тогда
Область.Текст = ТекстПравоНеНазначено;
Область.Шрифт = ШрифтПравоНеНазначено;
Область.ЦветТекста = ЦветПравоНеНазначено;
КонецЕсли;
КонецЕсли;
Если ЗначениеПрава = 1 Тогда
Область.Текст = ТекстПравоРазрешено;
Область.Шрифт = ШрифтПравоРазрешено;
Область.ЦветТекста = ?(ЭтоВладелецНастроек, ЦветПравоВычисленное, ЦветПравоРазрешено);
ИначеЕсли ЗначениеПрава = 2 Тогда
Область.Текст = ТекстПравоЗапрещено;
Область.Шрифт = ШрифтПравоЗапрещено;
Область.ЦветТекста = ?(ЭтоВладелецНастроек, ЦветПравоВычисленное, ЦветПравоЗапрещено);
КонецЕсли;
ИначеЕсли ЗначенияПолей.Найти("ВладелецИлиПользовательНастроек") <> Неопределено Тогда
РасшифровкиСтрок.Вставить(НомерСтроки, ЗначенияПолей);
Если ШрифтПравоНеНазначено = Неопределено Тогда
ШрифтПравоНеНазначено = Область.Шрифт;
ШрифтПравоРазрешено = Новый Шрифт(ШрифтПравоНеНазначено,,, Истина,,,, 120);
ШрифтПравоЗапрещено = ШрифтПравоРазрешено;
КонецЕсли;
Отступ = (ЗначенияПолей.Найти("Уровень").Значение - 1) * 2;
ОбластьСтроки = ДокументРезультат.Область(НомерСтроки, , НомерСтроки);
ОбластьСтроки.СоздатьФорматСтрок();
ОбластьСправа = ДокументРезультат.Область(НомерСтроки, НомерКолонки);
ОбластьСлева = ДокументРезультат.Область(НомерСтроки, НомерКолонки - 1);
ОбластьСправа.ГраницаСлева = НетЛинии;
ОбластьСлева.ГраницаСправа = НетЛинии;
ОбластьСправа.ШиринаКолонки = Область.ШиринаКолонки + ОбластьСлева.ШиринаКолонки - Отступ;
ОбластьСлева.ШиринаКолонки = Отступ;
ИначеЕсли ЗначенияПолей.Найти("НастроенноеПраво") <> Неопределено Тогда
РасшифровкиКолонок.Вставить(НомерКолонки, ЗначенияПолей);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Процедура СкрытьЛишниеПоляДанных(Вариант, НастройкиКД, ПользовательскиеНастройкиКД)
ПраваПользователей = Новый Массив;
Если Вариант = "ПраваПользователейНаОбъект" Тогда
ПраваПользователей.Добавить("ЭлементДанных");
Иначе
ПраваПользователей.Добавить("ОбъектМетаданных");
КонецЕсли;
ПраваПользователей.Добавить("Пользователь");
ПраваПользователей.Добавить("ВходВПрограммуРазрешен");
ПраваПользователей.Добавить("Право");
ПраваПользователей.Добавить("ПравоБезОграничения");
ПраваПользователей.Добавить("ПравоИнтерактивное");
Если Вариант = "АнализПравДоступа"
И ЗначениеПараметраИзНастройки(ПользовательскиеНастройкиКД, "ВыводитьГруппировку") = 1
Или Вариант = "ПраваПользователейНаТаблицыОтчета"
Или Вариант = "ПраваПользователяНаТаблицыОтчета"
Или Вариант = "ПраваПользователяНаТаблицыОтчетов" Тогда
ПраваПользователей.Добавить("Отчет");
ПраваПользователей.Добавить("ПравоОтчета");
КонецЕсли;
Если Вариант = "ПраваПользователейНаТаблицу"
Или Вариант = "ПраваПользователяНаТаблицу"
Или Вариант = "ПраваПользователейНаОбъект" Тогда
ПраваПользователей.Добавить("ПравоЧтение");
ПраваПользователей.Добавить("ПравоИзменение");
Если Вариант <> "ПраваПользователейНаОбъект" Тогда
ПраваПользователей.Добавить("ПравоДобавление");
КонецЕсли;
ПраваПользователей.Добавить("ПравоЧтениеБезОграничения");
ПраваПользователей.Добавить("ПравоИзменениеБезОграничения");
Если Вариант <> "ПраваПользователейНаОбъект" Тогда
ПраваПользователей.Добавить("ПравоДобавлениеБезОграничения");
КонецЕсли;
ПраваПользователей.Добавить("ПравоПросмотр");
ПраваПользователей.Добавить("ПравоРедактирование");
Если Вариант <> "ПраваПользователейНаОбъект" Тогда
ПраваПользователей.Добавить("ПравоИнтерактивноеДобавление");
КонецЕсли;
КонецЕсли;
Если Вариант = "ПраваПользователяНаТаблицу" Тогда
ПраваПользователей.Добавить("ВидДоступаПраво");
ПраваПользователей.Добавить("ВидДоступаПравоБезОграничения");
ПраваПользователей.Добавить("ВидДоступаПравоИнтерактивное");
ПраваПользователей.Добавить("ВидДоступаПравоЧтение");
ПраваПользователей.Добавить("ВидДоступаПравоИзменение");
ПраваПользователей.Добавить("ВидДоступаПравоДобавление");
ПраваПользователей.Добавить("ВидДоступаПравоЧтениеБезОграничения");
ПраваПользователей.Добавить("ВидДоступаПравоИзменениеБезОграничения");
ПраваПользователей.Добавить("ВидДоступаПравоДобавлениеБезОграничения");
ПраваПользователей.Добавить("ВидДоступаПравоПросмотр");
ПраваПользователей.Добавить("ВидДоступаПравоРедактирование");
ПраваПользователей.Добавить("ВидДоступаПравоИнтерактивноеДобавление");
КонецЕсли;
Если Вариант = "ПраваПользователяНаТаблицы"
Или Вариант = "ПраваПользователяНаТаблицу"
Или Вариант = "ПраваПользователяНаТаблицыОтчета"
Или Вариант = "ПраваПользователяНаТаблицыОтчетов"
Или Вариант = "ПраваПользователейВРазрезеРазрешенногоЗначения" Тогда
ПраваПользователей.Добавить("ГруппаДоступа");
КонецЕсли;
Если Вариант = "ПраваПользователяНаТаблицу"
Или Вариант = "ПраваПользователейВРазрезеРазрешенногоЗначения" Тогда
ПраваПользователей.Добавить("ВидДоступа");
Если Вариант = "ПраваПользователяНаТаблицу" Тогда
ПраваПользователей.Добавить("ВсеРазрешены");
КонецЕсли;
ПраваПользователей.Добавить("ЗначениеДоступа");
КонецЕсли;
ИсходнаяСхема = ПолучитьМакет("Макет");
ТекущаяСхема = СхемаКомпоновкиДанных;
СкрытьПоляДанныхКромеУказанных("ПраваПользователей", ПраваПользователей, ИсходнаяСхема, ТекущаяСхема);
НастройкиПрав = Новый Массив;
Если Вариант = "ПраваПользователяНаТаблицу" Тогда
Если НастройкиПравПоТаблицеВОтборе(НастройкиКД, ПользовательскиеНастройкиКД) <> Неопределено Тогда
НастройкиПрав = "*";
КонецЕсли;
Группировки = Новый Соответствие;
Группировки.Вставить("НастройкиПрав", НастройкиПрав = "*");
Группировки.Вставить("ЛегендаНастроекПрав", НастройкиПрав = "*");
Группировки.Вставить("ДополнительныйЗаголовокТаблицы", НастройкиПрав = "*");
УстановитьИспользованиеГруппировок(Группировки, НастройкиКД, ПользовательскиеНастройкиКД);
КонецЕсли;
СкрытьПоляДанныхКромеУказанных("НастройкиПравПоОбъектам", НастройкиПрав, ИсходнаяСхема, ТекущаяСхема);
СкрытьПоляДанныхКромеУказанных("НастройкиПравЛегенда", НастройкиПрав, ИсходнаяСхема, ТекущаяСхема);
СкрытьПоляДанныхКромеУказанных("НастройкиПравИерархия", НастройкиПрав, ИсходнаяСхема, ТекущаяСхема);
КонецПроцедуры
Процедура СкрытьПоляДанныхКромеУказанных(ИмяНабораДанных, ПутиКДанным, ИсходнаяСхема, ТекущаяСхема)
Отчеты.АнализПравДоступа.СкрытьПоляДанныхКромеУказанных(ИмяНабораДанных,
ПутиКДанным, ИсходнаяСхема, ТекущаяСхема);
КонецПроцедуры
Процедура УстановитьДоступныеЗначенияПоляВидДоступа(Вариант, НастройкиКД, ПользовательскиеНастройкиКД)
ПолеДанных = СхемаКомпоновкиДанных.НаборыДанных.ПраваПользователей.Поля.Найти("ВидДоступа");
ЗначенияПоля = Новый СписокЗначений;
Если Вариант = "ПраваПользователяНаТаблицу" Тогда
ПредставлениеВидовДоступа = УправлениеДоступомСлужебный.ПредставлениеВидовДоступа();
Для Каждого КлючИЗначение Из ПредставлениеВидовДоступа Цикл
ЗначенияПоля.Добавить(КлючИЗначение.Ключ, КлючИЗначение.Значение);
КонецЦикла;
Иначе
ЗначенияПоля.Добавить(Неопределено);
КонецЕсли;
ПолеДанных.УстановитьДоступныеЗначения(ЗначенияПоля);
КонецПроцедуры
Процедура НастроитьВариантАнализПравДоступа(НастройкиКД, ПользовательскиеНастройкиКД)
ПараметрВыводить = СхемаКомпоновкиДанных.Параметры.ВыводитьГруппировку;
ПараметрВыводить.ОграничениеИспользования = Ложь;
Значения = Новый СписокЗначений;
Значения.Добавить(0, НСтр("ru = 'Таблицы'"));
Значения.Добавить(1, НСтр("ru = 'Отчеты с таблицами'"));
ПараметрВыводить.УстановитьДоступныеЗначения(Значения);
ПараметрВыводить.Значение = 0;
Значение = ЗначениеПараметраИзНастройки(ПользовательскиеНастройкиКД, ПараметрВыводить.Имя);
Если Значение <> Неопределено Тогда
Группировки = Новый Соответствие;
Группировки.Вставить("ГруппировкаПоТаблицам", Значение = 0);
Группировки.Вставить("ГруппировкаПоТаблицамОтчетов", Значение = 1);
УстановитьИспользованиеГруппировок(Группировки, НастройкиКД, ПользовательскиеНастройкиКД);
КонецЕсли;
КонецПроцедуры
Процедура НастроитьВариантПраваПользователейНаОбъект(НастройкиКД, ПользовательскиеНастройкиКД)
ПолеДанных = СхемаКомпоновкиДанных.НаборыДанных.ПраваПользователей.Поля.Найти("Право");
ЗначенияПоля = Новый СписокЗначений;
ЗначенияПоля.Добавить(1, НСтр("ru = 'Чтение'"));
ЗначенияПоля.Добавить(2, НСтр("ru = 'Изменение'"));
ПолеДанных.УстановитьДоступныеЗначения(ЗначенияПоля);
ПолеДанных = СхемаКомпоновкиДанных.НаборыДанных.ПраваПользователей.Поля.Найти("ПравоИнтерактивное");
ЗначенияПоля = Новый СписокЗначений;
ЗначенияПоля.Добавить(1, НСтр("ru = 'Просмотр'"));
ЗначенияПоля.Добавить(2, НСтр("ru = 'Редактирование'"));
ПолеДанных.УстановитьДоступныеЗначения(ЗначенияПоля);
Параметр = СхемаКомпоновкиДанных.Параметры.ЭлементДанных;
Параметр.ОграничениеИспользования = Ложь;
Параметр.Использование = ИспользованиеПараметраКомпоновкиДанных.Всегда;
Параметр.ТипЗначения = УправлениеДоступомСлужебныйПовтИсп.ТипыЭлементовДанных();
СхемаКомпоновкиДанных.Параметры.Удалить(Параметр);
СхемаКомпоновкиДанных.Параметры.Вставить(0);
ЗаполнитьЗначенияСвойств(СхемаКомпоновкиДанных.Параметры[0], Параметр);
КонецПроцедуры
Процедура НастроитьВариантПраваПользователейВРазрезеРазрешенногоЗначения(НастройкиКД, ПользовательскиеНастройкиКД)
Параметр = СхемаКомпоновкиДанных.Параметры.ЗначениеДоступа;
Параметр.ОграничениеИспользования = Ложь;
Параметр.Использование = ИспользованиеПараметраКомпоновкиДанных.Всегда;
Параметр.ТипЗначения = Отчеты.АнализПравДоступа.ОписаниеТиповГруппИЗначенийВидовДоступа();
СхемаКомпоновкиДанных.Параметры.Удалить(Параметр);
СхемаКомпоновкиДанных.Параметры.Вставить(1);
ЗаполнитьЗначенияСвойств(СхемаКомпоновкиДанных.Параметры[1], Параметр);
ПараметрВыводить = СхемаКомпоновкиДанных.Параметры.ВыводитьГруппировку;
ПараметрВыводить.ОграничениеИспользования = Ложь;
УпрощенныйИнтерфейс = УправлениеДоступомСлужебный.УпрощенныйИнтерфейсНастройкиПравДоступа();
Значения = Новый СписокЗначений;
Значения.Добавить(0, НСтр("ru = 'Таблицы с правами пользователей'"));
Значения.Добавить(1, НСтр("ru = 'Пользователей'"));
Значения.Добавить(2, ?(УпрощенныйИнтерфейс,
НСтр("ru = 'Пользователей с профилями'"), НСтр("ru = 'Пользователей с группами доступа'")));
Значения.Добавить(3, ?(УпрощенныйИнтерфейс,
НСтр("ru = 'Профили с пользователями'"), НСтр("ru = 'Группы доступа с пользователями'")));
Значения.Добавить(4, ?(УпрощенныйИнтерфейс,
НСтр("ru = 'Профили групп доступа'"), НСтр("ru = 'Группы доступа'")));
Значения.Добавить(5, ?(УпрощенныйИнтерфейс,
НСтр("ru = 'Таблицы с правами профилей'"), НСтр("ru = 'Таблицы с правами групп доступа'")));
ПараметрВыводить.УстановитьДоступныеЗначения(Значения);
ПараметрВыводить.Значение = 0;
Значение = ЗначениеПараметраИзНастройки(ПользовательскиеНастройкиКД, ПараметрВыводить.Имя);
Если Значение <> Неопределено Тогда
Группировки = Новый Соответствие;
Группировки.Вставить("ТаблицыСПравамиПользователей", Значение = 0);
Группировки.Вставить("Пользователи", Значение = 1);
Группировки.Вставить("ПользователиСГруппамиДоступа", Значение = 2);
Группировки.Вставить("ГруппыДоступаСПользователями", Значение = 3);
Группировки.Вставить("ГруппыДоступа", Значение = 4);
Группировки.Вставить("ТаблицыСПравамиГруппДоступа", Значение = 5);
Группировки.Вставить("Легенда", Значение = 0 Или Значение = 5);
УстановитьИспользованиеГруппировок(Группировки, НастройкиКД, ПользовательскиеНастройкиКД);
КонецЕсли;
КонецПроцедуры
Процедура НастроитьПараметрыКонтекстногоОткрытия(Контекст, Вариант, НастройкиКД, ПользовательскиеНастройкиКД)
Если Вариант = "ПраваПользователейНаТаблицу"
Или Вариант = "ПраваПользователяНаТаблицу" Тогда
ОбъектМетаданных = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Контекст.КонтекстВарианта, Ложь);
Если ЗначениеЗаполнено(ОбъектМетаданных) Тогда
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(НастройкиКД.Отбор, "ОбъектМетаданных", ОбъектМетаданных,
ВидСравненияКомпоновкиДанных.Равно, , Истина);
КонецЕсли;
ИначеЕсли Вариант = "ПраваПользователейНаТаблицы" Или Вариант = "ПраваПользователяНаТаблицы" Тогда
Если Контекст.Параметры.Свойство("ПараметрКоманды") Тогда
СписокПользователей = Новый СписокЗначений;
СписокПользователей.ЗагрузитьЗначения(Контекст.Параметры.ПараметрКоманды);
ПользователиСлужебный.УстановитьОтборДляПараметра("Пользователь", СписокПользователей,
НастройкиКД, ПользовательскиеНастройкиКД);
КонецЕсли;
ИначеЕсли Вариант = "ПраваПользователейНаОбъект" Тогда
Если Контекст.Параметры.Свойство("ПараметрКоманды") Тогда
ПользователиСлужебный.УстановитьОтборДляПараметра("ЭлементДанных",
Контекст.Параметры.ПараметрКоманды,
НастройкиКД,
ПользовательскиеНастройкиКД);
КонецЕсли;
ИначеЕсли Вариант = "ПраваПользователейВРазрезеРазрешенногоЗначения" Тогда
Если Контекст.Параметры.Свойство("ПараметрКоманды") Тогда
ПользователиСлужебный.УстановитьОтборДляПараметра("ЗначениеДоступа",
Контекст.Параметры.ПараметрКоманды,
НастройкиКД,
ПользовательскиеНастройкиКД);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Функция ТаблицыОтчетов()
Результат = ПустаяКоллекцияТаблицОтчетов();
ОписаниеТиповИдентификатора = ОписаниеТиповИдентификатора();
ВыбранныйОтчет = ВыбранныйОтчет();
ИспользуемыеТаблицы = Неопределено;
Если ЗначениеЗаполнено(ВыбранныйОтчет)
И КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства.Свойство("ИспользуемыеТаблицы", ИспользуемыеТаблицы)
И ИспользуемыеТаблицы <> Неопределено Тогда
ИдентификаторыОбъектовМетаданных =
ОбщегоНазначения.ИдентификаторыОбъектовМетаданных(ИспользуемыеТаблицы, Ложь);
Для Каждого Таблица Из ИспользуемыеТаблицы Цикл
ИдентификаторТаблицы = ИдентификаторыОбъектовМетаданных[Таблица];
СтрокаТаблицы = Результат.Добавить();
СтрокаТаблицы.Отчет = ВыбранныйОтчет;
СтрокаТаблицы.ОбъектМетаданных = ИдентификаторТаблицы;
КонецЦикла;
Если Не ЗначениеЗаполнено(Результат) Тогда
СтрокаТаблицы = Результат.Добавить();
СтрокаТаблицы.Отчет = ВыбранныйОтчет;
СтрокаТаблицы.ОбъектМетаданных = Неопределено;
КонецЕсли;
Возврат Результат;
КонецЕсли;
Если ЗначениеЗаполнено(ВыбранныйОтчет)
И ОписаниеТиповИдентификатора.СодержитТип(ТипЗнч(ВыбранныйОтчет)) Тогда
ОбъектМетаданныхВыбранныйОтчет =
ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(ВыбранныйОтчет, Ложь);
КонецЕсли;
ТаблицыОтчетов = Новый ТаблицаЗначений;
ТаблицыОтчетов.Колонки.Добавить("Отчет");
ТаблицыОтчетов.Колонки.Добавить("ОбъектМетаданных");
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда
МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов");
ВладельцыТаблиц = Новый Соответствие;
Для Каждого ОбъектМетаданныхОтчет Из Метаданные.Отчеты Цикл
Если ТипЗнч(ОбъектМетаданныхВыбранныйОтчет) = Тип("ОбъектМетаданных")
И ОбъектМетаданныхОтчет <> ОбъектМетаданныхВыбранныйОтчет Тогда
Продолжить;
КонецЕсли;
Если Не ПравоДоступа("Просмотр", ОбъектМетаданныхОтчет) Тогда
Продолжить;
КонецЕсли;
ИспользуемыеТаблицы = МодульВариантыОтчетов.ИспользуемыеТаблицыОтчета(ОбъектМетаданныхОтчет);
Для Каждого ИмяТаблицы Из ИспользуемыеТаблицы Цикл
ИспользуемаяТаблица = ВладельцыТаблиц[ИмяТаблицы];
Если ИспользуемаяТаблица = Неопределено Тогда
ВладелецТаблицы = ИмяТаблицы;
ЧастиСтроки = СтрРазделить(ВладелецТаблицы, ".", Истина);
Если ЧастиСтроки.Количество() = 1 Тогда
Продолжить;
КонецЕсли;
Если ЧастиСтроки.Количество() > 2 Тогда
ВладелецТаблицы = ЧастиСтроки[0] + "." + ЧастиСтроки[1];
КонецЕсли;
ВладельцыТаблиц.Вставить(ИмяТаблицы, ВладелецТаблицы);
ИспользуемаяТаблица = ВладелецТаблицы;
КонецЕсли;
СтрокаТаблицы = ТаблицыОтчетов.Добавить();
СтрокаТаблицы.Отчет = ОбъектМетаданныхОтчет.ПолноеИмя();
СтрокаТаблицы.ОбъектМетаданных = ИспользуемаяТаблица;
КонецЦикла;
КонецЦикла;
ТаблицыОтчетов.Свернуть("Отчет, ОбъектМетаданных");
КонецЕсли;
ИменаОбъектовМетаданных = ТаблицыОтчетов.ВыгрузитьКолонку("ОбъектМетаданных");
ОтчетыСТаблицами = Новый Соответствие;
Для Каждого ОбъектМетаданныхОтчет Из Метаданные.Отчеты Цикл
Если ТипЗнч(ОбъектМетаданныхВыбранныйОтчет) = Тип("ОбъектМетаданных")
И ОбъектМетаданныхОтчет <> ОбъектМетаданныхВыбранныйОтчет Тогда
Продолжить;
КонецЕсли;
ПолноеИмяОтчета = ОбъектМетаданныхОтчет.ПолноеИмя();
ОтчетыСТаблицами.Вставить(ПолноеИмяОтчета, Ложь);
ИменаОбъектовМетаданных.Добавить(ПолноеИмяОтчета);
КонецЦикла;
ИдентификаторыОбъектовМетаданных =
ОбщегоНазначения.ИдентификаторыОбъектовМетаданных(ИменаОбъектовМетаданных, Ложь);
Для Каждого СтрокаТаблицы Из ТаблицыОтчетов Цикл
ИдентификаторТаблицы = ИдентификаторыОбъектовМетаданных[СтрокаТаблицы.ОбъектМетаданных];
Если Не ЗначениеЗаполнено(ИдентификаторТаблицы) Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = Результат.Добавить();
НоваяСтрока.Отчет = ИдентификаторыОбъектовМетаданных[СтрокаТаблицы.Отчет];
НоваяСтрока.ОбъектМетаданных = ИдентификаторТаблицы;
ОтчетыСТаблицами.Вставить(СтрокаТаблицы.Отчет, Истина);
КонецЦикла;
Для Каждого КлючИЗначение Из ОтчетыСТаблицами Цикл
Если КлючИЗначение.Значение Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = Результат.Добавить();
НоваяСтрока.Отчет = ИдентификаторыОбъектовМетаданных[КлючИЗначение.Ключ];
НоваяСтрока.ОбъектМетаданных = Неопределено;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ОписаниеТиповИдентификатора()
Возврат Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных,
|СправочникСсылка.ИдентификаторыОбъектовРасширений");
КонецФункции
Функция ПустаяКоллекцияТаблицОтчетов()
ОписаниеТиповИдентификатора = ОписаниеТиповИдентификатора();
Результат = Новый ТаблицаЗначений;
Результат.Колонки.Добавить("Отчет", ОписаниеТиповИдентификатора);
Результат.Колонки.Добавить("ОбъектМетаданных", ОписаниеТиповИдентификатора);
Возврат Результат;
КонецФункции
Функция ПраваРолейНаОтчеты()
Результат = ПустаяКоллекцияПравРолейНаОтчеты();
ОписаниеТиповИдентификатора = ОписаниеТиповИдентификатора();
ВыбранныйОтчет = ВыбранныйОтчет();
Если ЗначениеЗаполнено(ВыбранныйОтчет)
И ОписаниеТиповИдентификатора.СодержитТип(ТипЗнч(ВыбранныйОтчет)) Тогда
ОбъектМетаданныхВыбранныйОтчет =
ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(ВыбранныйОтчет, Ложь);
КонецЕсли;
ИменаОбъектовМетаданных = Новый Массив;
Для Каждого ОбъектМетаданныхРоль Из Метаданные.Роли Цикл
ИменаОбъектовМетаданных.Добавить(ОбъектМетаданныхРоль.ПолноеИмя());
КонецЦикла;
Для Каждого ОбъектМетаданныхОтчет Из Метаданные.Отчеты Цикл
Если ТипЗнч(ОбъектМетаданныхВыбранныйОтчет) = Тип("ОбъектМетаданных")
И ОбъектМетаданныхОтчет <> ОбъектМетаданныхВыбранныйОтчет Тогда
Продолжить;
КонецЕсли;
ИменаОбъектовМетаданных.Добавить(ОбъектМетаданныхОтчет.ПолноеИмя());
КонецЦикла;
ИдентификаторыОбъектовМетаданных =
ОбщегоНазначения.ИдентификаторыОбъектовМетаданных(ИменаОбъектовМетаданных, Ложь);
Для Каждого ОбъектМетаданныхОтчет Из Метаданные.Отчеты Цикл
Если ТипЗнч(ОбъектМетаданныхВыбранныйОтчет) = Тип("ОбъектМетаданных")
И ОбъектМетаданныхОтчет <> ОбъектМетаданныхВыбранныйОтчет Тогда
Продолжить;
КонецЕсли;
Для Каждого ОбъектМетаданныхРоль Из Метаданные.Роли Цикл
Если ПравоДоступа("Просмотр", ОбъектМетаданныхОтчет, ОбъектМетаданныхРоль) Тогда
СтрокаТаблицы = Результат.Добавить();
СтрокаТаблицы.Отчет = ИдентификаторыОбъектовМетаданных[ОбъектМетаданныхОтчет.ПолноеИмя()];
СтрокаТаблицы.Роль = ИдентификаторыОбъектовМетаданных[ОбъектМетаданныхРоль.ПолноеИмя()];
КонецЕсли;
КонецЦикла;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ПустаяКоллекцияПравРолейНаОтчеты()
ОписаниеТиповИдентификатора = ОписаниеТиповИдентификатора();
Результат = Новый ТаблицаЗначений;
Результат.Колонки.Добавить("Отчет", ОписаниеТиповИдентификатора);
Результат.Колонки.Добавить("Роль", ОписаниеТиповИдентификатора);
Возврат Результат;
КонецФункции
Функция ТекстЗапросаОбщий()
Возврат
"ВЫБРАТЬ
| ПраваРолей.ОбъектМетаданных КАК ОбъектМетаданных,
| ПраваРолей.Роль КАК Роль,
| ПраваРолей.ПравоИзменение КАК ПравоИзменение,
| ПраваРолей.ПравоДобавление КАК ПравоДобавление,
| ПраваРолей.ПравоЧтениеБезОграничения КАК ПравоЧтениеБезОграничения,
| ПраваРолей.ПравоИзменениеБезОграничения КАК ПравоИзменениеБезОграничения,
| ПраваРолей.ПравоДобавлениеБезОграничения КАК ПравоДобавлениеБезОграничения,
| ПраваРолей.ПравоПросмотр КАК ПравоПросмотр,
| ПраваРолей.ПравоРедактирование КАК ПравоРедактирование,
| ПраваРолей.ПравоИнтерактивноеДобавление КАК ПравоИнтерактивноеДобавление,
| ПраваРолей.ВидИзмененияСтроки КАК ВидИзмененияСтроки
|ПОМЕСТИТЬ ПраваРолейРасширений
|ИЗ
| &ПраваРолейРасширений КАК ПраваРолей
|ГДЕ
| &ОтборПравПоТаблицам
|;
|
|
|ВЫБРАТЬ
| ПраваРолейРасширений.ОбъектМетаданных КАК ОбъектМетаданных,
| ПраваРолейРасширений.Роль КАК Роль,
| ИСТИНА КАК ПравоЧтение,
| ПраваРолейРасширений.ПравоИзменение КАК ПравоИзменение,
| ПраваРолейРасширений.ПравоДобавление КАК ПравоДобавление,
| ПраваРолейРасширений.ПравоЧтениеБезОграничения КАК ПравоЧтениеБезОграничения,
| ПраваРолейРасширений.ПравоИзменениеБезОграничения КАК ПравоИзменениеБезОграничения,
| ПраваРолейРасширений.ПравоДобавлениеБезОграничения КАК ПравоДобавлениеБезОграничения,
| ПраваРолейРасширений.ПравоПросмотр КАК ПравоПросмотр,
| ПраваРолейРасширений.ПравоРедактирование КАК ПравоРедактирование,
| ПраваРолейРасширений.ПравоИнтерактивноеДобавление КАК ПравоИнтерактивноеДобавление
|ПОМЕСТИТЬ ПраваРолей
|ИЗ
| ПраваРолейРасширений КАК ПраваРолейРасширений
|ГДЕ
| ПраваРолейРасширений.ВидИзмененияСтроки = 1
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПраваРолей.ОбъектМетаданных,
| ПраваРолей.Роль,
| ИСТИНА,
| ПраваРолей.ПравоИзменение,
| ПраваРолей.ПравоДобавление,
| ПраваРолей.ПравоЧтениеБезОграничения,
| ПраваРолей.ПравоИзменениеБезОграничения,
| ПраваРолей.ПравоДобавлениеБезОграничения,
| ПраваРолей.ПравоПросмотр,
| ПраваРолей.ПравоРедактирование,
| ПраваРолей.ПравоИнтерактивноеДобавление
|ИЗ
| РегистрСведений.ПраваРолей КАК ПраваРолей
| ЛЕВОЕ СОЕДИНЕНИЕ ПраваРолейРасширений КАК ПраваРолейРасширений
| ПО ПраваРолей.ОбъектМетаданных = ПраваРолейРасширений.ОбъектМетаданных
| И ПраваРолей.Роль = ПраваРолейРасширений.Роль
|ГДЕ
| ПраваРолейРасширений.ОбъектМетаданных ЕСТЬ NULL
| И &ОтборПравПоТаблицам
|
|ИНДЕКСИРОВАТЬ ПО
| Роль
|;
|
|
|ВЫБРАТЬ
| ПрофилиГруппДоступаРоли.Ссылка КАК Профиль,
| ПраваРолей.ОбъектМетаданных КАК Таблица,
| МАКСИМУМ(ПраваРолей.ПравоЧтение) КАК ПравоЧтение,
| МАКСИМУМ(ПраваРолей.ПравоИзменение) КАК ПравоИзменение,
| МАКСИМУМ(ПраваРолей.ПравоДобавление) КАК ПравоДобавление,
| МАКСИМУМ(ПраваРолей.ПравоЧтениеБезОграничения) КАК ПравоЧтениеБезОграничения,
| МАКСИМУМ(ПраваРолей.ПравоИзменениеБезОграничения) КАК ПравоИзменениеБезОграничения,
| МАКСИМУМ(ПраваРолей.ПравоДобавлениеБезОграничения) КАК ПравоДобавлениеБезОграничения,
| МАКСИМУМ(ПраваРолей.ПравоПросмотр) КАК ПравоПросмотр,
| МАКСИМУМ(ПраваРолей.ПравоРедактирование) КАК ПравоРедактирование,
| МАКСИМУМ(ПраваРолей.ПравоИнтерактивноеДобавление) КАК ПравоИнтерактивноеДобавление
|ПОМЕСТИТЬ ПраваПрофилейНаТаблицы
|ИЗ
| ПраваРолей КАК ПраваРолей
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.Роли КАК ПрофилиГруппДоступаРоли
| ПО ПраваРолей.Роль = ПрофилиГруппДоступаРоли.Роль
| И (НЕ ПрофилиГруппДоступаРоли.Ссылка.ПометкаУдаления)
|
|СГРУППИРОВАТЬ ПО
| ПрофилиГруппДоступаРоли.Ссылка,
| ПраваРолей.ОбъектМетаданных
|
|ИНДЕКСИРОВАТЬ ПО
| Таблица";
КонецФункции
Функция ТекстЗапросаБезГруппировкиПоОтчетам()
Возврат
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПраваПрофилей.Таблица КАК ОбъектМетаданных,
| ВЫБОР
| КОГДА &УпрощенныйИнтерфейсНастройкиПравДоступа
| ТОГДА ГруппыДоступа.Профиль
| ИНАЧЕ ГруппыДоступа.Ссылка
| КОНЕЦ КАК ГруппаДоступа,
| ПраваПрофилей.ПравоЧтение КАК ПравоЧтение,
| ПраваПрофилей.ПравоИзменение КАК ПравоИзменение,
| ПраваПрофилей.ПравоДобавление КАК ПравоДобавление,
| ВЫБОР
| КОГДА ПраваПрофилей.ПравоДобавление
| ТОГДА 3
| КОГДА ПраваПрофилей.ПравоИзменение
| ТОГДА 2
| КОГДА ПраваПрофилей.ПравоЧтение
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК Право,
| ПраваПрофилей.ПравоЧтениеБезОграничения КАК ПравоЧтениеБезОграничения,
| ПраваПрофилей.ПравоИзменениеБезОграничения КАК ПравоИзменениеБезОграничения,
| ПраваПрофилей.ПравоДобавлениеБезОграничения КАК ПравоДобавлениеБезОграничения,
| ВЫБОР
| КОГДА ПраваПрофилей.ПравоДобавлениеБезОграничения
| ТОГДА 3
| КОГДА ПраваПрофилей.ПравоИзменениеБезОграничения
| ТОГДА 2
| КОГДА ПраваПрофилей.ПравоЧтениеБезОграничения
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК ПравоБезОграничения,
| ПраваПрофилей.ПравоПросмотр КАК ПравоПросмотр,
| ПраваПрофилей.ПравоРедактирование КАК ПравоРедактирование,
| ПраваПрофилей.ПравоИнтерактивноеДобавление КАК ПравоИнтерактивноеДобавление,
| ВЫБОР
| КОГДА ПраваПрофилей.ПравоИнтерактивноеДобавление
| ТОГДА 3
| КОГДА ПраваПрофилей.ПравоРедактирование
| ТОГДА 2
| КОГДА ПраваПрофилей.ПравоПросмотр
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК ПравоИнтерактивное,
| СоставыГруппПользователей.Пользователь КАК Пользователь,
| ЕСТЬNULL(СведенияОПользователях.ВходВПрограммуРазрешен, ЛОЖЬ) КАК ВходВПрограммуРазрешен
|ИЗ
| ПраваПрофилейНаТаблицы КАК ПраваПрофилей
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа
| ПО (ГруппыДоступа.Профиль = ПраваПрофилей.Профиль)
| И (НЕ ГруппыДоступа.ПометкаУдаления)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК УчастникиГруппДоступа
| ПО (УчастникиГруппДоступа.Ссылка = ГруппыДоступа.Ссылка)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
| ПО (СоставыГруппПользователей.ГруппаПользователей = УчастникиГруппДоступа.Пользователь)
| И (ЕСТЬNULL(СоставыГруппПользователей.Пользователь.Служебный, ЛОЖЬ) <> ИСТИНА)
| И (&УсловиеОтбораПоПользователям)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОПользователях КАК СведенияОПользователях
| ПО (СведенияОПользователях.Пользователь = СоставыГруппПользователей.Пользователь)";
КонецФункции
Функция ТекстЗапросаПравОбъекта()
Возврат
"ВЫБРАТЬ
| ПраваНаЭлементДанных.ПользовательСПравом КАК Пользователь,
| ПраваНаЭлементДанных.ПравоИзменение КАК ПравоИзменение
|ПОМЕСТИТЬ ПраваНаЭлементДанных
|ИЗ
| &ПраваНаЭлементДанных КАК ПраваНаЭлементДанных
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПраваПрофилей.Таблица КАК ОбъектМетаданных,
| ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.ПустаяСсылка) КАК ГруппаДоступа,
| ПраваПрофилей.ПравоЧтение КАК ПравоЧтение,
| ПраваПрофилей.ПравоИзменение
| И ПраваНаЭлементДанных.ПравоИзменение КАК ПравоИзменение,
| ЛОЖЬ КАК ПравоДобавление,
| ВЫБОР
| КОГДА ПраваПрофилей.ПравоИзменение И ПраваНаЭлементДанных.ПравоИзменение
| ТОГДА 2
| КОГДА ПраваПрофилей.ПравоЧтение
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК Право,
| ПраваПрофилей.ПравоЧтениеБезОграничения КАК ПравоЧтениеБезОграничения,
| ПраваПрофилей.ПравоИзменениеБезОграничения КАК ПравоИзменениеБезОграничения,
| ЛОЖЬ КАК ПравоДобавлениеБезОграничения,
| ВЫБОР
| КОГДА ПраваПрофилей.ПравоИзменениеБезОграничения
| ТОГДА 2
| КОГДА ПраваПрофилей.ПравоЧтениеБезОграничения
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК ПравоБезОграничения,
| ПраваПрофилей.ПравоПросмотр КАК ПравоПросмотр,
| ПраваПрофилей.ПравоРедактирование
| И ПраваНаЭлементДанных.ПравоИзменение КАК ПравоРедактирование,
| ЛОЖЬ КАК ПравоИнтерактивноеДобавление,
| ВЫБОР
| КОГДА ПраваПрофилей.ПравоРедактирование
| И ПраваНаЭлементДанных.ПравоИзменение
| ТОГДА 2
| КОГДА ПраваПрофилей.ПравоПросмотр
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК ПравоИнтерактивное,
| СоставыГруппПользователей.Пользователь КАК Пользователь,
| ЕСТЬNULL(СведенияОПользователях.ВходВПрограммуРазрешен, ЛОЖЬ) КАК ВходВПрограммуРазрешен
|ИЗ
| ПраваПрофилейНаТаблицы КАК ПраваПрофилей
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа
| ПО (ГруппыДоступа.Профиль = ПраваПрофилей.Профиль)
| И (НЕ ГруппыДоступа.ПометкаУдаления)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК УчастникиГруппДоступа
| ПО (УчастникиГруппДоступа.Ссылка = ГруппыДоступа.Ссылка)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
| ПО (СоставыГруппПользователей.ГруппаПользователей = УчастникиГруппДоступа.Пользователь)
| И (ЕСТЬNULL(СоставыГруппПользователей.Пользователь.Служебный, ЛОЖЬ) <> ИСТИНА)
| И (&УсловиеОтбораПоПользователям)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПраваНаЭлементДанных КАК ПраваНаЭлементДанных
| ПО (ПраваНаЭлементДанных.Пользователь = СоставыГруппПользователей.Пользователь)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОПользователях КАК СведенияОПользователях
| ПО (СведенияОПользователях.Пользователь = СоставыГруппПользователей.Пользователь)";
КонецФункции
Функция ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаНачало()
Возврат
"ВЫБРАТЬ
| ГруппыДоступа.Профиль КАК Профиль,
| ГруппыДоступа.Ссылка КАК ГруппаДоступа
|ПОМЕСТИТЬ ГруппыДоступаПользователей
|ИЗ
| Справочник.ГруппыДоступа КАК ГруппыДоступа
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК УчастникиГруппДоступа
| ПО (УчастникиГруппДоступа.Ссылка = ГруппыДоступа.Ссылка)
| И (НЕ ГруппыДоступа.ПометкаУдаления)
| И (ГруппыДоступа.Профиль В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПраваПрофилей.Профиль
| ИЗ
| ПраваПрофилейНаТаблицы КАК ПраваПрофилей))
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
| ПО (СоставыГруппПользователей.ГруппаПользователей = УчастникиГруппДоступа.Пользователь)
| И (ЕСТЬNULL(СоставыГруппПользователей.Пользователь.Служебный, ЛОЖЬ) <> ИСТИНА)
| И (&УсловиеОтбораПоПользователям)";
КонецФункции
Функция ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаВидыОграниченийПоСтарому()
Возврат
"ВЫБРАТЬ
| ВидыОграниченийПрав.Таблица КАК Таблица,
| ВидыОграниченийПрав.Право КАК Право,
| ВидыОграниченийПрав.ВидДоступа КАК ВидДоступа,
| ВидыОграниченийПрав.Представление КАК ВидДоступаПредставление,
| ВидыОграниченийПрав.ЭтоАвторизованныйПользователь КАК ЭтоАвторизованныйПользователь
|ПОМЕСТИТЬ ВидыОграниченийПравИсходные
|ИЗ
| &ВидыОграниченийПрав КАК ВидыОграниченийПрав
|;
|
|
|ВЫБРАТЬ
| ВидыОграниченийПрав.Таблица КАК Таблица,
| ВидыОграниченийПрав.ВидДоступа КАК ВидДоступа,
| ВидыОграниченийПрав.ВидДоступаПредставление КАК ВидДоступаПредставление,
| ВидыОграниченийПрав.ЭтоАвторизованныйПользователь КАК ЭтоАвторизованныйПользователь,
| МАКСИМУМ(ВидыОграниченийПрав.Право = ""Чтение"") КАК ПравоЧтение,
| МАКСИМУМ(ВидыОграниченийПрав.Право = ""Изменение"") КАК ПравоИзменение
|ПОМЕСТИТЬ ВидыОграниченийПравПреобразованные
|ИЗ
| ВидыОграниченийПравИсходные КАК ВидыОграниченийПрав
|
|СГРУППИРОВАТЬ ПО
| ВидыОграниченийПрав.Таблица,
| ВидыОграниченийПрав.ВидДоступа,
| ВидыОграниченийПрав.ВидДоступаПредставление,
| ВидыОграниченийПрав.ЭтоАвторизованныйПользователь
|;
|
|
|ВЫБРАТЬ
| ЛОЖЬ КАК ДляВнешнихПользователей,
| ВидыОграниченийПрав.Таблица КАК Таблица,
| ВидыОграниченийПрав.ВидДоступа КАК ВидДоступа,
| ВидыОграниченийПрав.ВидДоступаПредставление КАК ВидДоступаПредставление,
| ВидыОграниченийПрав.ЭтоАвторизованныйПользователь КАК ЭтоАвторизованныйПользователь,
| ВидыОграниченийПрав.ПравоЧтение КАК ПравоЧтение,
| ВидыОграниченийПрав.ПравоИзменение КАК ПравоИзменение
|ПОМЕСТИТЬ ВидыОграниченийПрав
|ИЗ
| ВидыОграниченийПравПреобразованные КАК ВидыОграниченийПрав
|ГДЕ
| ТИПЗНАЧЕНИЯ(ВидыОграниченийПрав.ВидДоступа) <> ТИП(Справочник.ВнешниеПользователи)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ИСТИНА,
| ВидыОграниченийПрав.Таблица,
| ВидыОграниченийПрав.ВидДоступа,
| ВидыОграниченийПрав.ВидДоступаПредставление,
| ВидыОграниченийПрав.ЭтоАвторизованныйПользователь,
| ВидыОграниченийПрав.ПравоЧтение,
| ВидыОграниченийПрав.ПравоИзменение
|ИЗ
| ВидыОграниченийПравПреобразованные КАК ВидыОграниченийПрав
|ГДЕ
| ТИПЗНАЧЕНИЯ(ВидыОграниченийПрав.ВидДоступа) <> ТИП(Справочник.Пользователи)";
КонецФункции
Функция ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаВидыОграниченийПоНовому()
Возврат
"ВЫБРАТЬ
| ВидыОграниченийПрав.ДляВнешнихПользователей КАК ДляВнешнихПользователей,
| ВидыОграниченийПрав.Таблица КАК Таблица,
| ВидыОграниченийПрав.Право КАК Право,
| ВидыОграниченийПрав.ВидДоступа КАК ВидДоступа,
| ВидыОграниченийПрав.Представление КАК ВидДоступаПредставление,
| ВидыОграниченийПрав.ЭтоАвторизованныйПользователь КАК ЭтоАвторизованныйПользователь
|ПОМЕСТИТЬ ВидыОграниченийПравИсходные
|ИЗ
| &ВидыОграниченийПрав КАК ВидыОграниченийПрав
|;
|
|
|ВЫБРАТЬ
| ВидыОграниченийПрав.ДляВнешнихПользователей КАК ДляВнешнихПользователей,
| ВидыОграниченийПрав.Таблица КАК Таблица,
| ВидыОграниченийПрав.ВидДоступа КАК ВидДоступа,
| ВидыОграниченийПрав.ВидДоступаПредставление КАК ВидДоступаПредставление,
| ВидыОграниченийПрав.ЭтоАвторизованныйПользователь КАК ЭтоАвторизованныйПользователь,
| МАКСИМУМ(ВидыОграниченийПрав.Право = ""Чтение"") КАК ПравоЧтение,
| МАКСИМУМ(ВидыОграниченийПрав.Право = ""Изменение"") КАК ПравоИзменение
|ПОМЕСТИТЬ ВидыОграниченийПрав
|ИЗ
| ВидыОграниченийПравИсходные КАК ВидыОграниченийПрав
|
|СГРУППИРОВАТЬ ПО
| ВидыОграниченийПрав.ДляВнешнихПользователей,
| ВидыОграниченийПрав.Таблица,
| ВидыОграниченийПрав.ВидДоступа,
| ВидыОграниченийПрав.ЭтоАвторизованныйПользователь,
| ВидыОграниченийПрав.ВидДоступаПредставление";
КонецФункции
Функция ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаКонец()
Возврат
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВидыИЗначенияДоступа.ГруппаДоступа КАК ГруппаДоступа,
| ВидыИЗначенияДоступа.ВидДоступа КАК ВидДоступа,
| ВидыИЗначенияДоступа.ВсеРазрешены КАК ВсеРазрешены,
| ВидыИЗначенияДоступа.ЗначениеДоступа КАК ЗначениеДоступа
|ПОМЕСТИТЬ ВидыИЗначенияДоступа
|ИЗ
| (ВЫБРАТЬ
| ГруппыДоступаПользователей.ГруппаДоступа КАК ГруппаДоступа,
| ГруппыДоступаВидыДоступа.ВидДоступа КАК ВидДоступа,
| ГруппыДоступаВидыДоступа.ВсеРазрешены КАК ВсеРазрешены,
| ЕСТЬNULL(ГруппыДоступаЗначенияДоступа.ЗначениеДоступа, НЕОПРЕДЕЛЕНО) КАК ЗначениеДоступа
| ИЗ
| ГруппыДоступаПользователей КАК ГруппыДоступаПользователей
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.ВидыДоступа КАК ГруппыДоступаВидыДоступа
| ПО (ГруппыДоступаВидыДоступа.Ссылка = ГруппыДоступаПользователей.ГруппаДоступа)
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.ЗначенияДоступа КАК ГруппыДоступаЗначенияДоступа
| ПО (ГруппыДоступаЗначенияДоступа.Ссылка = ГруппыДоступаВидыДоступа.Ссылка)
| И (ГруппыДоступаЗначенияДоступа.ВидДоступа = ГруппыДоступаВидыДоступа.ВидДоступа)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ГруппыДоступаПользователей.ГруппаДоступа,
| ПрофилиГруппДоступаВидыДоступа.ВидДоступа,
| ПрофилиГруппДоступаВидыДоступа.ВсеРазрешены,
| ЕСТЬNULL(ПрофилиГруппДоступаЗначенияДоступа.ЗначениеДоступа, НЕОПРЕДЕЛЕНО)
| ИЗ
| ГруппыДоступаПользователей КАК ГруппыДоступаПользователей
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.ВидыДоступа КАК ПрофилиГруппДоступаВидыДоступа
| ПО (ПрофилиГруппДоступаВидыДоступа.Ссылка = ГруппыДоступаПользователей.Профиль)
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.ЗначенияДоступа КАК ПрофилиГруппДоступаЗначенияДоступа
| ПО (ПрофилиГруппДоступаЗначенияДоступа.Ссылка = ПрофилиГруппДоступаВидыДоступа.Ссылка)
| И (ПрофилиГруппДоступаЗначенияДоступа.ВидДоступа = ПрофилиГруппДоступаВидыДоступа.ВидДоступа)
| ГДЕ
| ПрофилиГруппДоступаВидыДоступа.Предустановленный
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ГруппыДоступаПользователей.ГруппаДоступа,
| ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.Неопределено),
| NULL,
| NULL
| ИЗ
| ГруппыДоступаПользователей КАК ГруппыДоступаПользователей) КАК ВидыИЗначенияДоступа
|;
|
|
|ВЫБРАТЬ
| ПустыеСсылкиЗначенийДоступа.ПустаяСсылка КАК ПустаяСсылка,
| ПустыеСсылкиЗначенийДоступа.Представление КАК Представление
|ПОМЕСТИТЬ ПустыеСсылкиЗначенийДоступа
|ИЗ
| &ПустыеСсылкиЗначенийДоступа КАК ПустыеСсылкиЗначенийДоступа
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПраваПрофилей.Таблица КАК ОбъектМетаданных,
| ВЫБОР
| КОГДА &УпрощенныйИнтерфейсНастройкиПравДоступа
| ТОГДА ГруппыДоступа.Профиль
| ИНАЧЕ ГруппыДоступа.Ссылка
| КОНЕЦ КАК ГруппаДоступа,
| ПраваПрофилей.ПравоЧтение КАК ПравоЧтение,
| ПраваПрофилей.ПравоИзменение КАК ПравоИзменение,
| ПраваПрофилей.ПравоДобавление КАК ПравоДобавление,
| ВЫБОР
| КОГДА ПраваПрофилей.ПравоДобавление
| ТОГДА 3
| КОГДА ПраваПрофилей.ПравоИзменение
| ТОГДА 2
| КОГДА ПраваПрофилей.ПравоЧтение
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК Право,
| ПраваПрофилей.ПравоЧтениеБезОграничения КАК ПравоЧтениеБезОграничения,
| ПраваПрофилей.ПравоИзменениеБезОграничения КАК ПравоИзменениеБезОграничения,
| ПраваПрофилей.ПравоДобавлениеБезОграничения КАК ПравоДобавлениеБезОграничения,
| ВЫБОР
| КОГДА ПраваПрофилей.ПравоДобавлениеБезОграничения
| ТОГДА 3
| КОГДА ПраваПрофилей.ПравоИзменениеБезОграничения
| ТОГДА 2
| КОГДА ПраваПрофилей.ПравоЧтениеБезОграничения
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК ПравоБезОграничения,
| ПраваПрофилей.ПравоПросмотр КАК ПравоПросмотр,
| ПраваПрофилей.ПравоРедактирование КАК ПравоРедактирование,
| ПраваПрофилей.ПравоИнтерактивноеДобавление КАК ПравоИнтерактивноеДобавление,
| ВЫБОР
| КОГДА ПраваПрофилей.ПравоИнтерактивноеДобавление
| ТОГДА 3
| КОГДА ПраваПрофилей.ПравоРедактирование
| ТОГДА 2
| КОГДА ПраваПрофилей.ПравоПросмотр
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК ПравоИнтерактивное,
| ПраваПрофилей.ПравоЧтение
| И НЕ ПраваПрофилей.ПравоЧтениеБезОграничения
| И (ЕСТЬNULL(ВидыОграниченийПрав.ПравоЧтение, ЛОЖЬ)
| ИЛИ ЕСТЬNULL(ВидыОграниченийПравБезусловные.ПравоЧтение, ЛОЖЬ)
| ИЛИ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL
| И ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL) КАК ВидДоступаПравоЧтение,
| ПраваПрофилей.ПравоИзменение
| И НЕ ПраваПрофилей.ПравоИзменениеБезОграничения
| И (ЕСТЬNULL(ВидыОграниченийПрав.ПравоИзменение, ЛОЖЬ)
| ИЛИ ЕСТЬNULL(ВидыОграниченийПравБезусловные.ПравоИзменение, ЛОЖЬ)
| ИЛИ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL
| И ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL) КАК ВидДоступаПравоИзменение,
| ПраваПрофилей.ПравоДобавление
| И НЕ ПраваПрофилей.ПравоДобавлениеБезОграничения
| И (ЕСТЬNULL(ВидыОграниченийПрав.ПравоИзменение, ЛОЖЬ)
| ИЛИ ЕСТЬNULL(ВидыОграниченийПравБезусловные.ПравоИзменение, ЛОЖЬ)
| ИЛИ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL
| И ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL) КАК ВидДоступаПравоДобавление,
| ВЫБОР
| КОГДА ПраваПрофилей.ПравоДобавление
| И НЕ ПраваПрофилей.ПравоДобавлениеБезОграничения
| И (ЕСТЬNULL(ВидыОграниченийПрав.ПравоИзменение, ЛОЖЬ)
| ИЛИ ЕСТЬNULL(ВидыОграниченийПравБезусловные.ПравоИзменение, ЛОЖЬ)
| ИЛИ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL
| И ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL)
| ТОГДА 3
| КОГДА ПраваПрофилей.ПравоИзменение
| И НЕ ПраваПрофилей.ПравоИзменениеБезОграничения
| И (ЕСТЬNULL(ВидыОграниченийПрав.ПравоИзменение, ЛОЖЬ)
| ИЛИ ЕСТЬNULL(ВидыОграниченийПравБезусловные.ПравоИзменение, ЛОЖЬ)
| ИЛИ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL
| И ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL)
| ТОГДА 2
| КОГДА ПраваПрофилей.ПравоЧтение
| И НЕ ПраваПрофилей.ПравоЧтениеБезОграничения
| И (ЕСТЬNULL(ВидыОграниченийПрав.ПравоЧтение, ЛОЖЬ)
| ИЛИ ЕСТЬNULL(ВидыОграниченийПравБезусловные.ПравоЧтение, ЛОЖЬ)
| ИЛИ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL
| И ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL)
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК ВидДоступаПраво,
| ЛОЖЬ КАК ВидДоступаПравоЧтениеБезОграничения,
| ЛОЖЬ КАК ВидДоступаПравоИзменениеБезОграничения,
| ЛОЖЬ КАК ВидДоступаПравоДобавлениеБезОграничения,
| 0 КАК ВидДоступаПравоБезОграничения,
| ПраваПрофилей.ПравоПросмотр
| И НЕ ПраваПрофилей.ПравоЧтениеБезОграничения
| И (ЕСТЬNULL(ВидыОграниченийПрав.ПравоЧтение, ЛОЖЬ)
| ИЛИ ЕСТЬNULL(ВидыОграниченийПравБезусловные.ПравоЧтение, ЛОЖЬ)
| ИЛИ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL
| И ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL) КАК ВидДоступаПравоПросмотр,
| ПраваПрофилей.ПравоРедактирование
| И НЕ ПраваПрофилей.ПравоИзменениеБезОграничения
| И (ЕСТЬNULL(ВидыОграниченийПрав.ПравоИзменение, ЛОЖЬ)
| ИЛИ ЕСТЬNULL(ВидыОграниченийПравБезусловные.ПравоИзменение, ЛОЖЬ)
| ИЛИ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL
| И ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL) КАК ВидДоступаПравоРедактирование,
| ПраваПрофилей.ПравоИнтерактивноеДобавление
| И НЕ ПраваПрофилей.ПравоДобавлениеБезОграничения
| И (ЕСТЬNULL(ВидыОграниченийПрав.ПравоИзменение, ЛОЖЬ)
| ИЛИ ЕСТЬNULL(ВидыОграниченийПравБезусловные.ПравоИзменение, ЛОЖЬ)
| ИЛИ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL
| И ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL) КАК ВидДоступаПравоИнтерактивноеДобавление,
| ВЫБОР
| КОГДА ПраваПрофилей.ПравоИнтерактивноеДобавление
| И НЕ ПраваПрофилей.ПравоДобавлениеБезОграничения
| И (ЕСТЬNULL(ВидыОграниченийПрав.ПравоИзменение, ЛОЖЬ)
| ИЛИ ЕСТЬNULL(ВидыОграниченийПравБезусловные.ПравоИзменение, ЛОЖЬ)
| ИЛИ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL
| И ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL)
| ТОГДА 3
| КОГДА ПраваПрофилей.ПравоРедактирование
| И НЕ ПраваПрофилей.ПравоИзменениеБезОграничения
| И (ЕСТЬNULL(ВидыОграниченийПрав.ПравоИзменение, ЛОЖЬ)
| ИЛИ ЕСТЬNULL(ВидыОграниченийПравБезусловные.ПравоИзменение, ЛОЖЬ)
| ИЛИ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL
| И ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL)
| ТОГДА 2
| КОГДА ПраваПрофилей.ПравоПросмотр
| И НЕ ПраваПрофилей.ПравоЧтениеБезОграничения
| И (ЕСТЬNULL(ВидыОграниченийПрав.ПравоЧтение, ЛОЖЬ)
| ИЛИ ЕСТЬNULL(ВидыОграниченийПравБезусловные.ПравоЧтение, ЛОЖЬ)
| ИЛИ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL
| И ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL)
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК ВидДоступаПравоИнтерактивное,
| ВЫБОР
| КОГДА НЕ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL
| ТОГДА ВидыОграниченийПрав.ВидДоступа
| КОГДА НЕ ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL
| ТОГДА ВидыОграниченийПравБезусловные.ВидДоступа
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ КАК ВидДоступа,
| ВЫБОР
| КОГДА НЕ(ПраваПрофилей.ПравоЧтение
| И НЕ ПраваПрофилей.ПравоЧтениеБезОграничения
| ИЛИ ПраваПрофилей.ПравоИзменение
| И НЕ ПраваПрофилей.ПравоИзменениеБезОграничения
| ИЛИ ПраваПрофилей.ПравоДобавление
| И НЕ ПраваПрофилей.ПравоДобавлениеБезОграничения)
| ТОГДА &ТекстБезОграничения
| КОГДА НЕ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL
| ТОГДА ВидыОграниченийПрав.ВидДоступаПредставление + ВЫБОР
| КОГДА ВидыИЗначенияДоступа.ВсеРазрешены ЕСТЬ NULL
| ТОГДА """"
| КОГДА ВидыИЗначенияДоступа.ВсеРазрешены = ЛОЖЬ
| ТОГДА ВЫБОР
| КОГДА ТИПЗНАЧЕНИЯ(ВидыОграниченийПрав.ВидДоступа) = ТИП(Справочник.Пользователи)
| ИЛИ ТИПЗНАЧЕНИЯ(ВидыОграниченийПрав.ВидДоступа) = ТИП(Справочник.ВнешниеПользователи)
| ТОГДА &ТекстРазрешенныеПользователи
| ИНАЧЕ &ТекстРазрешенные
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА ТИПЗНАЧЕНИЯ(ВидыОграниченийПрав.ВидДоступа) = ТИП(Справочник.Пользователи)
| ИЛИ ТИПЗНАЧЕНИЯ(ВидыОграниченийПрав.ВидДоступа) = ТИП(Справочник.ВнешниеПользователи)
| ТОГДА &ТекстЗапрещенныеПользователи
| ИНАЧЕ &ТекстЗапрещенные
| КОНЕЦ
| КОНЕЦ
| КОГДА НЕ ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL
| ТОГДА ВидыОграниченийПравБезусловные.ВидДоступаПредставление
| ИНАЧЕ ВЫБОР
| КОГДА ПраваПрофилей.Таблица В (&ВсеТаблицыСОграничением)
| ТОГДА &ОграничениеОтключено
| ИНАЧЕ &НестандартноеОграничение
| КОНЕЦ
| КОНЕЦ КАК ВидДоступаПредставление,
| ЕСТЬNULL(ВидыИЗначенияДоступа.ВсеРазрешены, ЛОЖЬ) КАК ВсеРазрешены,
| ВЫБОР
| КОГДА ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL
| ИЛИ ТИПЗНАЧЕНИЯ(ВидыОграниченийПрав.ВидДоступа) = ТИП(Перечисление.ДополнительныеЗначенияДоступа)
| ТОГДА """"
| КОГДА НЕ ПустыеСсылкиЗначенийДоступа.Представление ЕСТЬ NULL
| ТОГДА ПустыеСсылкиЗначенийДоступа.Представление
| КОГДА ВидыИЗначенияДоступа.ЗначениеДоступа ЕСТЬ NULL
| ИЛИ ВидыИЗначенияДоступа.ЗначениеДоступа = НЕОПРЕДЕЛЕНО
| ТОГДА ВЫБОР
| КОГДА ВидыИЗначенияДоступа.ВсеРазрешены
| ТОГДА &ТекстВсеРазрешены
| ИНАЧЕ &ТекстВсеЗапрещены
| КОНЕЦ
| ИНАЧЕ ВидыИЗначенияДоступа.ЗначениеДоступа
| КОНЕЦ КАК ЗначениеДоступа,
| СоставыГруппПользователей.Пользователь КАК Пользователь,
| ЕСТЬNULL(СведенияОПользователях.ВходВПрограммуРазрешен, ЛОЖЬ) КАК ВходВПрограммуРазрешен
|ИЗ
| ПраваПрофилейНаТаблицы КАК ПраваПрофилей
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа
| ПО (ГруппыДоступа.Профиль = ПраваПрофилей.Профиль)
| И (НЕ ГруппыДоступа.ПометкаУдаления)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК УчастникиГруппДоступа
| ПО (УчастникиГруппДоступа.Ссылка = ГруппыДоступа.Ссылка)
| ЛЕВОЕ СОЕДИНЕНИЕ ВидыОграниченийПрав КАК ВидыОграниченийПрав
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВидыИЗначенияДоступа КАК ВидыИЗначенияДоступа
| ПО (ВидыИЗначенияДоступа.ВидДоступа = ВидыОграниченийПрав.ВидДоступа)
| И (ВидыОграниченийПрав.ВидДоступа <> ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен))
| И (ВидыОграниченийПрав.ВидДоступа <> ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен))
| ПО (ВидыОграниченийПрав.Таблица = ПраваПрофилей.Таблица)
| И (ВидыИЗначенияДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка)
| И (НЕ ВидыОграниченийПрав.ДляВнешнихПользователей
| И (ТИПЗНАЧЕНИЯ(УчастникиГруппДоступа.Пользователь) = ТИП(Справочник.Пользователи)
| ИЛИ ТИПЗНАЧЕНИЯ(УчастникиГруппДоступа.Пользователь) = ТИП(Справочник.ГруппыПользователей))
| ИЛИ ВидыОграниченийПрав.ДляВнешнихПользователей
| И (ТИПЗНАЧЕНИЯ(УчастникиГруппДоступа.Пользователь) = ТИП(Справочник.ВнешниеПользователи)
| ИЛИ ТИПЗНАЧЕНИЯ(УчастникиГруппДоступа.Пользователь) = ТИП(Справочник.ГруппыВнешнихПользователей)))
| И (ПраваПрофилей.ПравоЧтение
| И НЕ ПраваПрофилей.ПравоЧтениеБезОграничения
| И ВидыОграниченийПрав.ПравоЧтение
| ИЛИ ПраваПрофилей.ПравоИзменение
| И НЕ ПраваПрофилей.ПравоИзменениеБезОграничения
| И ВидыОграниченийПрав.ПравоИзменение
| ИЛИ ПраваПрофилей.ПравоДобавление
| И НЕ ПраваПрофилей.ПравоДобавлениеБезОграничения
| И ВидыОграниченийПрав.ПравоИзменение)
| ЛЕВОЕ СОЕДИНЕНИЕ ВидыОграниченийПрав КАК ВидыОграниченийПравБезусловные
| ПО (ВидыОграниченийПравБезусловные.Таблица = ПраваПрофилей.Таблица)
| И (ВидыОграниченийПравБезусловные.ВидДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен)
| ИЛИ ВидыОграниченийПравБезусловные.ВидДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен))
| И (НЕ ВидыОграниченийПравБезусловные.ДляВнешнихПользователей
| И (ТИПЗНАЧЕНИЯ(УчастникиГруппДоступа.Пользователь) = ТИП(Справочник.Пользователи)
| ИЛИ ТИПЗНАЧЕНИЯ(УчастникиГруппДоступа.Пользователь) = ТИП(Справочник.ГруппыПользователей))
| ИЛИ ВидыОграниченийПравБезусловные.ДляВнешнихПользователей
| И (ТИПЗНАЧЕНИЯ(УчастникиГруппДоступа.Пользователь) = ТИП(Справочник.ВнешниеПользователи)
| ИЛИ ТИПЗНАЧЕНИЯ(УчастникиГруппДоступа.Пользователь) = ТИП(Справочник.ГруппыВнешнихПользователей)))
| ЛЕВОЕ СОЕДИНЕНИЕ ПустыеСсылкиЗначенийДоступа КАК ПустыеСсылкиЗначенийДоступа
| ПО (ПустыеСсылкиЗначенийДоступа.ПустаяСсылка = ВидыИЗначенияДоступа.ЗначениеДоступа)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
| ПО (СоставыГруппПользователей.ГруппаПользователей = УчастникиГруппДоступа.Пользователь)
| И (ЕСТЬNULL(СоставыГруппПользователей.Пользователь.Служебный, ЛОЖЬ) <> ИСТИНА)
| И (&УсловиеОтбораПоПользователям)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОПользователях КАК СведенияОПользователях
| ПО (СведенияОПользователях.Пользователь = СоставыГруппПользователей.Пользователь)";
КонецФункции
Функция ТекстЗапросаСГруппировкойПоОтчетамДополнение()
Возврат
"ВЫБРАТЬ
| ПраваРолейНаОтчеты.Отчет КАК ОтчетСсылка,
| ПраваРолейНаОтчеты.Роль КАК Роль
|ПОМЕСТИТЬ ПраваРолейНаОтчеты
|ИЗ
| &ПраваРолейНаОтчеты КАК ПраваРолейНаОтчеты
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПрофилиГруппДоступаРоли.Ссылка КАК Профиль,
| ПраваРолейНаОтчеты.ОтчетСсылка КАК ОтчетСсылка
|ПОМЕСТИТЬ ПраваПрофилейНаОтчеты
|ИЗ
| ПраваРолейНаОтчеты КАК ПраваРолейНаОтчеты
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.Роли КАК ПрофилиГруппДоступаРоли
| ПО ПраваРолейНаОтчеты.Роль = ПрофилиГруппДоступаРоли.Роль
| И (НЕ ПрофилиГруппДоступаРоли.Ссылка.ПометкаУдаления)
|
|ИНДЕКСИРОВАТЬ ПО
| ОтчетСсылка
|;
|
|
|ВЫБРАТЬ
| ТаблицыОтчетов.Отчет КАК ОтчетСсылка,
| ТаблицыОтчетов.ОбъектМетаданных КАК Таблица
|ПОМЕСТИТЬ ТаблицыОтчетов
|ИЗ
| &ТаблицыОтчетов КАК ТаблицыОтчетов
|ГДЕ
| &ОтборОтчетовПоТаблицам
|
|ИНДЕКСИРОВАТЬ ПО
| Таблица
|;
|
|
|ВЫБРАТЬ
| ТаблицыОтчетовСПравами.ОтчетСсылка КАК ОтчетСсылка,
| ТаблицыОтчетовСПравами.Таблица КАК Таблица,
| ТаблицыОтчетовСПравами.Профиль КАК Профиль,
| МАКСИМУМ(ТаблицыОтчетовСПравами.ПравоОтчета) КАК ПравоОтчета,
| МАКСИМУМ(ТаблицыОтчетовСПравами.ПравоЧтение) КАК ПравоЧтение,
| МАКСИМУМ(ТаблицыОтчетовСПравами.ПравоИзменение) КАК ПравоИзменение,
| МАКСИМУМ(ТаблицыОтчетовСПравами.ПравоДобавление) КАК ПравоДобавление,
| МАКСИМУМ(ТаблицыОтчетовСПравами.ПравоЧтениеБезОграничения) КАК ПравоЧтениеБезОграничения,
| МАКСИМУМ(ТаблицыОтчетовСПравами.ПравоИзменениеБезОграничения) КАК ПравоИзменениеБезОграничения,
| МАКСИМУМ(ТаблицыОтчетовСПравами.ПравоДобавлениеБезОграничения) КАК ПравоДобавлениеБезОграничения,
| МАКСИМУМ(ТаблицыОтчетовСПравами.ПравоПросмотр) КАК ПравоПросмотр,
| МАКСИМУМ(ТаблицыОтчетовСПравами.ПравоРедактирование) КАК ПравоРедактирование,
| МАКСИМУМ(ТаблицыОтчетовСПравами.ПравоИнтерактивноеДобавление) КАК ПравоИнтерактивноеДобавление
|ПОМЕСТИТЬ ПраваПрофилей
|ИЗ
| (ВЫБРАТЬ
| ТаблицыОтчетов.ОтчетСсылка КАК ОтчетСсылка,
| ТаблицыОтчетов.Таблица КАК Таблица,
| ПраваПрофилейНаОтчеты.Профиль КАК Профиль,
| ИСТИНА КАК ПравоОтчета,
| ЛОЖЬ КАК ПравоЧтение,
| ЛОЖЬ КАК ПравоИзменение,
| ЛОЖЬ КАК ПравоДобавление,
| ЛОЖЬ КАК ПравоЧтениеБезОграничения,
| ЛОЖЬ КАК ПравоИзменениеБезОграничения,
| ЛОЖЬ КАК ПравоДобавлениеБезОграничения,
| ЛОЖЬ КАК ПравоПросмотр,
| ЛОЖЬ КАК ПравоРедактирование,
| ЛОЖЬ КАК ПравоИнтерактивноеДобавление
| ИЗ
| ТаблицыОтчетов КАК ТаблицыОтчетов
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПраваПрофилейНаОтчеты КАК ПраваПрофилейНаОтчеты
| ПО (ПраваПрофилейНаОтчеты.ОтчетСсылка = ТаблицыОтчетов.ОтчетСсылка)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТаблицыОтчетов.ОтчетСсылка,
| ТаблицыОтчетов.Таблица,
| ПраваПрофилейНаТаблицы.Профиль,
| ЛОЖЬ,
| ПраваПрофилейНаТаблицы.ПравоЧтение,
| ПраваПрофилейНаТаблицы.ПравоИзменение,
| ПраваПрофилейНаТаблицы.ПравоДобавление,
| ПраваПрофилейНаТаблицы.ПравоЧтениеБезОграничения,
| ПраваПрофилейНаТаблицы.ПравоИзменениеБезОграничения,
| ПраваПрофилейНаТаблицы.ПравоДобавлениеБезОграничения,
| ПраваПрофилейНаТаблицы.ПравоПросмотр,
| ПраваПрофилейНаТаблицы.ПравоРедактирование,
| ПраваПрофилейНаТаблицы.ПравоИнтерактивноеДобавление
| ИЗ
| ТаблицыОтчетов КАК ТаблицыОтчетов
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПраваПрофилейНаТаблицы КАК ПраваПрофилейНаТаблицы
| ПО (ПраваПрофилейНаТаблицы.Таблица = ТаблицыОтчетов.Таблица)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТаблицыОтчетов.ОтчетСсылка,
| ТаблицыОтчетов.Таблица,
| ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.ПустаяСсылка),
| ЛОЖЬ,
| ЛОЖЬ,
| ЛОЖЬ,
| ЛОЖЬ,
| ЛОЖЬ,
| ЛОЖЬ,
| ЛОЖЬ,
| ЛОЖЬ,
| ЛОЖЬ,
| ЛОЖЬ
| ИЗ
| ТаблицыОтчетов КАК ТаблицыОтчетов
| ГДЕ
| НЕ ИСТИНА В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА
| ИЗ
| ПраваПрофилейНаОтчеты КАК ПраваПрофилейНаОтчеты
| ГДЕ
| ПраваПрофилейНаОтчеты.ОтчетСсылка = ТаблицыОтчетов.ОтчетСсылка)
| И НЕ ИСТИНА В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА
| ИЗ
| ПраваПрофилейНаТаблицы КАК ПраваПрофилейНаТаблицы
| ГДЕ
| ПраваПрофилейНаТаблицы.Таблица = ТаблицыОтчетов.Таблица)) КАК ТаблицыОтчетовСПравами
|
|СГРУППИРОВАТЬ ПО
| ТаблицыОтчетовСПравами.ОтчетСсылка,
| ТаблицыОтчетовСПравами.Таблица,
| ТаблицыОтчетовСПравами.Профиль";
КонецФункции
Функция ТекстЗапросаСГруппировкойПоОтчетам()
Возврат
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПраваПрофилей.ОтчетСсылка КАК ОтчетСсылка,
| ВЫБОР
| КОГДА ПраваПрофилей.ПравоОтчета
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК ПравоОтчета,
| ПраваПрофилей.Таблица КАК ОбъектМетаданных,
| ВЫБОР
| КОГДА &УпрощенныйИнтерфейсНастройкиПравДоступа
| ТОГДА ГруппыДоступа.Профиль
| ИНАЧЕ ГруппыДоступа.Ссылка
| КОНЕЦ КАК ГруппаДоступа,
| ПраваПрофилей.ПравоЧтение КАК ПравоЧтение,
| ПраваПрофилей.ПравоИзменение КАК ПравоИзменение,
| ПраваПрофилей.ПравоДобавление КАК ПравоДобавление,
| ВЫБОР
| КОГДА ПраваПрофилей.ПравоДобавление
| ТОГДА 3
| КОГДА ПраваПрофилей.ПравоИзменение
| ТОГДА 2
| КОГДА ПраваПрофилей.ПравоЧтение
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК Право,
| ПраваПрофилей.ПравоЧтениеБезОграничения КАК ПравоЧтениеБезОграничения,
| ПраваПрофилей.ПравоИзменениеБезОграничения КАК ПравоИзменениеБезОграничения,
| ПраваПрофилей.ПравоДобавлениеБезОграничения КАК ПравоДобавлениеБезОграничения,
| ВЫБОР
| КОГДА ПраваПрофилей.ПравоДобавлениеБезОграничения
| ТОГДА 3
| КОГДА ПраваПрофилей.ПравоИзменениеБезОграничения
| ТОГДА 2
| КОГДА ПраваПрофилей.ПравоЧтениеБезОграничения
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК ПравоБезОграничения,
| ПраваПрофилей.ПравоПросмотр КАК ПравоПросмотр,
| ПраваПрофилей.ПравоРедактирование КАК ПравоРедактирование,
| ПраваПрофилей.ПравоИнтерактивноеДобавление КАК ПравоИнтерактивноеДобавление,
| ВЫБОР
| КОГДА ПраваПрофилей.ПравоИнтерактивноеДобавление
| ТОГДА 3
| КОГДА ПраваПрофилей.ПравоРедактирование
| ТОГДА 2
| КОГДА ПраваПрофилей.ПравоПросмотр
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК ПравоИнтерактивное,
| СоставыГруппПользователей.Пользователь КАК Пользователь,
| ЕСТЬNULL(СведенияОПользователях.ВходВПрограммуРазрешен, ЛОЖЬ) КАК ВходВПрограммуРазрешен
|ПОМЕСТИТЬ ПраваПользователей
|ИЗ
| ПраваПрофилей КАК ПраваПрофилей
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа
| ПО (ГруппыДоступа.Профиль = ПраваПрофилей.Профиль)
| И (НЕ ГруппыДоступа.ПометкаУдаления)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК УчастникиГруппДоступа
| ПО (УчастникиГруппДоступа.Ссылка = ГруппыДоступа.Ссылка)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
| ПО (СоставыГруппПользователей.ГруппаПользователей = УчастникиГруппДоступа.Пользователь)
| И (ЕСТЬNULL(СоставыГруппПользователей.Пользователь.Служебный, ЛОЖЬ) <> ИСТИНА)
| И (&УсловиеОтбораПоПользователям)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОПользователях КАК СведенияОПользователях
| ПО (СведенияОПользователях.Пользователь = СоставыГруппПользователей.Пользователь)";
КонецФункции
Функция ТекстЗапросаСГруппировкойПоОтчетамКонечный()
Возврат
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПраваПользователей.Пользователь КАК Пользователь,
| ПраваПользователей.ВходВПрограммуРазрешен КАК ВходВПрограммуРазрешен
|ПОМЕСТИТЬ ПользователиСПравами
|ИЗ
| ПраваПользователей КАК ПраваПользователей
|;
|
|
|ВЫБРАТЬ
| ПраваПользователей.ОтчетСсылка КАК ОтчетСсылка,
| ПраваПользователей.ПравоОтчета КАК ПравоОтчета,
| ПраваПользователей.ОбъектМетаданных КАК ОбъектМетаданных,
| ПраваПользователей.ГруппаДоступа КАК ГруппаДоступа,
| ПраваПользователей.ПравоЧтение КАК ПравоЧтение,
| ПраваПользователей.ПравоИзменение КАК ПравоИзменение,
| ПраваПользователей.ПравоДобавление КАК ПравоДобавление,
| ПраваПользователей.Право КАК Право,
| ПраваПользователей.ПравоЧтениеБезОграничения КАК ПравоЧтениеБезОграничения,
| ПраваПользователей.ПравоИзменениеБезОграничения КАК ПравоИзменениеБезОграничения,
| ПраваПользователей.ПравоДобавлениеБезОграничения КАК ПравоДобавлениеБезОграничения,
| ПраваПользователей.ПравоБезОграничения КАК ПравоБезОграничения,
| ПраваПользователей.ПравоПросмотр КАК ПравоПросмотр,
| ПраваПользователей.ПравоРедактирование КАК ПравоРедактирование,
| ПраваПользователей.ПравоИнтерактивноеДобавление КАК ПравоИнтерактивноеДобавление,
| ПраваПользователей.ПравоИнтерактивное КАК ПравоИнтерактивное,
| ПраваПользователей.Пользователь КАК Пользователь,
| ПраваПользователей.ВходВПрограммуРазрешен КАК ВходВПрограммуРазрешен
|ИЗ
| ПраваПользователей КАК ПраваПользователей
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТаблицыОтчетов.ОтчетСсылка,
| 0,
| ТаблицыОтчетов.Таблица,
| ВЫБОР
| КОГДА &УпрощенныйИнтерфейсНастройкиПравДоступа
| ТОГДА ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.ПустаяСсылка)
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.ПустаяСсылка)
| КОНЕЦ,
| ЛОЖЬ,
| ЛОЖЬ,
| ЛОЖЬ,
| ЛОЖЬ,
| ЛОЖЬ,
| ЛОЖЬ,
| ЛОЖЬ,
| ЛОЖЬ,
| ЛОЖЬ,
| ЛОЖЬ,
| ЛОЖЬ,
| 0,
| ПользователиСПравами.Пользователь,
| ПользователиСПравами.ВходВПрограммуРазрешен
|ИЗ
| ТаблицыОтчетов КАК ТаблицыОтчетов
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПользователиСПравами КАК ПользователиСПравами
| ПО (НЕ ИСТИНА В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА
| ИЗ
| ПраваПользователей КАК ПраваПользователей
| ГДЕ
| ПраваПользователей.ОтчетСсылка = ТаблицыОтчетов.ОтчетСсылка
| И ПраваПользователей.ОбъектМетаданных = ТаблицыОтчетов.Таблица
| И ПраваПользователей.Пользователь = ПользователиСПравами.Пользователь))";
КонецФункции
Функция ТекстЗапросаДляЗначенияДоступаНачало()
Возврат
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПраваПрофилей.Профиль КАК Профиль
|ПОМЕСТИТЬ ВсеПрофили
|ИЗ
| ПраваПрофилейНаТаблицы КАК ПраваПрофилей
|;
|
|
|ВЫБРАТЬ
| ГруппыДоступа.Профиль КАК Профиль,
| ГруппыДоступа.Ссылка КАК Ссылка
|ПОМЕСТИТЬ ГруппыДоступаВыбранногоЗначенияДоступа
|ИЗ
| ВсеПрофили КАК ВсеПрофили
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа
| ПО (ГруппыДоступа.Профиль = ВсеПрофили.Профиль)
|ГДЕ
| НЕ ГруппыДоступа.ПометкаУдаления
| И ВЫБОР
| КОГДА &ЭтоГруппаЗначенийДоступа
| И ИСТИНА В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА
| ИЗ
| РегистрСведений.ЗначенияГруппДоступа КАК Значения
| ГДЕ
| Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
| И Значения.ЗначениеДоступа = &ЗначениеДоступа)
| ТОГДА ИСТИНА
| КОГДА НЕ &ЭтоГруппаЗначенийДоступа
| И ИСТИНА В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА
| ИЗ
| РегистрСведений.ЗначенияГруппДоступа КАК Значения
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
| ПО
| Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
| И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
| И ГруппыЗначений.ЗначениеДоступа = &ЗначениеДоступа)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ = ВЫБОР
| КОГДА ИСТИНА В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА
| ИЗ
| РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
| ГДЕ
| ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
| И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(&ВидДоступа)
| И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ";
КонецФункции
Функция ТекстЗапросаДляЗначенияДоступаКонец()
Возврат
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПраваПрофилей.Таблица КАК ОбъектМетаданных,
| ВЫБОР
| КОГДА &УпрощенныйИнтерфейсНастройкиПравДоступа
| ТОГДА ГруппыДоступа.Профиль
| ИНАЧЕ ГруппыДоступа.Ссылка
| КОНЕЦ КАК ГруппаДоступа,
| ПраваПрофилей.ПравоЧтение КАК ПравоЧтение,
| ПраваПрофилей.ПравоИзменение КАК ПравоИзменение,
| ПраваПрофилей.ПравоДобавление КАК ПравоДобавление,
| ВЫБОР
| КОГДА ПраваПрофилей.ПравоДобавление
| ТОГДА 3
| КОГДА ПраваПрофилей.ПравоИзменение
| ТОГДА 2
| КОГДА ПраваПрофилей.ПравоЧтение
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК Право,
| ВЫБОР
| КОГДА НЕ ПраваПрофилей.ПравоЧтение
| ТОГДА ЛОЖЬ
| КОГДА ПраваПрофилей.ПравоЧтениеБезОграничения
| ТОГДА ИСТИНА
| ИНАЧЕ НЕ ВидыОграниченийПрав.ПравоЧтение
| КОНЕЦ КАК ПравоЧтениеБезОграничения,
| ВЫБОР
| КОГДА НЕ ПраваПрофилей.ПравоИзменение
| ТОГДА ЛОЖЬ
| КОГДА ПраваПрофилей.ПравоИзменениеБезОграничения
| ТОГДА ИСТИНА
| ИНАЧЕ НЕ ВидыОграниченийПрав.ПравоИзменение
| КОНЕЦ КАК ПравоИзменениеБезОграничения,
| ВЫБОР
| КОГДА НЕ ПраваПрофилей.ПравоДобавление
| ТОГДА ЛОЖЬ
| КОГДА ПраваПрофилей.ПравоДобавлениеБезОграничения
| ТОГДА ИСТИНА
| ИНАЧЕ НЕ ВидыОграниченийПрав.ПравоИзменение
| КОНЕЦ КАК ПравоДобавлениеБезОграничения,
| ВЫБОР
| КОГДА ВЫБОР
| КОГДА НЕ ПраваПрофилей.ПравоДобавление
| ТОГДА ЛОЖЬ
| КОГДА ПраваПрофилей.ПравоДобавлениеБезОграничения
| ТОГДА ИСТИНА
| ИНАЧЕ НЕ ВидыОграниченийПрав.ПравоИзменение
| КОНЕЦ
| ТОГДА 3
| КОГДА ВЫБОР
| КОГДА НЕ ПраваПрофилей.ПравоИзменение
| ТОГДА ЛОЖЬ
| КОГДА ПраваПрофилей.ПравоИзменениеБезОграничения
| ТОГДА ИСТИНА
| ИНАЧЕ НЕ ВидыОграниченийПрав.ПравоИзменение
| КОНЕЦ
| ТОГДА 2
| КОГДА ВЫБОР
| КОГДА НЕ ПраваПрофилей.ПравоЧтение
| ТОГДА ЛОЖЬ
| КОГДА ПраваПрофилей.ПравоЧтениеБезОграничения
| ТОГДА ИСТИНА
| ИНАЧЕ НЕ ВидыОграниченийПрав.ПравоЧтение
| КОНЕЦ
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК ПравоБезОграничения,
| ПраваПрофилей.ПравоПросмотр КАК ПравоПросмотр,
| ПраваПрофилей.ПравоРедактирование КАК ПравоРедактирование,
| ПраваПрофилей.ПравоИнтерактивноеДобавление КАК ПравоИнтерактивноеДобавление,
| ВЫБОР
| КОГДА ПраваПрофилей.ПравоИнтерактивноеДобавление
| ТОГДА 3
| КОГДА ПраваПрофилей.ПравоРедактирование
| ТОГДА 2
| КОГДА ПраваПрофилей.ПравоПросмотр
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК ПравоИнтерактивное,
| &ВидДоступа КАК ВидДоступа,
| &ВидДоступаПредставление КАК ВидДоступаПредставление,
| &ПредставлениеЗначенияДоступа КАК ЗначениеДоступа,
| СоставыГруппПользователей.Пользователь КАК Пользователь,
| ЕСТЬNULL(СведенияОПользователях.ВходВПрограммуРазрешен, ЛОЖЬ) КАК ВходВПрограммуРазрешен
|ИЗ
| ПраваПрофилейНаТаблицы КАК ПраваПрофилей
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ГруппыДоступаВыбранногоЗначенияДоступа КАК ГруппыДоступа
| ПО (ГруппыДоступа.Профиль = ПраваПрофилей.Профиль)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК УчастникиГруппДоступа
| ПО (УчастникиГруппДоступа.Ссылка = ГруппыДоступа.Ссылка)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВидыОграниченийПрав КАК ВидыОграниченийПрав
| ПО (ВидыОграниченийПрав.Таблица = ПраваПрофилей.Таблица)
| И (НЕ ВидыОграниченийПрав.ДляВнешнихПользователей
| И (ТИПЗНАЧЕНИЯ(УчастникиГруппДоступа.Пользователь) = ТИП(Справочник.Пользователи)
| ИЛИ ТИПЗНАЧЕНИЯ(УчастникиГруппДоступа.Пользователь) = ТИП(Справочник.ГруппыПользователей))
| ИЛИ ВидыОграниченийПрав.ДляВнешнихПользователей
| И (ТИПЗНАЧЕНИЯ(УчастникиГруппДоступа.Пользователь) = ТИП(Справочник.ВнешниеПользователи)
| ИЛИ ТИПЗНАЧЕНИЯ(УчастникиГруппДоступа.Пользователь) = ТИП(Справочник.ГруппыВнешнихПользователей)))
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
| ПО (СоставыГруппПользователей.ГруппаПользователей = УчастникиГруппДоступа.Пользователь)
| И (ЕСТЬNULL(СоставыГруппПользователей.Пользователь.Служебный, ЛОЖЬ) <> ИСТИНА)
| И (&УсловиеОтбораПоПользователям)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОПользователях КАК СведенияОПользователях
| ПО (СведенияОПользователях.Пользователь = СоставыГруппПользователей.Пользователь)";
КонецФункции
Функция ТекстЗапросаДляЗначенияДоступаТипПользовательКонец()
Возврат
"ВЫБРАТЬ
| ГруппыДоступа.Профиль КАК Профиль,
| ГруппыДоступа.Ссылка КАК Ссылка,
| ГруппыДоступа.Пользователь КАК Пользователь,
| ГруппыДоступа.ЭтоАвторизованныйПользователь КАК ЭтоАвторизованныйПользователь
|ПОМЕСТИТЬ ГруппыДоступаВыбранногоЗначенияДоступаСУчастниками
|ИЗ
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ГруппыДоступа.Профиль КАК Профиль,
| ГруппыДоступа.Ссылка КАК Ссылка,
| СоставыГруппПользователей.Пользователь КАК Пользователь,
| ИСТИНА КАК ЭтоАвторизованныйПользователь
| ИЗ
| ВсеПрофили КАК ВсеПрофили
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа
| ПО (ГруппыДоступа.Профиль = ВсеПрофили.Профиль)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК УчастникиГруппДоступа
| ПО (УчастникиГруппДоступа.Ссылка = ГруппыДоступа.Ссылка)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
| ПО (СоставыГруппПользователей.ГруппаПользователей = УчастникиГруппДоступа.Пользователь)
| И (ЕСТЬNULL(СоставыГруппПользователей.Пользователь.Служебный, ЛОЖЬ) <> ИСТИНА)
| И (&УсловиеОтбораПоПользователям)
| ГДЕ
| НЕ ГруппыДоступа.ПометкаУдаления
| И ИСТИНА В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА
| ИЗ
| РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
| ГДЕ
| ГруппыЗначенийДоступа.ЗначениеДоступа = &ЗначениеДоступа
| И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = СоставыГруппПользователей.Пользователь)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ РАЗЛИЧНЫЕ
| ГруппыДоступа.Профиль,
| ГруппыДоступа.Ссылка,
| УчастникиГруппДоступа.Пользователь,
| ЛОЖЬ
| ИЗ
| ГруппыДоступаВыбранногоЗначенияДоступа КАК ГруппыДоступа
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК УчастникиГруппДоступа
| ПО (УчастникиГруппДоступа.Ссылка = ГруппыДоступа.Ссылка)) КАК ГруппыДоступа
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПраваПрофилей.Таблица КАК ОбъектМетаданных,
| ВЫБОР
| КОГДА &УпрощенныйИнтерфейсНастройкиПравДоступа
| ТОГДА ГруппыДоступаСУчастниками.Профиль
| ИНАЧЕ ГруппыДоступаСУчастниками.Ссылка
| КОНЕЦ КАК ГруппаДоступа,
| ПраваПрофилей.ПравоЧтение
| И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь
| ИЛИ ПраваПрофилей.ПравоЧтениеБезОграничения) КАК ПравоЧтение,
| ПраваПрофилей.ПравоИзменение
| И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь
| ИЛИ ПраваПрофилей.ПравоИзменениеБезОграничения) КАК ПравоИзменение,
| ПраваПрофилей.ПравоДобавление
| И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь
| ИЛИ ПраваПрофилей.ПравоДобавлениеБезОграничения) КАК ПравоДобавление,
| ВЫБОР
| КОГДА ПраваПрофилей.ПравоДобавление
| И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь
| ИЛИ ПраваПрофилей.ПравоДобавлениеБезОграничения)
| ТОГДА 3
| КОГДА ПраваПрофилей.ПравоИзменение
| И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь
| ИЛИ ПраваПрофилей.ПравоИзменениеБезОграничения)
| ТОГДА 2
| КОГДА ПраваПрофилей.ПравоЧтение
| И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь
| ИЛИ ПраваПрофилей.ПравоЧтениеБезОграничения)
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК Право,
| ВЫБОР
| КОГДА НЕ(ПраваПрофилей.ПравоЧтение
| И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь
| ИЛИ ПраваПрофилей.ПравоЧтениеБезОграничения))
| ТОГДА ЛОЖЬ
| КОГДА ПраваПрофилей.ПравоЧтениеБезОграничения
| ТОГДА ИСТИНА
| ИНАЧЕ НЕ ВидыОграниченийПрав.ПравоЧтение
| КОНЕЦ КАК ПравоЧтениеБезОграничения,
| ВЫБОР
| КОГДА НЕ(ПраваПрофилей.ПравоИзменение
| И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь
| ИЛИ ПраваПрофилей.ПравоИзменениеБезОграничения))
| ТОГДА ЛОЖЬ
| КОГДА ПраваПрофилей.ПравоИзменениеБезОграничения
| ТОГДА ИСТИНА
| ИНАЧЕ НЕ ВидыОграниченийПрав.ПравоИзменение
| КОНЕЦ КАК ПравоИзменениеБезОграничения,
| ВЫБОР
| КОГДА НЕ(ПраваПрофилей.ПравоДобавление
| И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь
| ИЛИ ПраваПрофилей.ПравоДобавлениеБезОграничения))
| ТОГДА ЛОЖЬ
| КОГДА ПраваПрофилей.ПравоДобавлениеБезОграничения
| ТОГДА ИСТИНА
| ИНАЧЕ НЕ ВидыОграниченийПрав.ПравоИзменение
| КОНЕЦ КАК ПравоДобавлениеБезОграничения,
| ВЫБОР
| КОГДА ВЫБОР
| КОГДА НЕ(ПраваПрофилей.ПравоДобавление
| И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь
| ИЛИ ПраваПрофилей.ПравоДобавлениеБезОграничения))
| ТОГДА ЛОЖЬ
| КОГДА ПраваПрофилей.ПравоДобавлениеБезОграничения
| ТОГДА ИСТИНА
| ИНАЧЕ НЕ ВидыОграниченийПрав.ПравоИзменение
| КОНЕЦ
| ТОГДА 3
| КОГДА ВЫБОР
| КОГДА НЕ(ПраваПрофилей.ПравоИзменение
| И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь
| ИЛИ ПраваПрофилей.ПравоИзменениеБезОграничения))
| ТОГДА ЛОЖЬ
| КОГДА ПраваПрофилей.ПравоИзменениеБезОграничения
| ТОГДА ИСТИНА
| ИНАЧЕ НЕ ВидыОграниченийПрав.ПравоИзменение
| КОНЕЦ
| ТОГДА 2
| КОГДА ВЫБОР
| КОГДА НЕ(ПраваПрофилей.ПравоЧтение
| И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь
| ИЛИ ПраваПрофилей.ПравоЧтениеБезОграничения))
| ТОГДА ЛОЖЬ
| КОГДА ПраваПрофилей.ПравоЧтениеБезОграничения
| ТОГДА ИСТИНА
| ИНАЧЕ НЕ ВидыОграниченийПрав.ПравоЧтение
| КОНЕЦ
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК ПравоБезОграничения,
| ПраваПрофилей.ПравоПросмотр
| И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь
| ИЛИ ПраваПрофилей.ПравоЧтениеБезОграничения) КАК ПравоПросмотр,
| ПраваПрофилей.ПравоРедактирование
| И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь
| ИЛИ ПраваПрофилей.ПравоИзменениеБезОграничения) КАК ПравоРедактирование,
| ПраваПрофилей.ПравоИнтерактивноеДобавление
| И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь
| ИЛИ ПраваПрофилей.ПравоДобавлениеБезОграничения) КАК ПравоИнтерактивноеДобавление,
| ВЫБОР
| КОГДА ПраваПрофилей.ПравоИнтерактивноеДобавление
| И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь
| ИЛИ ПраваПрофилей.ПравоДобавлениеБезОграничения)
| ТОГДА 3
| КОГДА ПраваПрофилей.ПравоРедактирование
| И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь
| ИЛИ ПраваПрофилей.ПравоИзменениеБезОграничения)
| ТОГДА 2
| КОГДА ПраваПрофилей.ПравоПросмотр
| И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь
| ИЛИ ПраваПрофилей.ПравоЧтениеБезОграничения)
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК ПравоИнтерактивное,
| &ВидДоступа КАК ВидДоступа,
| &ВидДоступаПредставление КАК ВидДоступаПредставление,
| &ПредставлениеЗначенияДоступа КАК ЗначениеДоступа,
| СоставыГруппПользователей.Пользователь КАК Пользователь,
| ЕСТЬNULL(СведенияОПользователях.ВходВПрограммуРазрешен, ЛОЖЬ) КАК ВходВПрограммуРазрешен
|ИЗ
| ПраваПрофилейНаТаблицы КАК ПраваПрофилей
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ГруппыДоступаВыбранногоЗначенияДоступаСУчастниками КАК ГруппыДоступаСУчастниками
| ПО (ГруппыДоступаСУчастниками.Профиль = ПраваПрофилей.Профиль)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВидыОграниченийПрав КАК ВидыОграниченийПрав
| ПО (ВидыОграниченийПрав.Таблица = ПраваПрофилей.Таблица)
| И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь
| ИЛИ ПраваПрофилей.ПравоЧтениеБезОграничения
| ИЛИ ПраваПрофилей.ПравоИзменениеБезОграничения)
| И (НЕ ВидыОграниченийПрав.ДляВнешнихПользователей
| И (ТИПЗНАЧЕНИЯ(ГруппыДоступаСУчастниками.Пользователь) = ТИП(Справочник.Пользователи)
| ИЛИ ТИПЗНАЧЕНИЯ(ГруппыДоступаСУчастниками.Пользователь) = ТИП(Справочник.ГруппыПользователей))
| ИЛИ ВидыОграниченийПрав.ДляВнешнихПользователей
| И (ТИПЗНАЧЕНИЯ(ГруппыДоступаСУчастниками.Пользователь) = ТИП(Справочник.ВнешниеПользователи)
| ИЛИ ТИПЗНАЧЕНИЯ(ГруппыДоступаСУчастниками.Пользователь) = ТИП(Справочник.ГруппыВнешнихПользователей)))
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
| ПО (СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаСУчастниками.Пользователь)
| И (ЕСТЬNULL(СоставыГруппПользователей.Пользователь.Служебный, ЛОЖЬ) <> ИСТИНА)
| И (&УсловиеОтбораПоПользователям)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОПользователях КАК СведенияОПользователях
| ПО (СведенияОПользователях.Пользователь = СоставыГруппПользователей.Пользователь)";
КонецФункции
Функция ПраваПользователей()
УсловиеОтбораПоПользователям = "";
УсловиеОтбораПоВходВПрограммуРазрешен = "";
Если ОтборПоВходВПрограммуРазрешен() Тогда
ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаНачало =
ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаНачало() + "
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОПользователях КАК СведенияОПользователях
| ПО (СведенияОПользователях.Пользователь = СоставыГруппПользователей.Пользователь)
| И (СведенияОПользователях.ВходВПрограммуРазрешен)";
УсловиеОтбораПоВходВПрограммуРазрешен = "
| И (СведенияОПользователях.ВходВПрограммуРазрешен)";
Иначе
ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаНачало =
ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаНачало();
КонецЕсли;
Запрос = Новый Запрос;
ОтборПоВидуПользователей = ОтборПоВидуПользователей();
ОтборПоПользователям = ОтборПоПользователям();
Если ЗначениеЗаполнено(ОтборПоПользователям.Значение) И ОтборПоПользователям.БезГрупп Тогда
Запрос.УстановитьПараметр("ВыбранныеПользователиБезГрупп", ОтборПоПользователям.Значение);
УсловиеОтбораПоПользователям = УсловиеОтбораПоПользователям + "
| И (СоставыГруппПользователей.Пользователь В (&ВыбранныеПользователиБезГрупп))";
ИначеЕсли ЗначениеЗаполнено(ОтборПоПользователям.Значение) Тогда
Запрос.УстановитьПараметр("ВыбранныеПользователиИГруппы", ОтборПоПользователям.Значение);
УсловиеОтбораПоПользователям = УсловиеОтбораПоПользователям + "
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК ОтборПользователей
| ПО (ОтборПользователей.Пользователь = СоставыГруппПользователей.Пользователь)
| И (ОтборПользователей.ГруппаПользователей В (&ВыбранныеПользователиИГруппы))";
ИначеЕсли ОтборПоВидуПользователей = "Пользователи" Тогда
УсловиеОтбораПоПользователям = УсловиеОтбораПоПользователям + "
| И (ТИПЗНАЧЕНИЯ(СоставыГруппПользователей.Пользователь) = ТИП(Справочник.Пользователи))";
ИначеЕсли ОтборПоВидуПользователей = "ВнешниеПользователи" Тогда
УсловиеОтбораПоПользователям = УсловиеОтбораПоПользователям + "
| И (ТИПЗНАЧЕНИЯ(СоставыГруппПользователей.Пользователь) = ТИП(Справочник.ВнешниеПользователи))";
КонецЕсли;
УсловиеОтбораПоПользователям = Сред(УсловиеОтбораПоПользователям, 4);
ВключенаГруппировкаПоОтчетам = ВключенаГруппировкаПоОтчетам();
ВариантСОграничениямиДоступа = ВариантСОграничениямиДоступа();
ВариантПравНаОбъект = ВариантПравНаОбъект();
ВариантДляЗначенияДоступа = ВариантДляЗначенияДоступа();
УниверсальноеОграничение =
УправлениеДоступомСлужебный.ОграничиватьДоступНаУровнеЗаписейУниверсально(Истина, Истина);
Если ВариантСОграничениямиДоступа Или ВариантДляЗначенияДоступа Тогда
Если УниверсальноеОграничение Тогда
ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаВидыОграничений
= ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаВидыОграниченийПоНовому();
Иначе
ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаВидыОграничений
= ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаВидыОграниченийПоСтарому();
КонецЕсли;
ПустыеСсылкиЗначенийДоступа = УправлениеДоступомСлужебный.ПустыеСсылкиЗначенийДоступа();
КонецЕсли;
Если ВключенаГруппировкаПоОтчетам Тогда
ТекстЗапросаОсновной = ТекстЗапросаСГруппировкойПоОтчетам();
Запрос.Текст = ТекстЗапросаОбщий() + ОбщегоНазначения.РазделительПакетаЗапросов()
+ ТекстЗапросаСГруппировкойПоОтчетамДополнение();
Запрос.УстановитьПараметр("ПраваРолейНаОтчеты", ПраваРолейНаОтчеты());
Запрос.УстановитьПараметр("ТаблицыОтчетов", ТаблицыОтчетов());
ИначеЕсли ВариантСОграничениямиДоступа Тогда
ТекстЗапросаОсновной = ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаНачало
+ ОбщегоНазначения.РазделительПакетаЗапросов()
+ ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаВидыОграничений
+ ОбщегоНазначения.РазделительПакетаЗапросов()
+ ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаКонец();
Запрос.Текст = ТекстЗапросаОбщий();
Запрос.УстановитьПараметр("ТекстРазрешенные", " (" + НСтр("ru = 'Разрешенные'")+ ")");
Запрос.УстановитьПараметр("ТекстЗапрещенные", " (" + НСтр("ru = 'Запрещенные'") + ")");
Запрос.УстановитьПараметр("ТекстРазрешенныеПользователи", " (" + НСтр("ru = 'Разрешенные'") + ") - "
+ НСтр("ru = 'авторизованный пользователь и его группы всегда разрешены'"));
Запрос.УстановитьПараметр("ТекстЗапрещенныеПользователи", " (" + НСтр("ru = 'Запрещенные'") + ") - "
+ НСтр("ru = 'авторизованный пользователь и его группы всегда разрешены'"));
Запрос.УстановитьПараметр("ОграничениеОтключено", "<" + НСтр("ru = 'Ограничение отключено'")+ ">");
Запрос.УстановитьПараметр("НестандартноеОграничение",
?(УниверсальноеОграничение, "<" + НСтр("ru = 'Нестандартное ограничение'") + ">",
Отчеты.АнализПравДоступа.ПредставлениеОграниченияБезВидовДоступа()));
Запрос.УстановитьПараметр("ТекстБезОграничения", "<" + НСтр("ru = 'Без ограничения'") + ">");
Запрос.УстановитьПараметр("ТекстВсеРазрешены", "<" + НСтр("ru = 'Все разрешены'") + ">");
Запрос.УстановитьПараметр("ТекстВсеЗапрещены", "<" + НСтр("ru = 'Все запрещены'") + ">");
Запрос.УстановитьПараметр("ПустыеСсылкиЗначенийДоступа", ПустыеСсылкиЗначенийДоступа);
ВсеТаблицыСОграничением = Новый Массив;
Запрос.УстановитьПараметр("ВидыОграниченийПрав",
Отчеты.АнализПравДоступа.ВидыОграниченийПрав(,, ВсеТаблицыСОграничением));
Запрос.УстановитьПараметр("ВсеТаблицыСОграничением", ВсеТаблицыСОграничением);
ИначеЕсли ВариантПравНаОбъект Тогда
ЭлементДанных = ОтборПоЭлементамДанных();
ПраваНаЭлементДанных = УправлениеДоступом.ПраваДоступаКДанным(ЭлементДанных, Неопределено);
Если Не ЗначениеЗаполнено(ЭлементДанных) Тогда
ПраваНаЭлементДанных.Очистить();
КонецЕсли;
Запрос.УстановитьПараметр("ПраваНаЭлементДанных", ПраваНаЭлементДанных);
ТекстЗапросаОсновной = ТекстЗапросаПравОбъекта();
Запрос.Текст = ТекстЗапросаОбщий();
ИначеЕсли ВариантДляЗначенияДоступа Тогда
ЗначениеДоступа = ОтборПоЗначениюДоступа();
СвойстваВидовДоступа = УправлениеДоступомСлужебный.СвойстваВидовДоступа();
ПоТипамГруппИЗначений = СвойстваВидовДоступа.ПоТипамГруппИЗначений;
СвойстваВидаДоступа = ПоТипамГруппИЗначений.Получить(ТипЗнч(ЗначениеДоступа));
ВидДоступа = ?(СвойстваВидаДоступа = Неопределено, Null, СвойстваВидаДоступа.Ссылка);
Отбор = Новый Структура("ВидДоступа", ВидДоступа);
ВидыОграниченийПрав = Отчеты.АнализПравДоступа.ВидыОграниченийПрав(, Истина);
Запрос.УстановитьПараметр("ВидыОграниченийПрав",
ВидыОграниченийПрав.Скопировать(ВидыОграниченийПрав.НайтиСтроки(Отбор)));
ВариантГруппировки = ЗначениеПараметраИзНастройки(КомпоновщикНастроек.ПользовательскиеНастройки,
"ВариантГруппировки", 0);
ТипПользователь = Новый ОписаниеТипов(
"СправочникСсылка.Пользователи, СправочникСсылка.ГруппыПользователей,
|СправочникСсылка.ВнешниеПользователи,СправочникСсылка.ГруппыВнешнихПользователей");
ТекстЗапросаОсновной = ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаВидыОграничений
+ ОбщегоНазначения.РазделительПакетаЗапросов()
+ ТекстЗапросаДляЗначенияДоступаНачало()
+ ОбщегоНазначения.РазделительПакетаЗапросов()
+ ?(ТипПользователь.СодержитТип(ТипЗнч(ВидДоступа)),
ТекстЗапросаДляЗначенияДоступаТипПользовательКонец(),
ТекстЗапросаДляЗначенияДоступаКонец());
Запрос.Текст = ТекстЗапросаОбщий();
Запрос.УстановитьПараметр("ВидДоступа", ВидДоступа);
Запрос.УстановитьПараметр("ВидДоступаПредставление", ?(СвойстваВидаДоступа = Неопределено, "",
УправлениеДоступомСлужебный.ПредставлениеВидаДоступа(СвойстваВидаДоступа)));
Запрос.УстановитьПараметр("ЗначениеДоступа", ЗначениеДоступа);
НайденнаяСтрока = ПустыеСсылкиЗначенийДоступа.Найти(ЗначениеДоступа, "ПустаяСсылка");
Запрос.УстановитьПараметр("ПредставлениеЗначенияДоступа", ?(НайденнаяСтрока = Неопределено,
ЗначениеДоступа, НайденнаяСтрока.Представление));
Запрос.УстановитьПараметр("ЭтоГруппаЗначенийДоступа", СвойстваВидаДоступа <> Неопределено
И СвойстваВидовДоступа.ПоТипамЗначений.Получить(ТипЗнч(ЗначениеДоступа)) = Неопределено);
Иначе
ТекстЗапросаОсновной = ТекстЗапросаБезГруппировкиПоОтчетам();
Запрос.Текст = ТекстЗапросаОбщий();
КонецЕсли;
УпрощенныйИнтерфейс = УправлениеДоступомСлужебный.УпрощенныйИнтерфейсНастройкиПравДоступа();
Запрос.Текст = Запрос.Текст + ОбщегоНазначения.РазделительПакетаЗапросов()
+ ТекстЗапросаОсновной;
Запрос.УстановитьПараметр("УпрощенныйИнтерфейсНастройкиПравДоступа", УпрощенныйИнтерфейс);
Запрос.УстановитьПараметр("ПраваРолейРасширений", УправлениеДоступомСлужебный.ПраваРолейРасширений());
Если ВариантПравНаОбъект Тогда
ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(ЭлементДанных));
ОтборПоТаблицам = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных);
ИначеЕсли ВариантДляЗначенияДоступа Тогда
ТаблицыСОграничением = Запрос.Параметры.ВидыОграниченийПрав.Скопировать(, "Таблица");
ТаблицыСОграничением.Свернуть("Таблица");
ОтборПоТаблицам = ?(ЗначениеЗаполнено(ТаблицыСОграничением),
ОтборПоТаблицам(ТаблицыСОграничением.ВыгрузитьКолонку("Таблица")),
ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Неопределено));
Иначе
ОтборПоТаблицам = ОтборПоТаблицам();
КонецЕсли;
Если ЗначениеЗаполнено(ОтборПоТаблицам) Тогда
Запрос.УстановитьПараметр("ВыбранныеТаблицы", ОтборПоТаблицам);
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборПравПоТаблицам",
"ПраваРолей.ОбъектМетаданных В (&ВыбранныеТаблицы)");
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборОтчетовПоТаблицам",
"ТаблицыОтчетов.ОбъектМетаданных В (&ВыбранныеТаблицы)");
Иначе
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборПравПоТаблицам", "ИСТИНА");
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборОтчетовПоТаблицам", "ИСТИНА");
КонецЕсли;
Запрос.Текст = СтрЗаменить(Запрос.Текст,
"И (&УсловиеОтбораПоПользователям)", УсловиеОтбораПоПользователям);
Если ЗначениеЗаполнено(УсловиеОтбораПоВходВПрограммуРазрешен) Тогда
Запрос.Текст = Запрос.Текст + УсловиеОтбораПоВходВПрограммуРазрешен;
Запрос.Текст = СтрЗаменить(Запрос.Текст,
"ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОПользователях КАК СведенияОПользователях",
"ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОПользователях КАК СведенияОПользователях");
КонецЕсли;
Если ВключенаГруппировкаПоОтчетам Тогда
Запрос.Текст = Запрос.Текст + "
|
|ИНДЕКСИРОВАТЬ ПО
| ОтчетСсылка,
| ОбъектМетаданных,
| Пользователь";
Запрос.Текст = Запрос.Текст + ОбщегоНазначения.РазделительПакетаЗапросов()
+ ТекстЗапросаСГруппировкойПоОтчетамКонечный();
КонецЕсли;
Результат = Запрос.Выполнить().Выгрузить();
Если ВариантПравНаОбъект Тогда
Результат.Колонки.Добавить("ЭлементДанных");
Результат.Колонки.Добавить("ЭлементДанныхПредставление");
Результат.ЗаполнитьЗначения(ОбщегоНазначения.ЗначениеВСтрокуXML(ЭлементДанных), "ЭлементДанных");
Результат.ЗаполнитьЗначения(ПредставлениеЭлементаДанных(ЭлементДанных), "ЭлементДанныхПредставление");
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ТипСтрока(ДлинаСтроки)
Возврат Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(ДлинаСтроки))
КонецФункции
Функция ТипЧисло(ЧислоРазрядов)
Возврат Новый ОписаниеТипов("Число",,,
Новый КвалификаторыЧисла(ЧислоРазрядов, 0, ДопустимыйЗнак.Неотрицательный));
КонецФункции
Функция ВключенаГруппировкаПоОтчетам()
СписокПолей = Новый Массив;
ЗаполнитьСписокПолейГруппировок(КомпоновщикНастроек.Настройки.Структура,
КомпоновщикНастроек.ПользовательскиеНастройки, СписокПолей);
Возврат СписокПолей.Найти(Новый ПолеКомпоновкиДанных("Отчет")) <> Неопределено;
КонецФункции
Функция ВариантСОграничениямиДоступа()
Вариант = КомпоновщикНастроек.Настройки.ДополнительныеСвойства.КлючПредопределенногоВарианта;
Возврат Вариант = "ПраваПользователяНаТаблицу";
КонецФункции
Функция ВариантПравНаОбъект()
Вариант = КомпоновщикНастроек.Настройки.ДополнительныеСвойства.КлючПредопределенногоВарианта;
Возврат Вариант = "ПраваПользователейНаОбъект";
КонецФункции
Функция ВариантДляЗначенияДоступа()
Вариант = КомпоновщикНастроек.Настройки.ДополнительныеСвойства.КлючПредопределенногоВарианта;
Возврат Вариант = "ПраваПользователейВРазрезеРазрешенногоЗначения";
КонецФункции
Функция НастройкиПравПоТаблицеВОтборе(НастройкиКД = Неопределено, ПользовательскиеНастройкиКД = Неопределено)
Таблицы = ОтборПоТаблицам(, НастройкиКД, ПользовательскиеНастройкиКД);
Если Не ЗначениеЗаполнено(Таблицы)
Или Таблицы.Количество() <> 1
Или Не ЗначениеЗаполнено(Таблицы[0])
Или Не ОписаниеТиповИдентификатора().СодержитТип(ТипЗнч(Таблицы[0])) Тогда
Возврат Неопределено;
КонецЕсли;
МетаданныеТаблицы = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(Таблицы[0], Ложь);
Если МетаданныеТаблицы = Неопределено
Или Не ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(МетаданныеТаблицы) Тогда
Возврат Неопределено;
КонецЕсли;
МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(МетаданныеТаблицы.ПолноеИмя());
ПустаяСсылка = МенеджерОбъекта.ПустаяСсылка();
ТипСсылки = ТипЗнч(ПустаяСсылка);
ВозможныеПрава = УправлениеДоступомСлужебный.ВозможныеПраваДляНастройкиПравОбъектов();
ОписаниеПрав = ВозможныеПрава.ПоТипамСсылок.Получить(ТипСсылки);
Если ОписаниеПрав = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Свойства = Новый Структура("Иерархический", Ложь);
ЗаполнитьЗначенияСвойств(Свойства, МетаданныеТаблицы);
Результат = Новый Структура;
Результат.Вставить("ЕстьИерархия", Свойства.Иерархический);
Результат.Вставить("ОписаниеПрав", ОписаниеПрав);
Результат.Вставить("ТипСсылки", ТипСсылки);
Результат.Вставить("ПустаяСсылка", ПустаяСсылка);
Возврат Результат;
КонецФункции
Процедура ЗаполнитьСписокПолейГруппировок(КоллекцияЭлементов, ПользовательскиеНастройки, СписокПолей)
Для Каждого Элемент Из КоллекцияЭлементов Цикл
Если ТипЗнч(Элемент) <> Тип("ГруппировкаКомпоновкиДанных")
И ТипЗнч(Элемент) <> Тип("ГруппировкаТаблицыКомпоновкиДанных")
И ТипЗнч(Элемент) <> Тип("ТаблицаКомпоновкиДанных") Тогда
Продолжить;
КонецЕсли;
ПользовательскийЭлемент = ПользовательскиеНастройки.Элементы.Найти(
Элемент.ИдентификаторПользовательскойНастройки);
Если ПользовательскийЭлемент <> Неопределено
И Не ПользовательскийЭлемент.Использование
Или ПользовательскийЭлемент = Неопределено
И Не Элемент.Использование Тогда
Продолжить;
КонецЕсли;
Если ТипЗнч(Элемент) = Тип("ТаблицаКомпоновкиДанных") Тогда
ЗаполнитьСписокПолейГруппировок(Элемент.Строки, ПользовательскиеНастройки, СписокПолей);
ЗаполнитьСписокПолейГруппировок(Элемент.Колонки, ПользовательскиеНастройки, СписокПолей);
Иначе
Для Каждого Поле Из Элемент.ПоляГруппировки.Элементы Цикл
Если ТипЗнч(Поле) = Тип("ПолеГруппировкиКомпоновкиДанных") Тогда
Если Поле.Использование Тогда
СписокПолей.Добавить(Поле.Поле);
КонецЕсли;
КонецЕсли;
КонецЦикла;
ЗаполнитьСписокПолейГруппировок(Элемент.Структура, ПользовательскиеНастройки, СписокПолей);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция ВыбранныйОтчет()
ВыбранныеОтчеты = Новый Массив;
Отбор = КомпоновщикНастроек.ПолучитьНастройки().Отбор;
Для Каждого Элемент Из Отбор.Элементы Цикл
Если Элемент.Использование И Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отчет") Тогда
Если Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно Тогда
ВыбранныеОтчеты.Добавить(Элемент.ПравоеЗначение);
Иначе
Возврат Неопределено;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ВыбранныеОтчеты.Количество() = 1 Тогда
Возврат ВыбранныеОтчеты[0];
КонецЕсли;
Возврат Неопределено;
КонецФункции
Функция ОтборПоВидуПользователей()
Если Не Константы.ИспользоватьВнешнихПользователей.Получить() Тогда
Возврат "Пользователи";
КонецЕсли;
ПолеОтбора = КомпоновщикНастроек.ПолучитьНастройки().ПараметрыДанных.Элементы.Найти("ВидПользователей");
Если Не ПолеОтбора.Использование Тогда
Возврат "";
КонецЕсли;
Если ПолеОтбора.Значение = 0 Тогда
Возврат "Пользователи";
КонецЕсли;
Если ПолеОтбора.Значение = 1 Тогда
Возврат "ВнешниеПользователи";
КонецЕсли;
Возврат "";
КонецФункции
Функция ОтборПоПользователям()
Результат = Новый Структура;
Результат.Вставить("БезГрупп", Истина);
Результат.Вставить("Значение", Неопределено);
Если Не Пользователи.ЭтоПолноправныйПользователь(,, Ложь) Тогда
Результат.Значение = Пользователи.АвторизованныйПользователь();
Возврат Результат;
КонецЕсли;
ПолеОтбора = КомпоновщикНастроек.ПолучитьНастройки().ПараметрыДанных.Элементы.Найти("Пользователь");
ЗначениеОтбора = ПолеОтбора.Значение;
Если Не ПолеОтбора.Использование Или Не ЗначениеЗаполнено(ЗначениеОтбора) Тогда
Возврат Результат;
КонецЕсли;
Результат.Значение = ЗначениеОтбора;
Если ТипЗнч(ЗначениеОтбора) <> Тип("СписокЗначений") Тогда
ЗначениеОтбора = Новый СписокЗначений;
ЗначениеОтбора.Добавить(Результат.Значение);
КонецЕсли;
Для Каждого ЭлементСписка Из ЗначениеОтбора Цикл
Если ТипЗнч(ЭлементСписка.Значение) = Тип("СправочникСсылка.ГруппыПользователей")
Или ТипЗнч(ЭлементСписка.Значение) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда
Результат.БезГрупп = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ОтборПоТаблицам(Список = Неопределено, НастройкиКД = Неопределено, ПользовательскиеНастройкиКД = Неопределено)
Если НастройкиКД = Неопределено Тогда
НастройкиКД = КомпоновщикНастроек.Настройки;
КонецЕсли;
Если ПользовательскиеНастройкиКД = Неопределено Тогда
ПользовательскиеНастройкиКД = КомпоновщикНастроек.ПользовательскиеНастройки;
КонецЕсли;
НайденныйЭлемент = Неопределено;
Для Каждого Элемент Из НастройкиКД.Отбор.Элементы Цикл
Если Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ОбъектМетаданных") Тогда
НайденныйЭлемент = Элемент;
Прервать;
КонецЕсли;
КонецЦикла;
Если НайденныйЭлемент = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Настройка = ПользовательскиеНастройкиКД.Элементы.Найти(
НайденныйЭлемент.ИдентификаторПользовательскойНастройки);
Если Настройка = Неопределено Тогда
Настройка = НайденныйЭлемент;
КонецЕсли;
Если Не Настройка.Использование Тогда
Значения = Неопределено;
ИначеЕсли Настройка.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно Тогда
Значения = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Настройка.ПравоеЗначение);
ИначеЕсли Настройка.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке Тогда
Значения = Настройка.ПравоеЗначение.ВыгрузитьЗначения();
КонецЕсли;
Если Значения = Неопределено Тогда
Возврат Список;
КонецЕсли;
Если Список = Неопределено Тогда
Возврат Значения;
КонецЕсли;
Результат = Новый Массив;
Для Каждого Значение Из Значения Цикл
Если Список.Найти(Значение) <> Неопределено Тогда
Результат.Добавить(Значение);
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ОтборПоВходВПрограммуРазрешен()
Отбор = КомпоновщикНастроек.ПолучитьНастройки().Отбор;
Для Каждого Элемент Из Отбор.Элементы Цикл
Если Элемент.Использование
И Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВходВПрограммуРазрешен")
И Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно
И Элемент.ПравоеЗначение = Истина Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции
Функция НастройкиПравПоОбъектам()
Результат = Новый Структура;
Результат.Вставить("НастройкиПравПоОбъектам", Новый ТаблицаЗначений);
Результат.Вставить("НастройкиПравИерархия", Новый ТаблицаЗначений);
Результат.Вставить("НастройкиПравЛегенда", Новый ТаблицаЗначений);
Результат.Вставить("ВладелецНастроекЗаголовок", "");
Если Не ВариантСОграничениямиДоступа() Тогда
Возврат Результат;
КонецЕсли;
НастройкиПрав = НастройкиПравПоТаблицеВОтборе();
Если НастройкиПрав = Неопределено Тогда
Возврат Результат;
КонецЕсли;
Результат.ВладелецНастроекЗаголовок = Строка(НастройкиПрав.ТипСсылки);
ОписаниеПользователя = ОтборПоПользователям().Значение;
Если ТипЗнч(ОписаниеПользователя) = Тип("СписокЗначений") Тогда
Если ОписаниеПользователя.Количество() <> 1 Тогда
Возврат Результат;
КонецЕсли;
Пользователь = ОписаниеПользователя[0].Значение;
Иначе
Пользователь = ОписаниеПользователя;
КонецЕсли;
Если ТипЗнч(Пользователь) <> Тип("СправочникСсылка.Пользователи")
И ТипЗнч(Пользователь) <> Тип("СправочникСсылка.ВнешниеПользователи") Тогда
Возврат Результат;
КонецЕсли;
Если Пользователи.ЭтоПолноправныйПользователь(Пользователь,, Ложь) Тогда
Возврат Результат;
КонецЕсли;
ИмяДляПодпапок = ОписаниеКолонкиДляПодпапок().Имя;
ЗаголовкиПрав = ЗаголовкиПрав(НастройкиПрав, ИмяДляПодпапок);
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТипОбъектов", НастройкиПрав.ТипСсылки);
Запрос.УстановитьПараметр("Пользователь", Пользователь);
Запрос.УстановитьПараметр("ИмяДляПодпапок", ИмяДляПодпапок);
Запрос.УстановитьПараметр("ЕстьИерархия", НастройкиПрав.ЕстьИерархия);
Запрос.УстановитьПараметр("ПустойРодитель", НастройкиПрав.ПустаяСсылка);
Запрос.УстановитьПараметр("ЗаголовкиПрав", ЗаголовкиПрав);
Запрос.УстановитьПараметр("ПредставлениеПерсонально", НСтр("ru = 'Персонально'"));
Запрос.УстановитьПараметр("ПредставлениеНеопределено", НСтр("ru = 'Неопределено'"));
Запрос.УстановитьПараметр("ПредставлениеГруппыПользователей",
" (" + НСтр("ru = 'Группа пользователей'") + ")");
Запрос.УстановитьПараметр("ПредставлениеГруппыВнешнихПользователей",
" (" + НСтр("ru = 'Группа внешних пользователей'") + ")");
Запрос.Текст =
"ВЫБРАТЬ
| НастройкиПрав.Объект КАК ВладелецНастроек,
| НастройкиПрав.Пользователь КАК ПользовательНастройки,
| НастройкиПрав.Право КАК НастроенноеПраво,
| ВЫБОР
| КОГДА НастройкиПрав.ПравоЗапрещено
| ТОГДА 2
| ИНАЧЕ 1
| КОНЕЦ КАК ЗначениеПрава
|ПОМЕСТИТЬ НастройкиПравПоВладельцам
|ИЗ
| РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
|ГДЕ
| ИСТИНА В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА
| ИЗ
| РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
| ГДЕ
| СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
| И СоставыГруппПользователей.Пользователь = &Пользователь)
| И ТИПЗНАЧЕНИЯ(НастройкиПрав.Объект) = &ТипОбъектов
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| НастройкиПрав.Объект,
| НастройкиПрав.Пользователь,
| &ИмяДляПодпапок,
| ВЫБОР
| КОГДА МАКСИМУМ(НастройкиПрав.НаследованиеРазрешено) = ЛОЖЬ
| ТОГДА 2
| ИНАЧЕ 1
| КОНЕЦ
|ИЗ
| РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
|ГДЕ
| &ЕстьИерархия
| И ИСТИНА В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА
| ИЗ
| РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
| ГДЕ
| СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
| И СоставыГруппПользователей.Пользователь = &Пользователь)
| И ТИПЗНАЧЕНИЯ(НастройкиПрав.Объект) = &ТипОбъектов
|
|СГРУППИРОВАТЬ ПО
| НастройкиПрав.Объект,
| НастройкиПрав.Пользователь
|;
|
|
|ВЫБРАТЬ
| РассчитанныеПрава.ВладелецНастроек КАК ВладелецНастроек,
| РассчитанныеПрава.НастроенноеПраво КАК НастроенноеПраво,
| МАКСИМУМ(РассчитанныеПрава.ЗначениеПрава) КАК ЗначениеПрава
|ПОМЕСТИТЬ РассчитанныеПраваПоВладельцам
|ИЗ
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| НаследованиеНастроек.Объект КАК ВладелецНастроек,
| НастройкиПрав.Право КАК НастроенноеПраво,
| 1 КАК ЗначениеПрава
| ИЗ
| РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
| ПО (ТИПЗНАЧЕНИЯ(НаследованиеНастроек.Объект) = &ТипОбъектов)
| И (НастройкиПрав.Объект = НаследованиеНастроек.Родитель)
| И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияПрава
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
| ПО (СоставыГруппПользователей.Пользователь = &Пользователь)
| И (СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ РАЗЛИЧНЫЕ
| НаследованиеНастроек.Объект,
| НастройкиПрав.Право,
| 2
| ИЗ
| РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
| ПО (ТИПЗНАЧЕНИЯ(НаследованиеНастроек.Объект) = &ТипОбъектов)
| И (НастройкиПрав.Объект = НаследованиеНастроек.Родитель)
| И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияПрава
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
| ПО (СоставыГруппПользователей.Пользователь = &Пользователь)
| И (СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь)) КАК РассчитанныеПрава
|
|СГРУППИРОВАТЬ ПО
| РассчитанныеПрава.ВладелецНастроек,
| РассчитанныеПрава.НастроенноеПраво
|;
|
|
|ВЫБРАТЬ
| НаследованиеНастроек.Объект КАК ВладелецНастроек,
| НаследованиеНастроек.Наследовать КАК НаследованиеНастроек
|ПОМЕСТИТЬ НаследованиеНастроекПоВладельцам
|ИЗ
| РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
|ГДЕ
| НаследованиеНастроек.Объект = НаследованиеНастроек.Родитель
| И ТИПЗНАЧЕНИЯ(НаследованиеНастроек.Объект) = &ТипОбъектов
| И ИСТИНА В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА
| ИЗ
| РассчитанныеПраваПоВладельцам КАК РассчитанныеПраваПоВладельцам
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК Родители
| ПО
| Родители.Объект = РассчитанныеПраваПоВладельцам.ВладелецНастроек
| И Родители.Родитель = НаследованиеНастроек.Объект)
|;
|
|
|ВЫБРАТЬ
| ЗаголовкиПрав.ИмяПрава КАК ИмяПрава,
| ЗаголовкиПрав.ЗаголовокПрава КАК ЗаголовокПрава,
| ЗаголовкиПрав.ИндексПрава КАК ИндексПрава
|ПОМЕСТИТЬ ЗаголовкиПрав
|ИЗ
| &ЗаголовкиПрав КАК ЗаголовкиПрав
|;
|
|
|ВЫБРАТЬ ПЕРВЫЕ 1
| РассчитанныеПраваПоВладельцам.ВладелецНастроек КАК ВладелецНастроек,
| ЕСТЬNULL(НаследованиеНастроекПоВладельцам.НаследованиеНастроек, ЛОЖЬ) КАК НаследованиеНастроек
|ПОМЕСТИТЬ ОдинВладелецНастроек
|ИЗ
| РассчитанныеПраваПоВладельцам КАК РассчитанныеПраваПоВладельцам
| ЛЕВОЕ СОЕДИНЕНИЕ НаследованиеНастроекПоВладельцам КАК НаследованиеНастроекПоВладельцам
| ПО (НаследованиеНастроекПоВладельцам.ВладелецНастроек = РассчитанныеПраваПоВладельцам.ВладелецНастроек)
|;
|
|
|ВЫБРАТЬ
| ВЫБОР
| КОГДА НаследованиеНастроекПоВладельцам.ВладелецНастроек.Родитель <> &ПустойРодитель
| ТОГДА НаследованиеНастроекПоВладельцам.ВладелецНастроек.Родитель
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ КАК РодительВладельцаИлиПользователяНастроек,
| НаследованиеНастроекПоВладельцам.ВладелецНастроек КАК ВладелецИлиПользовательНастроек,
| ПРЕДСТАВЛЕНИЕ(НаследованиеНастроекПоВладельцам.ВладелецНастроек) КАК ВладелецИлиПользовательНастроекПредставление,
| ВЫБОР
| КОГДА НаследованиеНастроекПоВладельцам.ВладелецНастроек.Родитель <> &ПустойРодитель
| ТОГДА НаследованиеНастроекПоВладельцам.ВладелецНастроек.Родитель
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ КАК ВладелецНастроек,
| ИСТИНА КАК ЭтоВладелецНастроек
|ИЗ
| НаследованиеНастроекПоВладельцам КАК НаследованиеНастроекПоВладельцам
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| НастройкиПравПоВладельцам.ВладелецНастроек,
| НастройкиПравПоВладельцам.ПользовательНастройки,
| ВЫБОР
| КОГДА ТИПЗНАЧЕНИЯ(НастройкиПравПоВладельцам.ПользовательНастройки) = ТИП(Справочник.Пользователи)
| ИЛИ ТИПЗНАЧЕНИЯ(НастройкиПравПоВладельцам.ПользовательНастройки) = ТИП(Справочник.ВнешниеПользователи)
| ТОГДА &ПредставлениеПерсонально
| КОГДА ТИПЗНАЧЕНИЯ(НастройкиПравПоВладельцам.ПользовательНастройки) = ТИП(Справочник.ГруппыПользователей)
| ТОГДА ВЫРАЗИТЬ(НастройкиПравПоВладельцам.ПользовательНастройки КАК Справочник.ГруппыПользователей).Наименование + &ПредставлениеГруппыПользователей
| КОГДА ТИПЗНАЧЕНИЯ(НастройкиПравПоВладельцам.ПользовательНастройки) = ТИП(Справочник.ГруппыВнешнихПользователей)
| ТОГДА ВЫРАЗИТЬ(НастройкиПравПоВладельцам.ПользовательНастройки КАК Справочник.ГруппыВнешнихПользователей).Наименование + &ПредставлениеГруппыВнешнихПользователей
| ИНАЧЕ &ПредставлениеНеопределено
| КОНЕЦ,
| НастройкиПравПоВладельцам.ВладелецНастроек,
| ЛОЖЬ
|ИЗ
| НастройкиПравПоВладельцам КАК НастройкиПравПоВладельцам
|;
|
|
|ВЫБРАТЬ
| ВЫБОР
| КОГДА РассчитанныеПраваПоВладельцам.ВладелецНастроек.Родитель <> &ПустойРодитель
| ТОГДА РассчитанныеПраваПоВладельцам.ВладелецНастроек.Родитель
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ КАК ВладелецНастроек,
| РассчитанныеПраваПоВладельцам.ВладелецНастроек КАК ВладелецИлиПользовательНастроек,
| ИСТИНА КАК ЭтоВладелецНастроек,
| ЕСТЬNULL(НаследованиеНастроекПоВладельцам.НаследованиеНастроек, ЛОЖЬ) КАК НаследованиеНастроекВладельцем,
| ЕСТЬNULL(ЗаголовкиПрав.ЗаголовокПрава, РассчитанныеПраваПоВладельцам.НастроенноеПраво) КАК НастроенноеПраво,
| ЕСТЬNULL(ЗаголовкиПрав.ИндексПрава, 99) КАК ИндексПрава,
| РассчитанныеПраваПоВладельцам.ЗначениеПрава КАК ЗначениеПрава
|ИЗ
| РассчитанныеПраваПоВладельцам КАК РассчитанныеПраваПоВладельцам
| ЛЕВОЕ СОЕДИНЕНИЕ ЗаголовкиПрав КАК ЗаголовкиПрав
| ПО (ЗаголовкиПрав.ИмяПрава = РассчитанныеПраваПоВладельцам.НастроенноеПраво)
| ЛЕВОЕ СОЕДИНЕНИЕ НаследованиеНастроекПоВладельцам КАК НаследованиеНастроекПоВладельцам
| ПО (НаследованиеНастроекПоВладельцам.ВладелецНастроек = РассчитанныеПраваПоВладельцам.ВладелецНастроек)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| НастройкиПравПоВладельцам.ВладелецНастроек,
| НастройкиПравПоВладельцам.ПользовательНастройки,
| ЛОЖЬ,
| ЕСТЬNULL(НаследованиеНастроекПоВладельцам.НаследованиеНастроек, ЛОЖЬ),
| ЕСТЬNULL(ЗаголовкиПрав.ЗаголовокПрава, НастройкиПравПоВладельцам.НастроенноеПраво),
| ЕСТЬNULL(ЗаголовкиПрав.ИндексПрава, 99),
| НастройкиПравПоВладельцам.ЗначениеПрава
|ИЗ
| НастройкиПравПоВладельцам КАК НастройкиПравПоВладельцам
| ЛЕВОЕ СОЕДИНЕНИЕ ЗаголовкиПрав КАК ЗаголовкиПрав
| ПО (ЗаголовкиПрав.ИмяПрава = НастройкиПравПоВладельцам.НастроенноеПраво)
| ЛЕВОЕ СОЕДИНЕНИЕ НаследованиеНастроекПоВладельцам КАК НаследованиеНастроекПоВладельцам
| ПО (НаследованиеНастроекПоВладельцам.ВладелецНастроек = НастройкиПравПоВладельцам.ВладелецНастроек)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ВЫБОР
| КОГДА ОдинВладелецНастроек.ВладелецНастроек.Родитель <> &ПустойРодитель
| ТОГДА ОдинВладелецНастроек.ВладелецНастроек.Родитель
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ,
| ОдинВладелецНастроек.ВладелецНастроек,
| ИСТИНА,
| ОдинВладелецНастроек.НаследованиеНастроек,
| ЗаголовкиПрав.ЗаголовокПрава,
| ЗаголовкиПрав.ИндексПрава,
| 0
|ИЗ
| ЗаголовкиПрав КАК ЗаголовкиПрав
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ОдинВладелецНастроек КАК ОдинВладелецНастроек
| ПО (НЕ ИСТИНА В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА
| ИЗ
| РассчитанныеПраваПоВладельцам КАК РассчитанныеПрава
| ГДЕ
| РассчитанныеПрава.НастроенноеПраво = ЗаголовкиПрав.ИмяПрава))";
РезультатыЗапроса = Запрос.ВыполнитьПакет();
Результат.НастройкиПравИерархия = РезультатыЗапроса[РезультатыЗапроса.ВГраница()-1].Выгрузить();
Результат.НастройкиПравПоОбъектам = РезультатыЗапроса[РезультатыЗапроса.ВГраница()].Выгрузить();
Результат.НастройкиПравЛегенда = НастройкиПравЛегенда(ЗаголовкиПрав, НастройкиПрав.ЕстьИерархия);
Возврат Результат;
КонецФункции
Функция ЗаголовкиПрав(НастройкиПрав, ИмяДляПодпапок)
Результат = Новый ТаблицаЗначений;
Результат.Колонки.Добавить("ИмяПрава", ТипСтрока(60));
Результат.Колонки.Добавить("ИндексПрава", ТипЧисло(2));
Результат.Колонки.Добавить("ЗаголовокПрава", ТипСтрока(60));
Результат.Колонки.Добавить("ПодсказкаПрава", ТипСтрока(150));
Для Каждого ОписаниеПрава Из НастройкиПрав.ОписаниеПрав Цикл
ПредставленияПрава = РегистрыСведений.НастройкиПравОбъектов.ПредставлениеВозможногоПрава(ОписаниеПрава);
НоваяСтрока = Результат.Добавить();
НоваяСтрока.ИмяПрава = ОписаниеПрава.Имя;
НоваяСтрока.ИндексПрава = ОписаниеПрава.ИндексПрава;
НоваяСтрока.ЗаголовокПрава = СтрЗаменить(ПредставленияПрава.Заголовок, Символы.ПС, " ");
НоваяСтрока.ПодсказкаПрава = СтрЗаменить(ПредставленияПрава.Подсказка, Символы.ПС, " ");
КонецЦикла;
Если НастройкиПрав.ЕстьИерархия Тогда
ОписаниеКолонки = ОписаниеКолонкиДляПодпапок();
НоваяСтрока = Результат.Добавить();
НоваяСтрока.ИмяПрава = ОписаниеКолонки.Имя;
НоваяСтрока.ИндексПрава = НастройкиПрав.ОписаниеПрав.Количество();
НоваяСтрока.ЗаголовокПрава = ОписаниеКолонки.Заголовок;
НоваяСтрока.ПодсказкаПрава = ОписаниеКолонки.Подсказка;
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ОписаниеКолонкиДляПодпапок()
Результат = Новый Структура;
Результат.Вставить("Имя", "ДляПодпапок");
Результат.Вставить("Заголовок", НСтр("ru = 'Для подпапок'"));
Результат.Вставить("Подсказка",
НСтр("ru = 'Права не только для текущей папки, но и для ее нижестоящих папок'"));
Возврат Результат;
КонецФункции
Функция НастройкиПравЛегенда(ЗаголовкиПрав, ЕстьИерархия)
Результат = ЗаголовкиПрав.Скопировать(, "ЗаголовокПрава,ПодсказкаПрава");
Если ЕстьИерархия Тогда
НоваяСтрока = Результат.Вставить(0);
НоваяСтрока.ЗаголовокПрава = "";
НоваяСтрока.ПодсказкаПрава = НСтр("ru = 'Наследование прав от вышестоящих папок'");
КонецЕсли;
Для Каждого Строка Из Результат Цикл
Строка.ПодсказкаПрава = "- " + Строка.ПодсказкаПрава;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ОтборПоЭлементамДанных()
ПолеОтбора = КомпоновщикНастроек.ПолучитьНастройки().ПараметрыДанных.Элементы.Найти("ЭлементДанных");
ЗначениеОтбора = ПолеОтбора.Значение;
Если Не ПолеОтбора.Использование Или Не ЗначениеЗаполнено(ЗначениеОтбора) Тогда
Возврат Справочники.Пользователи.ПустаяСсылка();
КонецЕсли;
Возврат ЗначениеОтбора;
КонецФункции
Функция ПредставлениеЭлементаДанных(ЭлементДанных)
ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(ЭлементДанных));
Если Не ОбщегоНазначения.ЭтоРегистр(ОбъектМетаданных) Тогда
Возврат Строка(ЭлементДанных);
КонецЕсли;
ПредставлениеДанных = ОбъектМетаданных.Представление();
ОписаниеПолей = СтандартныеПодсистемыСервер.ОписаниеКлючаЗаписи(
ОбъектМетаданных.ПолноеИмя()).ОписаниеПолей;
СписокПолей = Новый Массив;
Для Каждого ОписаниеПоля Из ОписаниеПолей Цикл
СписокПолей.Добавить(СтрШаблон(" %1 = ""%2""",
ОписаниеПоля.Представление, Строка(ЭлементДанных[ОписаниеПоля.Имя])));
КонецЦикла;
ШаблонПредставления = ?(ОписаниеПолей.Количество() = 1,
НСтр("ru = 'Запись регистра ""%1"" с ключевым полем:
|%2'"),
НСтр("ru = 'Запись регистра ""%1"" с ключевыми полями:
|%2'"));
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонПредставления,
ПредставлениеДанных, СтрСоединить(СписокПолей, "," + Символы.ПС));
КонецФункции
Функция ОтборПоЗначениюДоступа()
ПолеОтбора = КомпоновщикНастроек.ПолучитьНастройки().ПараметрыДанных.Элементы.Найти("ЗначениеДоступа");
Возврат ПолеОтбора.Значение;
КонецФункции
Функция ЗначениеПараметраИзНастройки(ПользовательскиеНастройкиКД, ИмяПараметра, ЗначениеПоУмолчанию = Неопределено)
Параметр = Новый ПараметрКомпоновкиДанных(ИмяПараметра);
Значение = ЗначениеПоУмолчанию;
Если ПользовательскиеНастройкиКД = Неопределено Тогда
Возврат Значение;
КонецЕсли;
Для Каждого ЭлементПользовательскойНастройки Из ПользовательскиеНастройкиКД.Элементы Цикл
Если ТипЗнч(ЭлементПользовательскойНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных")
И ЭлементПользовательскойНастройки.Параметр = Параметр Тогда
Если ЭлементПользовательскойНастройки.Использование Тогда
Значение = ЭлементПользовательскойНастройки.Значение;
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Значение;
КонецФункции
Процедура УстановитьИспользованиеГруппировок(Группировки, НастройкиКД, ПользовательскиеНастройкиКД)
Для Каждого Группировка Из Группировки Цикл
Отчеты.АнализПравДоступа.УстановитьИспользованиеГруппировки(
Группировка.Ключ, Группировка.Значение, НастройкиКД, ПользовательскиеНастройкиКД);
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли