#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОписаниеПеременных
Перем Документ;
Перем ПодробныеСведенияОПравахДоступа;
#КонецОбласти
#Область ПрограммныйИнтерфейс
#Область ДляВызоваИзДругихПодсистем
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
Настройки.ФормироватьСразу = Истина;
Настройки.События.ПередЗагрузкойНастроекВКомпоновщик = Истина;
Настройки.События.ПриОпределенииИспользуемыхТаблиц = Истина;
КонецПроцедуры
Процедура ПередЗагрузкойНастроекВКомпоновщик(Контекст, КлючСхемы, КлючВарианта, НовыеНастройкиКД,
НовыеПользовательскиеНастройкиКД) Экспорт
Если Не УправлениеДоступомСлужебный.УпрощенныйИнтерфейсНастройкиПравДоступа()
Или Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда
Возврат;
КонецЕсли;
Если КлючСхемы <> "1" Тогда
КлючСхемы = "1";
СхемаКД = ПолучитьМакет("МакетПараметров");
Параметр = СхемаКД.Параметры.Найти("ПодробныеСведенияОПравахДоступа");
Параметр.ОграничениеИспользования = Истина;
МодульОтчетыСервер = ОбщегоНазначения.ОбщийМодуль("ОтчетыСервер");
МодульОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, СхемаКД, КлючСхемы);
КонецЕсли;
КонецПроцедуры
Процедура ПриОпределенииИспользуемыхТаблиц(КлючВарианта, ИспользуемыеТаблицы) Экспорт
ИспользуемыеТаблицы.Добавить(Метаданные.РегистрыСведений.ПраваРолей.ПолноеИмя());
ИспользуемыеТаблицы.Добавить(Метаданные.Справочники.ПрофилиГруппДоступа.ПолноеИмя());
ИспользуемыеТаблицы.Добавить(Метаданные.Справочники.ГруппыДоступа.ПолноеИмя());
ИспользуемыеТаблицы.Добавить(Метаданные.РегистрыСведений.СоставыГруппПользователей.ПолноеИмя());
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область ОбработчикиСобытий
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда
ТекстОшибки = НСтр("ru = 'Для формирования отчета в конфигурации необходима подсистема ""Варианты отчетов"".'");
ВызватьИсключение ТекстОшибки;
КонецЕсли;
РегистрыСведений.ПраваРолей.ПроверитьДанныеРегистра();
ПараметрыДанных = КомпоновщикНастроек.ПолучитьНастройки().ПараметрыДанных;
ПользовательИлиГруппа = ОтборПользователь();
ПодробныеСведенияОПравахДоступа = ПараметрыДанных.Элементы.Найти("ПодробныеСведенияОПравахДоступа").Значение;
Если ТипЗнч(ПодробныеСведенияОПравахДоступа) <> Тип("Булево") Тогда
ПодробныеСведенияОПравахДоступа = Ложь;
КонецЕсли;
Если Не ЗначениеЗаполнено(ПользовательИлиГруппа) Тогда
ТекстОшибки = НСтр("ru = 'Откройте карточку пользователя, перейдите по ссылке ""Права доступа"",
|нажмите на кнопку ""Отчет по правам доступа"".'");
ВызватьИсключение ТекстОшибки;
КонецЕсли;
Если ПользовательИлиГруппа <> Пользователи.АвторизованныйПользователь()
И Не Пользователи.ЭтоПолноправныйПользователь() Тогда
ТекстОшибки = НСтр("ru = 'Недостаточно прав для просмотра отчета.'");
ВызватьИсключение(ТекстОшибки, КатегорияОшибки.НарушениеПравДоступа);
КонецЕсли;
ВыводПравГруппы = ТипЗнч(ПользовательИлиГруппа) = Тип("СправочникСсылка.ГруппыПользователей")
Или ТипЗнч(ПользовательИлиГруппа) = Тип("СправочникСсылка.ГруппыВнешнихПользователей");
УпрощенныйИнтерфейс = УправлениеДоступомСлужебный.УпрощенныйИнтерфейсНастройкиПравДоступа();
Документ = ДокументРезультат;
Макет = ПолучитьМакет("Макет");
Свойства = Новый Структура;
Свойства.Вставить("Ссылка", ПользовательИлиГруппа);
ВывестиЗаголовокОтчета(Макет, Свойства, ПользовательИлиГруппа);
Если Не ВыводПравГруппы Тогда
ВывестиСвойстваПользователяИБ(Макет, ПользовательИлиГруппа);
КонецЕсли;
Если ТипЗнч(ПользовательИлиГруппа) = Тип("СправочникСсылка.Пользователи")
Или ТипЗнч(ПользовательИлиГруппа) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда
УстановитьПривилегированныйРежим(Истина);
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(
ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПользовательИлиГруппа, "ИдентификаторПользователяИБ"));
УстановитьПривилегированныйРежим(Ложь);
Если ПользовательИБ <> Неопределено И Пользователи.ЭтоПолноправныйПользователь(ПользовательИБ, Истина) Тогда
Область = Макет.ПолучитьОбласть("ПолноправныйПользователь");
Документ.Вывести(Область, 1);
Возврат;
КонецЕсли;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
ВозможныеПрава = УправлениеДоступомСлужебный.ВозможныеПраваДляНастройкиПравОбъектов();
РезультатыЗапроса = ВыбратьСведенияОПравахДоступа(ВозможныеПрава, ВыводПравГруппы, ПользовательИлиГруппа);
Документ.НачатьАвтогруппировкуСтрок();
Если ПодробныеСведенияОПравахДоступа Тогда
ВывестиПодробныеСведенияОПравахДоступа(Макет, ПользовательИлиГруппа, РезультатыЗапроса[3], Свойства);
ВывестиРолиПоПрофилям(Макет, ПользовательИлиГруппа, РезультатыЗапроса[5], Свойства);
КонецЕсли;
ВывестиДоступныеДляПросмотра(ВозможныеПрава, Макет, РезультатыЗапроса[9], УпрощенныйИнтерфейс);
ВывестиДоступныеДляРедактирования(ВозможныеПрава, Макет, РезультатыЗапроса[10], УпрощенныйИнтерфейс);
ВывестиПраваНаОтдельныеОбъекты(ВозможныеПрава, Макет, РезультатыЗапроса[6], ВыводПравГруппы);
Документ.ЗакончитьАвтогруппировкуСтрок();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция ОтборПользователь()
Отбор = КомпоновщикНастроек.ПолучитьНастройки().Отбор;
Для Каждого Элемент Из Отбор.Элементы Цикл
Если Элемент.Использование И Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Пользователь") Тогда
Если Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно
Или Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке Тогда
Возврат Элемент.ПравоеЗначение;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункции
Функция ВыбратьСведенияОПравахДоступа(Знач ВозможныеПрава, Знач ВыводПравГруппы, Знач ПользовательИлиГруппа)
ВидыОграниченийПрав = Отчеты.АнализПравДоступа.ВидыОграниченийПрав(
ТипЗнч(ПользовательИлиГруппа) = Тип("СправочникСсылка.ВнешниеПользователи")
Или ТипЗнч(ПользовательИлиГруппа) = Тип("СправочникСсылка.ГруппыВнешнихПользователей"));
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Пользователь", ПользовательИлиГруппа);
Запрос.УстановитьПараметр("ВыводПравГруппы", ВыводПравГруппы);
Запрос.УстановитьПараметр("ВидыОграниченийПрав", ВидыОграниченийПрав);
Запрос.УстановитьПараметр("ТипыВладельцевНастроекПрав", ВозможныеПрава.ТипыВладельцев);
Запрос.УстановитьПараметр("ПраваРолейРасширений", УправлениеДоступомСлужебный.ПраваРолейРасширений());
Запрос.Текст =
"ВЫБРАТЬ
| ПраваРолейРасширений.ОбъектМетаданных КАК ОбъектМетаданных,
| ПраваРолейРасширений.Роль КАК Роль,
| ПраваРолейРасширений.ПравоДобавление КАК ПравоДобавление,
| ПраваРолейРасширений.ПравоИзменение КАК ПравоИзменение,
| ПраваРолейРасширений.ПравоЧтениеБезОграничения КАК ПравоЧтениеБезОграничения,
| ПраваРолейРасширений.ПравоДобавлениеБезОграничения КАК ПравоДобавлениеБезОграничения,
| ПраваРолейРасширений.ПравоИзменениеБезОграничения КАК ПравоИзменениеБезОграничения,
| ПраваРолейРасширений.ПравоПросмотр КАК ПравоПросмотр,
| ПраваРолейРасширений.ПравоИнтерактивноеДобавление КАК ПравоИнтерактивноеДобавление,
| ПраваРолейРасширений.ПравоРедактирование КАК ПравоРедактирование,
| ПраваРолейРасширений.ВидИзмененияСтроки КАК ВидИзмененияСтроки
|ПОМЕСТИТЬ ПраваРолейРасширений
|ИЗ
| &ПраваРолейРасширений КАК ПраваРолейРасширений
|;
|
|
|ВЫБРАТЬ
| ПраваРолейРасширений.ОбъектМетаданных КАК ОбъектМетаданных,
| ПраваРолейРасширений.Роль КАК Роль,
| ПраваРолейРасширений.ПравоДобавление КАК ПравоДобавление,
| ПраваРолейРасширений.ПравоИзменение КАК ПравоИзменение,
| ПраваРолейРасширений.ПравоЧтениеБезОграничения КАК ПравоЧтениеБезОграничения,
| ПраваРолейРасширений.ПравоДобавлениеБезОграничения КАК ПравоДобавлениеБезОграничения,
| ПраваРолейРасширений.ПравоИзменениеБезОграничения КАК ПравоИзменениеБезОграничения,
| ПраваРолейРасширений.ПравоПросмотр КАК ПравоПросмотр,
| ПраваРолейРасширений.ПравоИнтерактивноеДобавление КАК ПравоИнтерактивноеДобавление,
| ПраваРолейРасширений.ПравоРедактирование КАК ПравоРедактирование
|ПОМЕСТИТЬ ПраваРолей
|ИЗ
| ПраваРолейРасширений КАК ПраваРолейРасширений
|ГДЕ
| ПраваРолейРасширений.ВидИзмененияСтроки = 1
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПраваРолей.ОбъектМетаданных,
| ПраваРолей.Роль,
| ПраваРолей.ПравоДобавление,
| ПраваРолей.ПравоИзменение,
| ПраваРолей.ПравоЧтениеБезОграничения,
| ПраваРолей.ПравоДобавлениеБезОграничения,
| ПраваРолей.ПравоИзменениеБезОграничения,
| ПраваРолей.ПравоПросмотр,
| ПраваРолей.ПравоИнтерактивноеДобавление,
| ПраваРолей.ПравоРедактирование
|ИЗ
| РегистрСведений.ПраваРолей КАК ПраваРолей
| ЛЕВОЕ СОЕДИНЕНИЕ ПраваРолейРасширений КАК ПраваРолейРасширений
| ПО ПраваРолей.ОбъектМетаданных = ПраваРолейРасширений.ОбъектМетаданных
| И ПраваРолей.Роль = ПраваРолейРасширений.Роль
|ГДЕ
| ПраваРолейРасширений.ОбъектМетаданных ЕСТЬ NULL
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ГруппыДоступа.Ссылка КАК ГруппаДоступа,
| ГруппыДоступа.Профиль КАК Профиль,
| ГруппыДоступаПользователи.Пользователь КАК Пользователь,
| НЕ ТИПЗНАЧЕНИЯ(ГруппыДоступаПользователи.Пользователь) В (
| ТИП(Справочник.Пользователи),
| ТИП(Справочник.ВнешниеПользователи)) КАК ГрупповоеУчастие,
| ГруппыДоступа.Ответственный КАК Ответственный
|ПОМЕСТИТЬ ГруппыДоступаПользователя
|ИЗ
| Справочник.ГруппыДоступа КАК ГруппыДоступа
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи
| ПО ГруппыДоступа.Ссылка = ГруппыДоступаПользователи.Ссылка
| И (НЕ ГруппыДоступа.ПометкаУдаления)
| И (НЕ ГруппыДоступа.Профиль.ПометкаУдаления)
| И (ВЫБОР
| КОГДА &ВыводПравГруппы
| ТОГДА ГруппыДоступаПользователи.Пользователь = &Пользователь
| ИНАЧЕ ИСТИНА В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА
| ИЗ
| РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
| ГДЕ
| СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь
| И СоставыГруппПользователей.Пользователь = &Пользователь)
| КОНЕЦ)
|;
|
|
|ВЫБРАТЬ
| ГруппыДоступаПользователя.ГруппаДоступа КАК ГруппаДоступа,
| ПРЕДСТАВЛЕНИЕ(ГруппыДоступаПользователя.ГруппаДоступа) КАК ПредставлениеГруппыДоступа,
| ГруппыДоступаПользователя.Пользователь КАК Участник,
| ПРЕДСТАВЛЕНИЕ(ГруппыДоступаПользователя.Пользователь) КАК ПредставлениеУчастника,
| ГруппыДоступаПользователя.ГрупповоеУчастие КАК ГрупповоеУчастие,
| ГруппыДоступаПользователя.ГруппаДоступа.Ответственный КАК Ответственный,
| ПРЕДСТАВЛЕНИЕ(ГруппыДоступаПользователя.Ответственный) КАК ПредставлениеОтветственного,
| ГруппыДоступаПользователя.ГруппаДоступа.Комментарий КАК Комментарий,
| ГруппыДоступаПользователя.ГруппаДоступа.Профиль КАК Профиль,
| ПРЕДСТАВЛЕНИЕ(ГруппыДоступаПользователя.ГруппаДоступа.Профиль) КАК ПредставлениеПрофиля
|ИЗ
| ГруппыДоступаПользователя КАК ГруппыДоступаПользователя
|ИТОГИ
| МАКСИМУМ(Участник)
|ПО
| ГруппаДоступа
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ГруппыДоступаПользователя.Профиль КАК Профиль
|ПОМЕСТИТЬ ПрофилиПользователя
|ИЗ
| ГруппыДоступаПользователя КАК ГруппыДоступаПользователя
|;
|
|
|ВЫБРАТЬ
| ПрофилиПользователя.Профиль КАК Профиль,
| ПРЕДСТАВЛЕНИЕ(ПрофилиПользователя.Профиль) КАК ПредставлениеПрофиля,
| РолиПрофилей.Роль.Имя КАК Роль,
| РолиПрофилей.Роль.Синоним КАК ПредставлениеРоли
|ИЗ
| ПрофилиПользователя КАК ПрофилиПользователя
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.Роли КАК РолиПрофилей
| ПО ПрофилиПользователя.Профиль = РолиПрофилей.Ссылка
|ИТОГИ
| МАКСИМУМ(Профиль),
| МАКСИМУМ(ПредставлениеПрофиля),
| МАКСИМУМ(Роль),
| МАКСИМУМ(ПредставлениеРоли)
|ПО
| Профиль,
| Роль
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТИПЗНАЧЕНИЯ(НастройкиПравОбъектов.Объект) КАК ТипОбъектов,
| НастройкиПравОбъектов.Объект КАК Объект,
| ЕСТЬNULL(НаследованиеНастроек.Наследовать, ИСТИНА) КАК Наследовать,
| ВЫБОР
| КОГДА ТИПЗНАЧЕНИЯ(НастройкиПравОбъектов.Пользователь) <> ТИП(Справочник.Пользователи)
| И ТИПЗНАЧЕНИЯ(НастройкиПравОбъектов.Пользователь) <> ТИП(Справочник.ВнешниеПользователи)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ГрупповоеУчастие,
| НастройкиПравОбъектов.Пользователь КАК Пользователь,
| ПРЕДСТАВЛЕНИЕ(НастройкиПравОбъектов.Пользователь) КАК ПользовательНаименование,
| НастройкиПравОбъектов.Право КАК Право,
| НастройкиПравОбъектов.ПравоЗапрещено КАК ПравоЗапрещено,
| НастройкиПравОбъектов.НаследованиеРазрешено КАК НаследованиеРазрешено
|ИЗ
| РегистрСведений.НастройкиПравОбъектов КАК НастройкиПравОбъектов
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
| ПО (НаследованиеНастроек.Объект = НастройкиПравОбъектов.Объект)
| И (НаследованиеНастроек.Родитель = НастройкиПравОбъектов.Объект)
|ГДЕ
| ВЫБОР
| КОГДА &ВыводПравГруппы
| ТОГДА НастройкиПравОбъектов.Пользователь = &Пользователь
| ИНАЧЕ ИСТИНА В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА
| ИЗ
| РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
| ГДЕ
| СоставыГруппПользователей.ГруппаПользователей = НастройкиПравОбъектов.Пользователь
| И СоставыГруппПользователей.Пользователь = &Пользователь)
| КОНЕЦ
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТИПЗНАЧЕНИЯ(НаследованиеНастроек.Объект),
| НаследованиеНастроек.Объект,
| НаследованиеНастроек.Наследовать,
| ЛОЖЬ,
| НЕОПРЕДЕЛЕНО,
| """",
| """",
| НЕОПРЕДЕЛЕНО,
| НЕОПРЕДЕЛЕНО
|ИЗ
| РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПравОбъектов
| ПО (НастройкиПравОбъектов.Объект = НаследованиеНастроек.Объект)
| И (НастройкиПравОбъектов.Объект = НаследованиеНастроек.Родитель)
|ГДЕ
| НаследованиеНастроек.Объект = НаследованиеНастроек.Родитель
| И НаследованиеНастроек.Наследовать = ЛОЖЬ
| И НастройкиПравОбъектов.Объект ЕСТЬ NULL
|ИТОГИ
| МАКСИМУМ(Наследовать),
| МАКСИМУМ(ГрупповоеУчастие),
| МАКСИМУМ(Пользователь),
| МАКСИМУМ(ПользовательНаименование),
| МАКСИМУМ(НаследованиеРазрешено)
|ПО
| ТипОбъектов,
| Объект,
| Пользователь
|;
|
|
|ВЫБРАТЬ
| ВидыОграниченийПрав.Таблица КАК Таблица,
| ВидыОграниченийПрав.Право КАК Право,
| ВидыОграниченийПрав.ВидДоступа КАК ВидДоступа,
| ВидыОграниченийПрав.Представление КАК ПредставлениеВидаДоступа
|ПОМЕСТИТЬ ВидыОграниченийПрав
|ИЗ
| &ВидыОграниченийПрав КАК ВидыОграниченийПрав
|;
|
|
|ВЫБРАТЬ
| ГруппыДоступаПользователя.Профиль КАК Профиль,
| ГруппыДоступаПользователя.ГруппаДоступа КАК ГруппаДоступа,
| ЕСТЬNULL(ГруппыДоступаВидыДоступа.ВидДоступа, НЕОПРЕДЕЛЕНО) КАК ВидДоступа,
| ЕСТЬNULL(ГруппыДоступаВидыДоступа.ВсеРазрешены, ЛОЖЬ) КАК ВсеРазрешены,
| ЕСТЬNULL(ГруппыДоступаЗначенияДоступа.ЗначениеДоступа, НЕОПРЕДЕЛЕНО) КАК ЗначениеДоступа
|ПОМЕСТИТЬ ВидыИЗначенияДоступа
|ИЗ
| ГруппыДоступаПользователя КАК ГруппыДоступаПользователя
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.ВидыДоступа КАК ГруппыДоступаВидыДоступа
| ПО (ГруппыДоступаВидыДоступа.Ссылка = ГруппыДоступаПользователя.ГруппаДоступа)
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.ЗначенияДоступа КАК ГруппыДоступаЗначенияДоступа
| ПО (ГруппыДоступаЗначенияДоступа.Ссылка = ГруппыДоступаВидыДоступа.Ссылка)
| И (ГруппыДоступаЗначенияДоступа.ВидДоступа = ГруппыДоступаВидыДоступа.ВидДоступа)
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| ГруппыДоступаПользователя.Профиль,
| ГруппыДоступаПользователя.ГруппаДоступа,
| ПрофилиГруппДоступаВидыДоступа.ВидДоступа,
| ПрофилиГруппДоступаВидыДоступа.ВсеРазрешены,
| ЕСТЬNULL(ПрофилиГруппДоступаЗначенияДоступа.ЗначениеДоступа, НЕОПРЕДЕЛЕНО)
|ИЗ
| ГруппыДоступаПользователя КАК ГруппыДоступаПользователя
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.ВидыДоступа КАК ПрофилиГруппДоступаВидыДоступа
| ПО (ПрофилиГруппДоступаВидыДоступа.Ссылка = ГруппыДоступаПользователя.Профиль)
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.ЗначенияДоступа КАК ПрофилиГруппДоступаЗначенияДоступа
| ПО (ПрофилиГруппДоступаЗначенияДоступа.Ссылка = ПрофилиГруппДоступаВидыДоступа.Ссылка)
| И (ПрофилиГруппДоступаЗначенияДоступа.ВидДоступа = ПрофилиГруппДоступаВидыДоступа.ВидДоступа)
|ГДЕ
| ПрофилиГруппДоступаВидыДоступа.Предустановленный
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| ГруппыДоступаПользователя.Профиль,
| ГруппыДоступаПользователя.ГруппаДоступа,
| ВидыДоступаНастройкиПрав.ЗначениеПустойСсылки,
| ЛОЖЬ,
| НЕОПРЕДЕЛЕНО
|ИЗ
| ГруппыДоступаПользователя КАК ГруппыДоступаПользователя
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовМетаданных КАК ВидыДоступаНастройкиПрав
| ПО (ВидыДоступаНастройкиПрав.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав))
|;
|
|
|ВЫБРАТЬ
| ПраваРолейПрофилей.Таблица.Родитель.Имя КАК ВидОбъектов,
| ПраваРолейПрофилей.Таблица.Родитель.ПорядокКоллекции КАК ПорядокВидаОбъектов,
| ПраваРолейПрофилей.Таблица.ПолноеИмя КАК Таблица,
| ПраваРолейПрофилей.Таблица.Имя КАК Объект,
| ПраваРолейПрофилей.Таблица КАК ИдентификаторОбъектаМетаданных,
| ПраваРолейПрофилей.Профиль КАК Профиль,
| ПРЕДСТАВЛЕНИЕ(ПраваРолейПрофилей.Профиль) КАК ПредставлениеПрофиля,
| ПраваРолейПрофилей.Роль.Имя КАК Роль,
| ПраваРолейПрофилей.Роль.Синоним КАК ПредставлениеРоли,
| ПраваРолейПрофилей.ВидРолей КАК ВидРолей,
| ПраваРолейПрофилей.ПравоЧтениеБезОграничения КАК ПравоЧтениеБезОграничения,
| ПраваРолейПрофилей.ПравоПросмотр КАК ПравоПросмотр,
| ПраваРолейПрофилей.ГруппаДоступа КАК ГруппаДоступа,
| ПРЕДСТАВЛЕНИЕ(ПраваРолейПрофилей.ГруппаДоступа) КАК ПредставлениеГруппыДоступа,
| ПраваРолейПрофилей.ВидДоступа КАК ВидДоступа,
| ПраваРолейПрофилей.ПредставлениеВидаДоступа КАК ПредставлениеВидаДоступа,
| ПраваРолейПрофилей.ВсеРазрешены КАК ВсеРазрешены,
| ПраваРолейПрофилей.ЗначениеДоступа КАК ЗначениеДоступа,
| ПРЕДСТАВЛЕНИЕ(ПраваРолейПрофилей.ЗначениеДоступа) КАК ПредставлениеЗначенияДоступа
|ИЗ
| (ВЫБРАТЬ
| ПраваРолей.ОбъектМетаданных КАК Таблица,
| РолиПрофилей.Ссылка КАК Профиль,
| ВЫБОР
| КОГДА ПраваРолей.ПравоПросмотр
| И ПраваРолей.ПравоЧтениеБезОграничения
| ТОГДА 0
| КОГДА НЕ ПраваРолей.ПравоПросмотр
| И ПраваРолей.ПравоЧтениеБезОграничения
| ТОГДА 1
| КОГДА ПраваРолей.ПравоПросмотр
| И НЕ ПраваРолей.ПравоЧтениеБезОграничения
| ТОГДА 2
| ИНАЧЕ 3
| КОНЕЦ КАК ВидРолей,
| ПраваРолей.Роль КАК Роль,
| ПраваРолей.ПравоЧтениеБезОграничения КАК ПравоЧтениеБезОграничения,
| ПраваРолей.ПравоПросмотр КАК ПравоПросмотр,
| НЕОПРЕДЕЛЕНО КАК ГруппаДоступа,
| НЕОПРЕДЕЛЕНО КАК ВидДоступа,
| """" КАК ПредставлениеВидаДоступа,
| НЕОПРЕДЕЛЕНО КАК ВсеРазрешены,
| НЕОПРЕДЕЛЕНО КАК ЗначениеДоступа
| ИЗ
| ПраваРолей КАК ПраваРолей
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.Роли КАК РолиПрофилей
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПрофилиПользователя КАК ПрофилиПользователя
| ПО РолиПрофилей.Ссылка = ПрофилиПользователя.Профиль
| ПО ПраваРолей.Роль = РолиПрофилей.Роль
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ
| ПраваРолей.ОбъектМетаданных,
| ПрофилиПользователя.Профиль,
| 1000,
| """",
| ЛОЖЬ,
| ЛОЖЬ,
| ВидыИЗначенияДоступа.ГруппаДоступа,
| ЕСТЬNULL(ВидыОграниченийПрав.ВидДоступа, НЕОПРЕДЕЛЕНО),
| ЕСТЬNULL(ВидыОграниченийПрав.ПредставлениеВидаДоступа, """"),
| ВидыИЗначенияДоступа.ВсеРазрешены,
| ВидыИЗначенияДоступа.ЗначениеДоступа
| ИЗ
| ПраваРолей КАК ПраваРолей
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.Роли КАК РолиПрофилей
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПрофилиПользователя КАК ПрофилиПользователя
| ПО РолиПрофилей.Ссылка = ПрофилиПользователя.Профиль
| ПО ПраваРолей.Роль = РолиПрофилей.Роль
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВидыИЗначенияДоступа КАК ВидыИЗначенияДоступа
| ПО (ПрофилиПользователя.Профиль = ВидыИЗначенияДоступа.Профиль)
| ЛЕВОЕ СОЕДИНЕНИЕ ВидыОграниченийПрав КАК ВидыОграниченийПрав
| ПО (ВидыОграниченийПрав.Таблица = ПраваРолей.ОбъектМетаданных)
| И (ВидыОграниченийПрав.Право = ""Чтение"")
| И (ВидыОграниченийПрав.ВидДоступа = ВидыИЗначенияДоступа.ВидДоступа)
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ
| ПраваРолей.ОбъектМетаданных,
| ПрофилиПользователя.Профиль,
| 1000,
| """",
| ЛОЖЬ,
| ЛОЖЬ,
| ГруппыДоступаПользователя.ГруппаДоступа,
| ЕСТЬNULL(ВидыОграниченийПрав.ВидДоступа, НЕОПРЕДЕЛЕНО),
| ЕСТЬNULL(ВидыОграниченийПрав.ПредставлениеВидаДоступа, """"),
| НЕОПРЕДЕЛЕНО,
| НЕОПРЕДЕЛЕНО
| ИЗ
| ПраваРолей КАК ПраваРолей
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.Роли КАК РолиПрофилей
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПрофилиПользователя КАК ПрофилиПользователя
| ПО РолиПрофилей.Ссылка = ПрофилиПользователя.Профиль
| ПО ПраваРолей.Роль = РолиПрофилей.Роль
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ГруппыДоступаПользователя КАК ГруппыДоступаПользователя
| ПО (ГруппыДоступаПользователя.Профиль = ПрофилиПользователя.Профиль)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВидыОграниченийПрав КАК ВидыОграниченийПрав
| ПО (ВидыОграниченийПрав.Таблица = ПраваРолей.ОбъектМетаданных)
| И (ТИПЗНАЧЕНИЯ(ВидыОграниченийПрав.ВидДоступа) = ТИП(Перечисление.ДополнительныеЗначенияДоступа))
| И (ВидыОграниченийПрав.Право = ""Чтение"")) КАК ПраваРолейПрофилей
|ИТОГИ
| МАКСИМУМ(ПорядокВидаОбъектов),
| МАКСИМУМ(Таблица),
| МАКСИМУМ(ИдентификаторОбъектаМетаданных),
| МАКСИМУМ(ПредставлениеПрофиля),
| МАКСИМУМ(ПредставлениеРоли),
| МАКСИМУМ(ПравоЧтениеБезОграничения),
| МАКСИМУМ(ПравоПросмотр),
| МАКСИМУМ(ПредставлениеГруппыДоступа),
| МАКСИМУМ(ПредставлениеВидаДоступа),
| МАКСИМУМ(ВсеРазрешены)
|ПО
| ВидОбъектов,
| Объект,
| Профиль,
| ВидРолей,
| Роль,
| ГруппаДоступа,
| ВидДоступа
|;
|
|
|ВЫБРАТЬ
| ПраваРолейПрофилей.Таблица.Родитель.Имя КАК ВидОбъектов,
| ПраваРолейПрофилей.Таблица.Родитель.ПорядокКоллекции КАК ПорядокВидаОбъектов,
| ПраваРолейПрофилей.Таблица.ПолноеИмя КАК Таблица,
| ПраваРолейПрофилей.Таблица.Имя КАК Объект,
| ПраваРолейПрофилей.Таблица КАК ИдентификаторОбъектаМетаданных,
| ПраваРолейПрофилей.Профиль КАК Профиль,
| ПРЕДСТАВЛЕНИЕ(ПраваРолейПрофилей.Профиль) КАК ПредставлениеПрофиля,
| ПраваРолейПрофилей.Роль.Имя КАК Роль,
| ПраваРолейПрофилей.Роль.Синоним КАК ПредставлениеРоли,
| ПраваРолейПрофилей.ВидРолей КАК ВидРолей,
| ПраваРолейПрофилей.ПравоДобавление КАК ПравоДобавление,
| ПраваРолейПрофилей.ПравоИзменение КАК ПравоИзменение,
| ПраваРолейПрофилей.ПравоДобавлениеБезОграничения КАК ПравоДобавлениеБезОграничения,
| ПраваРолейПрофилей.ПравоИзменениеБезОграничения КАК ПравоИзменениеБезОграничения,
| ПраваРолейПрофилей.ПравоИнтерактивноеДобавление КАК ПравоИнтерактивноеДобавление,
| ПраваРолейПрофилей.ПравоРедактирование КАК ПравоРедактирование,
| ПраваРолейПрофилей.ГруппаДоступа КАК ГруппаДоступа,
| ПРЕДСТАВЛЕНИЕ(ПраваРолейПрофилей.ГруппаДоступа) КАК ПредставлениеГруппыДоступа,
| ПраваРолейПрофилей.ВидДоступа КАК ВидДоступа,
| ПраваРолейПрофилей.ПредставлениеВидаДоступа КАК ПредставлениеВидаДоступа,
| ПраваРолейПрофилей.ВсеРазрешены КАК ВсеРазрешены,
| ПраваРолейПрофилей.ЗначениеДоступа КАК ЗначениеДоступа,
| ПРЕДСТАВЛЕНИЕ(ПраваРолейПрофилей.ЗначениеДоступа) КАК ПредставлениеЗначенияДоступа
|ИЗ
| (ВЫБРАТЬ
| ПраваРолей.ОбъектМетаданных КАК Таблица,
| РолиПрофилей.Ссылка КАК Профиль,
| ВЫБОР
| КОГДА ПраваРолей.ПравоДобавлениеБезОграничения
| И ПраваРолей.ПравоИзменениеБезОграничения
| ТОГДА 0
| КОГДА НЕ ПраваРолей.ПравоДобавлениеБезОграничения
| И ПраваРолей.ПравоИзменениеБезОграничения
| ТОГДА 100
| КОГДА ПраваРолей.ПравоДобавлениеБезОграничения
| И НЕ ПраваРолей.ПравоИзменениеБезОграничения
| ТОГДА 200
| ИНАЧЕ 300
| КОНЕЦ + ВЫБОР
| КОГДА ПраваРолей.ПравоДобавление
| И ПраваРолей.ПравоИзменение
| ТОГДА 0
| КОГДА НЕ ПраваРолей.ПравоДобавление
| И ПраваРолей.ПравоИзменение
| ТОГДА 10
| КОГДА ПраваРолей.ПравоДобавление
| И НЕ ПраваРолей.ПравоИзменение
| ТОГДА 20
| ИНАЧЕ 30
| КОНЕЦ + ВЫБОР
| КОГДА ПраваРолей.ПравоИнтерактивноеДобавление
| И ПраваРолей.ПравоРедактирование
| ТОГДА 0
| КОГДА НЕ ПраваРолей.ПравоИнтерактивноеДобавление
| И ПраваРолей.ПравоРедактирование
| ТОГДА 1
| КОГДА ПраваРолей.ПравоИнтерактивноеДобавление
| И НЕ ПраваРолей.ПравоРедактирование
| ТОГДА 2
| ИНАЧЕ 3
| КОНЕЦ КАК ВидРолей,
| ПраваРолей.Роль КАК Роль,
| ПраваРолей.ПравоДобавление КАК ПравоДобавление,
| ПраваРолей.ПравоИзменение КАК ПравоИзменение,
| ПраваРолей.ПравоДобавлениеБезОграничения КАК ПравоДобавлениеБезОграничения,
| ПраваРолей.ПравоИзменениеБезОграничения КАК ПравоИзменениеБезОграничения,
| ПраваРолей.ПравоИнтерактивноеДобавление КАК ПравоИнтерактивноеДобавление,
| ПраваРолей.ПравоРедактирование КАК ПравоРедактирование,
| НЕОПРЕДЕЛЕНО КАК ГруппаДоступа,
| НЕОПРЕДЕЛЕНО КАК ВидДоступа,
| """" КАК ПредставлениеВидаДоступа,
| НЕОПРЕДЕЛЕНО КАК ВсеРазрешены,
| НЕОПРЕДЕЛЕНО КАК ЗначениеДоступа
| ИЗ
| ПраваРолей КАК ПраваРолей
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.Роли КАК РолиПрофилей
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПрофилиПользователя КАК ПрофилиПользователя
| ПО РолиПрофилей.Ссылка = ПрофилиПользователя.Профиль
| ПО ПраваРолей.Роль = РолиПрофилей.Роль
| И (ПраваРолей.ПравоДобавление
| ИЛИ ПраваРолей.ПравоИзменение)
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ
| ПраваРолей.ОбъектМетаданных,
| ПрофилиПользователя.Профиль,
| 1000,
| """",
| ЛОЖЬ,
| ЛОЖЬ,
| ЛОЖЬ,
| ЛОЖЬ,
| ЛОЖЬ,
| ЛОЖЬ,
| ВидыИЗначенияДоступа.ГруппаДоступа,
| ЕСТЬNULL(ВидыОграниченийПрав.ВидДоступа, НЕОПРЕДЕЛЕНО),
| ЕСТЬNULL(ВидыОграниченийПрав.ПредставлениеВидаДоступа, """"),
| ВидыИЗначенияДоступа.ВсеРазрешены,
| ВидыИЗначенияДоступа.ЗначениеДоступа
| ИЗ
| ПраваРолей КАК ПраваРолей
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.Роли КАК РолиПрофилей
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПрофилиПользователя КАК ПрофилиПользователя
| ПО РолиПрофилей.Ссылка = ПрофилиПользователя.Профиль
| ПО ПраваРолей.Роль = РолиПрофилей.Роль
| И (ПраваРолей.ПравоДобавление)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВидыИЗначенияДоступа КАК ВидыИЗначенияДоступа
| ПО (ПрофилиПользователя.Профиль = ВидыИЗначенияДоступа.Профиль)
| ЛЕВОЕ СОЕДИНЕНИЕ ВидыОграниченийПрав КАК ВидыОграниченийПрав
| ПО (ВидыОграниченийПрав.Таблица = ПраваРолей.ОбъектМетаданных)
| И (ВидыОграниченийПрав.Право = ""Изменение"")
| И (ВидыОграниченийПрав.ВидДоступа = ВидыИЗначенияДоступа.ВидДоступа)
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ
| ПраваРолей.ОбъектМетаданных,
| ПрофилиПользователя.Профиль,
| 1000,
| """",
| ЛОЖЬ,
| ЛОЖЬ,
| ЛОЖЬ,
| ЛОЖЬ,
| ЛОЖЬ,
| ЛОЖЬ,
| ВидыИЗначенияДоступа.ГруппаДоступа,
| ЕСТЬNULL(ВидыОграниченийПрав.ВидДоступа, НЕОПРЕДЕЛЕНО),
| ЕСТЬNULL(ВидыОграниченийПрав.ПредставлениеВидаДоступа, """"),
| ВидыИЗначенияДоступа.ВсеРазрешены,
| ВидыИЗначенияДоступа.ЗначениеДоступа
| ИЗ
| ПраваРолей КАК ПраваРолей
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.Роли КАК РолиПрофилей
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПрофилиПользователя КАК ПрофилиПользователя
| ПО РолиПрофилей.Ссылка = ПрофилиПользователя.Профиль
| ПО ПраваРолей.Роль = РолиПрофилей.Роль
| И (ПраваРолей.ПравоИзменение)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВидыИЗначенияДоступа КАК ВидыИЗначенияДоступа
| ПО (ПрофилиПользователя.Профиль = ВидыИЗначенияДоступа.Профиль)
| ЛЕВОЕ СОЕДИНЕНИЕ ВидыОграниченийПрав КАК ВидыОграниченийПрав
| ПО (ВидыОграниченийПрав.Таблица = ПраваРолей.ОбъектМетаданных)
| И (ВидыОграниченийПрав.Право = ""Изменение"")
| И (ВидыОграниченийПрав.ВидДоступа = ВидыИЗначенияДоступа.ВидДоступа)
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ
| ПраваРолей.ОбъектМетаданных,
| ПрофилиПользователя.Профиль,
| 1000,
| """",
| ЛОЖЬ,
| ЛОЖЬ,
| ЛОЖЬ,
| ЛОЖЬ,
| ЛОЖЬ,
| ЛОЖЬ,
| ГруппыДоступаПользователя.ГруппаДоступа,
| ЕСТЬNULL(ВидыОграниченийПрав.ВидДоступа, НЕОПРЕДЕЛЕНО),
| ЕСТЬNULL(ВидыОграниченийПрав.ПредставлениеВидаДоступа, """"),
| НЕОПРЕДЕЛЕНО,
| НЕОПРЕДЕЛЕНО
| ИЗ
| ПраваРолей КАК ПраваРолей
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.Роли КАК РолиПрофилей
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПрофилиПользователя КАК ПрофилиПользователя
| ПО РолиПрофилей.Ссылка = ПрофилиПользователя.Профиль
| ПО ПраваРолей.Роль = РолиПрофилей.Роль
| И (ПраваРолей.ПравоИзменение
| ИЛИ ПраваРолей.ПравоДобавление)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ГруппыДоступаПользователя КАК ГруппыДоступаПользователя
| ПО (ГруппыДоступаПользователя.Профиль = ПрофилиПользователя.Профиль)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВидыОграниченийПрав КАК ВидыОграниченийПрав
| ПО (ВидыОграниченийПрав.Таблица = ПраваРолей.ОбъектМетаданных)
| И (ТИПЗНАЧЕНИЯ(ВидыОграниченийПрав.ВидДоступа) = ТИП(Перечисление.ДополнительныеЗначенияДоступа))
| И (ВидыОграниченийПрав.Право = ""Изменение"")) КАК ПраваРолейПрофилей
|ИТОГИ
| МАКСИМУМ(ПорядокВидаОбъектов),
| МАКСИМУМ(Таблица),
| МАКСИМУМ(ИдентификаторОбъектаМетаданных),
| МАКСИМУМ(ПредставлениеПрофиля),
| МАКСИМУМ(ПредставлениеРоли),
| МАКСИМУМ(ПравоДобавление),
| МАКСИМУМ(ПравоИзменение),
| МАКСИМУМ(ПравоДобавлениеБезОграничения),
| МАКСИМУМ(ПравоИзменениеБезОграничения),
| МАКСИМУМ(ПравоИнтерактивноеДобавление),
| МАКСИМУМ(ПравоРедактирование),
| МАКСИМУМ(ПредставлениеГруппыДоступа),
| МАКСИМУМ(ПредставлениеВидаДоступа),
| МАКСИМУМ(ВсеРазрешены)
|ПО
| ВидОбъектов,
| Объект,
| Профиль,
| ВидРолей,
| Роль,
| ГруппаДоступа,
| ВидДоступа
|;
|
|
|ВЫБРАТЬ
| ВидыИЗначенияДоступа.Профиль КАК Профиль,
| ВидыИЗначенияДоступа.ГруппаДоступа КАК ГруппаДоступа,
| ВидыИЗначенияДоступа.ВидДоступа КАК ВидДоступа,
| ВидыИЗначенияДоступа.ВсеРазрешены КАК ВсеРазрешены,
| ВидыИЗначенияДоступа.ЗначениеДоступа КАК ЗначениеДоступа
|ИЗ
| ВидыИЗначенияДоступа КАК ВидыИЗначенияДоступа";
Возврат Запрос.ВыполнитьПакет();
КонецФункции
Процедура ВывестиДоступныеДляПросмотра(Знач ВозможныеПрава, Знач Макет, Знач РезультатЗапроса, Знач УпрощенныйИнтерфейс)
ОбластьОтступ = Макет.ПолучитьОбласть("Отступ");
ПраваОбъектов = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
ЗаполнитьПредставленияОбъектов(ПраваОбъектов);
ПраваОбъектов.Строки.Сортировать(
"ПорядокВидаОбъектов Возр,
|ПредставлениеОбъекта Возр,
|ПредставлениеПрофиля Возр,
|ВидРолей Возр,
|ПредставлениеРоли Возр,
|ПредставлениеГруппыДоступа Возр,
|ПредставлениеВидаДоступа Возр,
|ПредставлениеЗначенияДоступа Возр",
Истина);
Область = Макет.ПолучитьОбласть("ПраваОбъектовГруппировка");
Область.Параметры.ПредставлениеГруппировкиПравОбъектов = НСтр("ru = 'Просмотр объектов'");
Документ.Вывести(Область, 1);
Область = Макет.ПолучитьОбласть("ПросмотрОбъектовЛегенда");
Документ.Вывести(Область, 2);
ВладельцыНастроекПрав = ВозможныеПрава.ПоТипамСсылок;
Для Каждого ОписаниеВидаОбъектов Из ПраваОбъектов.Строки Цикл
Область = Макет.ПолучитьОбласть("ПраваОбъектовТаблицаЗаголовок");
Если УпрощенныйИнтерфейс Тогда
Область.Параметры.ПредставлениеПрофилиИлиГруппыДоступа = НСтр("ru = 'Профили'");
Иначе
Область.Параметры.ПредставлениеПрофилиИлиГруппыДоступа = НСтр("ru = 'Группы доступа'");
КонецЕсли;
Область.Параметры.Заполнить(ОписаниеВидаОбъектов);
Документ.Вывести(Область, 2);
Область = Макет.ПолучитьОбласть("ПраваОбъектовТаблицаЗаголовокДоп");
Если ПодробныеСведенияОПравахДоступа Тогда
Область.Параметры.ПредставлениеПрофилиИлиГруппыДоступа = НСтр("ru = '(профиль, роли)'");
Иначе
Область.Параметры.ПредставлениеПрофилиИлиГруппыДоступа = "";
КонецЕсли;
Область.Параметры.Заполнить(ОписаниеВидаОбъектов);
Документ.Вывести(Область, 3);
Для Каждого ОписаниеОбъекта Из ОписаниеВидаОбъектов.Строки Цикл
НачальнаяСтрокаОбластиОбъекта = Неопределено;
КонечнаяСтрокаОбластиОбъекта = Неопределено;
Область = Макет.ПолучитьОбласть("ПраваОбъектовТаблицаСтрока");
Область.Параметры.ОткрытьФормуСписка = "ОткрытьФормуСписка: " + ОписаниеОбъекта.Таблица;
Если ОписаниеОбъекта.ПравоЧтениеБезОграничения Тогда
Если ОписаниеОбъекта.ПравоПросмотр Тогда
УточнениеПредставленияОбъекта = НСтр("ru = '(просмотр, не ограничен)'");
Иначе
УточнениеПредставленияОбъекта = НСтр("ru = '(просмотр*, не ограничен)'");
КонецЕсли;
Иначе
Если ОписаниеОбъекта.ПравоПросмотр Тогда
УточнениеПредставленияОбъекта = НСтр("ru = '(просмотр, ограничен)'");
Иначе
УточнениеПредставленияОбъекта = НСтр("ru = '(просмотр*, ограничен)'");
КонецЕсли;
КонецЕсли;
Область.Параметры.ПредставлениеОбъекта = ОписаниеОбъекта.ПредставлениеОбъекта + Символы.ПС
+ УточнениеПредставленияОбъекта;
Для Каждого ОписаниеПрофиля Из ОписаниеОбъекта.Строки Цикл
ПредставлениеРолейПрофиля = "";
КоличествоРолей = 0;
ВсеРолиСОграничением = Истина;
Для Каждого ОписаниеВидаРолей Из ОписаниеПрофиля.Строки Цикл
Если ОписаниеВидаРолей.ВидРолей < 1000 Тогда
Для Каждого ОписаниеРоли Из ОписаниеВидаРолей.Строки Цикл
Если ОписаниеВидаРолей.ПравоЧтениеБезОграничения Тогда
ВсеРолиСОграничением = Ложь;
КонецЕсли;
Если Не ПодробныеСведенияОПравахДоступа Тогда
Продолжить;
КонецЕсли;
Если ОписаниеВидаРолей.Строки.Количество() > 1
И ОписаниеВидаРолей.Строки.Индекс(ОписаниеРоли) < ОписаниеВидаРолей.Строки.Количество() - 1 Тогда
ПредставлениеРолейПрофиля = ПредставлениеРолейПрофиля + ОписаниеРоли.ПредставлениеРоли + ",";
КоличествоРолей = КоличествоРолей + 1;
КонецЕсли;
Если ОписаниеВидаРолей.Строки.Индекс(ОписаниеРоли) = ОписаниеВидаРолей.Строки.Количество() - 1 Тогда
ПредставлениеРолейПрофиля = ПредставлениеРолейПрофиля + ОписаниеРоли.ПредставлениеРоли + ",";
КоличествоРолей = КоличествоРолей + 1;
КонецЕсли;
ПредставлениеРолейПрофиля = ПредставлениеРолейПрофиля + Символы.ПС;
КонецЦикла;
ИначеЕсли ОписаниеВидаРолей.Строки[0].Строки.Количество() > 0 Тогда
Для Каждого ОписаниеГруппыДоступа Из ОписаниеВидаРолей.Строки[0].Строки Цикл
Индекс = ОписаниеГруппыДоступа.Строки.Количество() - 1;
Пока Индекс >= 0 Цикл
Если ОписаниеГруппыДоступа.Строки[Индекс].ВидДоступа = Неопределено Тогда
ОписаниеГруппыДоступа.Строки.Удалить(Индекс);
КонецЕсли;
Индекс = Индекс - 1;
КонецЦикла;
НачальнаяСтрокаОбластиГруппыДоступа = Неопределено;
Если Область = Неопределено Тогда
Область = Макет.ПолучитьОбласть("ПраваОбъектовТаблицаСтрока");
КонецЕсли;
Если УпрощенныйИнтерфейс Тогда
Область.Параметры.ПрофильИлиГруппаДоступа = ОписаниеПрофиля.ГруппаДоступа;
Область.Параметры.ПредставлениеПрофиляИлиГруппыДоступа =
ОписаниеПрофиля.ПредставлениеГруппыДоступа;
Иначе
Область.Параметры.ПрофильИлиГруппаДоступа = ОписаниеГруппыДоступа.ГруппаДоступа;
Если ПодробныеСведенияОПравахДоступа Тогда
ПредставлениеРолейПрофиля = СокрЛП(ПредставлениеРолейПрофиля);
Если ЗначениеЗаполнено(ПредставлениеРолейПрофиля)
И СтрЗаканчиваетсяНа(ПредставлениеРолейПрофиля, ",") Тогда
ПредставлениеРолейПрофиля = Лев(ПредставлениеРолейПрофиля, СтрДлина(ПредставлениеРолейПрофиля) - 1);
КонецЕсли;
Если КоличествоРолей > 1 Тогда
УточнениеПредставленияГруппыДоступа = НСтр("ru = '(профиль: %1, роли:
|%2)'")
Иначе
УточнениеПредставленияГруппыДоступа = НСтр("ru = '(профиль: %1, роль:
|%2)'")
КонецЕсли;
Область.Параметры.ПредставлениеПрофиляИлиГруппыДоступа =
ОписаниеГруппыДоступа.ПредставлениеГруппыДоступа + Символы.ПС
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(УточнениеПредставленияГруппыДоступа,
ОписаниеПрофиля.ПредставлениеПрофиля,
СокрЛП(ПредставлениеРолейПрофиля));
Иначе
Область.Параметры.ПредставлениеПрофиляИлиГруппыДоступа =
ОписаниеГруппыДоступа.ПредставлениеГруппыДоступа;
КонецЕсли;
КонецЕсли;
Если ВсеРолиСОграничением Тогда
Если ПолучитьФункциональнуюОпцию("ОграничиватьДоступНаУровнеЗаписей") Тогда
Для Каждого ОписаниеВидаДоступа Из ОписаниеГруппыДоступа.Строки Цикл
Индекс = ОписаниеВидаДоступа.Строки.Количество()-1;
Пока Индекс >= 0 Цикл
Если ОписаниеВидаДоступа.Строки[Индекс].ЗначениеДоступа = Неопределено Тогда
ОписаниеВидаДоступа.Строки.Удалить(Индекс);
КонецЕсли;
Индекс = Индекс - 1;
КонецЦикла;
Если Область = Неопределено Тогда
Область = Макет.ПолучитьОбласть("ПраваОбъектовТаблицаСтрока");
КонецЕсли;
Область.Параметры.ВидДоступа = ОписаниеВидаДоступа.ВидДоступа;
Область.Параметры.ПредставлениеВидаДоступа = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонПредставленияВидаДоступа(
ОписаниеВидаДоступа, ВладельцыНастроекПрав),
ОписаниеВидаДоступа.ПредставлениеВидаДоступа);
ВывестиОбласть(Документ, Область, 3,
НачальнаяСтрокаОбластиОбъекта,
КонечнаяСтрокаОбластиОбъекта,
НачальнаяСтрокаОбластиГруппыДоступа);
Для Каждого ОписаниеЗначенияДоступа Из ОписаниеВидаДоступа.Строки Цикл
Область = Макет.ПолучитьОбласть("ПраваОбъектовТаблицаСтрокаЗначенияДоступа");
Область.Параметры.ПредставлениеЗначенияДоступа = ОписаниеЗначенияДоступа.ПредставлениеЗначенияДоступа;
Область.Параметры.ЗначениеДоступа = ОписаниеЗначенияДоступа.ЗначениеДоступа;
ВывестиОбласть(Документ, Область, 3,
НачальнаяСтрокаОбластиОбъекта,
КонечнаяСтрокаОбластиОбъекта,
НачальнаяСтрокаОбластиГруппыДоступа);
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Если Область <> Неопределено Тогда
ВывестиОбласть(Документ, Область, 3,
НачальнаяСтрокаОбластиОбъекта,
КонечнаяСтрокаОбластиОбъекта,
НачальнаяСтрокаОбластиГруппыДоступа);
КонецЕсли;
УстановитьГраницыВидовИЗначенийДоступа(Документ, НачальнаяСтрокаОбластиГруппыДоступа,
КонечнаяСтрокаОбластиОбъекта);
ОбъединитьЯчейкиУстановитьГраницы(Документ,
НачальнаяСтрокаОбластиГруппыДоступа,
КонечнаяСтрокаОбластиОбъекта,
3);
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
ОбъединитьЯчейкиУстановитьГраницы(Документ, НачальнаяСтрокаОбластиОбъекта, КонечнаяСтрокаОбластиОбъекта, 2);
КонецЦикла;
Документ.Вывести(ОбластьОтступ, 3);
Документ.Вывести(ОбластьОтступ, 3);
Документ.Вывести(ОбластьОтступ, 3);
Документ.Вывести(ОбластьОтступ, 3);
КонецЦикла;
Документ.Вывести(ОбластьОтступ, 2);
Документ.Вывести(ОбластьОтступ, 2);
КонецПроцедуры
Процедура ВывестиДоступныеДляРедактирования(Знач ВозможныеПрава, Знач Макет, Знач РезультатЗапроса,
Знач УпрощенныйИнтерфейс)
ОбластьОтступ = Макет.ПолучитьОбласть("Отступ");
ПраваОбъектов = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
ЗаполнитьПредставленияОбъектов(ПраваОбъектов);
ПраваОбъектов.Строки.Сортировать(
"ПорядокВидаОбъектов Возр,
|ПредставлениеОбъекта Возр,
|ПредставлениеПрофиля Возр,
|ВидРолей Возр,
|ПредставлениеРоли Возр,
|ПредставлениеГруппыДоступа Возр,
|ПредставлениеВидаДоступа Возр,
|ПредставлениеЗначенияДоступа Возр", Истина);
Область = Макет.ПолучитьОбласть("ПраваОбъектовГруппировка");
Область.Параметры.ПредставлениеГруппировкиПравОбъектов = НСтр("ru = 'Редактирование объектов'");
Документ.Вывести(Область, 1);
Область = Макет.ПолучитьОбласть("РедактированиеОбъектовЛегенда");
Документ.Вывести(Область, 2);
Для Каждого ОписаниеВидаОбъектов Из ПраваОбъектов.Строки Цикл
Область = Макет.ПолучитьОбласть("ПраваОбъектовТаблицаЗаголовок");
Если УпрощенныйИнтерфейс Тогда
Область.Параметры.ПредставлениеПрофилиИлиГруппыДоступа = НСтр("ru = 'Профили'");
Иначе
Область.Параметры.ПредставлениеПрофилиИлиГруппыДоступа = НСтр("ru = 'Группы доступа'");
КонецЕсли;
Область.Параметры.Заполнить(ОписаниеВидаОбъектов);
Документ.Вывести(Область, 2);
Область = Макет.ПолучитьОбласть("ПраваОбъектовТаблицаЗаголовокДоп");
Если ПодробныеСведенияОПравахДоступа Тогда
Область.Параметры.ПредставлениеПрофилиИлиГруппыДоступа = НСтр("ru = '(профиль, роли)'");
Иначе
Область.Параметры.ПредставлениеПрофилиИлиГруппыДоступа = "";
КонецЕсли;
Область.Параметры.Заполнить(ОписаниеВидаОбъектов);
Документ.Вывести(Область, 3);
ДобавлениеИспользуется = Не СтандартныеПодсистемыСервер.ЭтоТаблицаРегистра(ОписаниеВидаОбъектов.Таблица);
Для Каждого ОписаниеОбъекта Из ОписаниеВидаОбъектов.Строки Цикл
НачальнаяСтрокаОбластиОбъекта = Неопределено;
КонечнаяСтрокаОбластиОбъекта = Неопределено;
Область = Макет.ПолучитьОбласть("ПраваОбъектовТаблицаСтрока");
Область.Параметры.ОткрытьФормуСписка = "ОткрытьФормуСписка: " + ОписаниеОбъекта.Таблица;
Если ДобавлениеИспользуется Тогда
Если ОписаниеОбъекта.ПравоДобавление И ОписаниеОбъекта.ПравоИзменение Тогда
Если ОписаниеОбъекта.ПравоДобавлениеБезОграничения И ОписаниеОбъекта.ПравоИзменениеБезОграничения Тогда
Если ОписаниеОбъекта.ПравоИнтерактивноеДобавление И ОписаниеОбъекта.ПравоРедактирование Тогда
УточнениеПредставленияОбъекта = НСтр("ru = '(добавление, не ограничено
|изменение, не ограничено)'");
ИначеЕсли Не ОписаниеОбъекта.ПравоИнтерактивноеДобавление И ОписаниеОбъекта.ПравоРедактирование Тогда
УточнениеПредставленияОбъекта = НСтр("ru = '(добавление*, не ограничено
|изменение, не ограничено)'");
ИначеЕсли ОписаниеОбъекта.ПравоИнтерактивноеДобавление И Не ОписаниеОбъекта.ПравоРедактирование Тогда
УточнениеПредставленияОбъекта = НСтр("ru = '(добавление, не ограничено
|изменение*, не ограничено)'");
Иначе
УточнениеПредставленияОбъекта = НСтр("ru = '(добавление*, не ограничено
|изменение*, не ограничено)'");
КонецЕсли;
ИначеЕсли Не ОписаниеОбъекта.ПравоДобавлениеБезОграничения
И ОписаниеОбъекта.ПравоИзменениеБезОграничения Тогда
Если ОписаниеОбъекта.ПравоИнтерактивноеДобавление И ОписаниеОбъекта.ПравоРедактирование Тогда
УточнениеПредставленияОбъекта = НСтр("ru = '(добавление, ограничено
|изменение, не ограничено)'");
ИначеЕсли Не ОписаниеОбъекта.ПравоИнтерактивноеДобавление И ОписаниеОбъекта.ПравоРедактирование Тогда
УточнениеПредставленияОбъекта = НСтр("ru = '(добавление*, ограничено
|изменение, не ограничено)'");
ИначеЕсли ОписаниеОбъекта.ПравоИнтерактивноеДобавление И Не ОписаниеОбъекта.ПравоРедактирование Тогда
УточнениеПредставленияОбъекта = НСтр("ru = '(добавление, ограничено
|изменение*, не ограничено)'");
Иначе
УточнениеПредставленияОбъекта = НСтр("ru = '(добавление*, ограничено
|изменение*, не ограничено)'");
КонецЕсли;
ИначеЕсли ОписаниеОбъекта.ПравоДобавлениеБезОграничения И Не ОписаниеОбъекта.ПравоИзменениеБезОграничения Тогда
Если ОписаниеОбъекта.ПравоИнтерактивноеДобавление И ОписаниеОбъекта.ПравоРедактирование Тогда
УточнениеПредставленияОбъекта = НСтр("ru = '(добавление, не ограничено
|изменение, ограничено)'");
ИначеЕсли Не ОписаниеОбъекта.ПравоИнтерактивноеДобавление И ОписаниеОбъекта.ПравоРедактирование Тогда
УточнениеПредставленияОбъекта = НСтр("ru = '(добавление*, не ограничено
|изменение, ограничено)'");
ИначеЕсли ОписаниеОбъекта.ПравоИнтерактивноеДобавление И Не ОписаниеОбъекта.ПравоРедактирование Тогда
УточнениеПредставленияОбъекта = НСтр("ru = '(добавление, не ограничено
|изменение*, ограничено)'");
Иначе
УточнениеПредставленияОбъекта = НСтр("ru = '(добавление*, не ограничено
|изменение*, ограничено)'");
КонецЕсли;
Иначе
Если ОписаниеОбъекта.ПравоИнтерактивноеДобавление И ОписаниеОбъекта.ПравоРедактирование Тогда
УточнениеПредставленияОбъекта = НСтр("ru = '(добавление, ограничено
|изменение, ограничено)'");
ИначеЕсли Не ОписаниеОбъекта.ПравоИнтерактивноеДобавление И ОписаниеОбъекта.ПравоРедактирование Тогда
УточнениеПредставленияОбъекта = НСтр("ru = '(добавление*, ограничено
|изменение, ограничено)'");
ИначеЕсли ОписаниеОбъекта.ПравоИнтерактивноеДобавление И Не ОписаниеОбъекта.ПравоРедактирование Тогда
УточнениеПредставленияОбъекта = НСтр("ru = '(добавление, ограничено
|изменение*, ограничено)'");
Иначе
УточнениеПредставленияОбъекта = НСтр("ru = '(добавление*, ограничено
|изменение*, ограничено)'");
КонецЕсли;
КонецЕсли;
ИначеЕсли Не ОписаниеОбъекта.ПравоДобавление И ОписаниеОбъекта.ПравоИзменение Тогда
Если ОписаниеОбъекта.ПравоИзменениеБезОграничения Тогда
Если ОписаниеОбъекта.ПравоРедактирование Тогда
УточнениеПредставленияОбъекта = НСтр("ru = '(добавление не доступно
|изменение, не ограничено)'");
Иначе
УточнениеПредставленияОбъекта = НСтр("ru = '(добавление не доступно
|изменение*, не ограничено)'");
КонецЕсли;
Иначе
Если ОписаниеОбъекта.ПравоРедактирование Тогда
УточнениеПредставленияОбъекта = НСтр("ru = '(добавление не доступно
|изменение, ограничено)'");
Иначе
УточнениеПредставленияОбъекта = НСтр("ru = '(добавление не доступно
|изменение*, ограничено)'");
КонецЕсли;
КонецЕсли;
Иначе
УточнениеПредставленияОбъекта = НСтр("ru = '(добавление не доступно
|изменение не доступно)'");
КонецЕсли;
Иначе
Если ОписаниеОбъекта.ПравоИзменение Тогда
Если ОписаниеОбъекта.ПравоИзменениеБезОграничения Тогда
Если ОписаниеОбъекта.ПравоРедактирование Тогда
УточнениеПредставленияОбъекта = НСтр("ru = '(изменение, не ограничено)'");
Иначе
УточнениеПредставленияОбъекта = НСтр("ru = '(изменение*, не ограничено)'");
КонецЕсли;
Иначе
Если ОписаниеОбъекта.ПравоРедактирование Тогда
УточнениеПредставленияОбъекта = НСтр("ru = '(изменение, ограничено)'");
Иначе
УточнениеПредставленияОбъекта = НСтр("ru = '(изменение*, ограничено)'");
КонецЕсли;
КонецЕсли;
Иначе
УточнениеПредставленияОбъекта = НСтр("ru = '(изменение не доступно)'");
КонецЕсли;
КонецЕсли;
Область.Параметры.ПредставлениеОбъекта = ОписаниеОбъекта.ПредставлениеОбъекта + Символы.ПС
+ УточнениеПредставленияОбъекта;
Для Каждого ОписаниеПрофиля Из ОписаниеОбъекта.Строки Цикл
ПредставлениеРолейПрофиля = "";
КоличествоРолей = 0;
ВсеРолиСОграничением = Истина;
Для Каждого ОписаниеВидаРолей Из ОписаниеПрофиля.Строки Цикл
Если ОписаниеВидаРолей.ВидРолей < 1000 Тогда
Для Каждого ОписаниеРоли Из ОписаниеВидаРолей.Строки Цикл
Если ОписаниеВидаРолей.ПравоДобавлениеБезОграничения И ОписаниеВидаРолей.ПравоИзменениеБезОграничения Тогда
ВсеРолиСОграничением = Ложь;
КонецЕсли;
Если Не ПодробныеСведенияОПравахДоступа Тогда
Продолжить;
КонецЕсли;
Если ОписаниеВидаРолей.Строки.Количество() > 1
И ОписаниеВидаРолей.Строки.Индекс(ОписаниеРоли) < ОписаниеВидаРолей.Строки.Количество() - 1 Тогда
ПредставлениеРолейПрофиля = ПредставлениеРолейПрофиля + ОписаниеРоли.ПредставлениеРоли + ",";
КоличествоРолей = КоличествоРолей + 1;
КонецЕсли;
Если ОписаниеВидаРолей.Строки.Индекс(ОписаниеРоли) = ОписаниеВидаРолей.Строки.Количество() - 1 Тогда
ПредставлениеРолейПрофиля = ПредставлениеРолейПрофиля + ОписаниеРоли.ПредставлениеРоли + ",";
КоличествоРолей = КоличествоРолей + 1;
КонецЕсли;
ПредставлениеРолейПрофиля = ПредставлениеРолейПрофиля + Символы.ПС;
КонецЦикла;
ИначеЕсли ОписаниеВидаРолей.Строки[0].Строки.Количество() > 0 Тогда
Для Каждого ОписаниеГруппыДоступа Из ОписаниеВидаРолей.Строки[0].Строки Цикл
Индекс = ОписаниеГруппыДоступа.Строки.Количество() - 1;
Пока Индекс >= 0 Цикл
Если ОписаниеГруппыДоступа.Строки[Индекс].ВидДоступа = Неопределено Тогда
ОписаниеГруппыДоступа.Строки.Удалить(Индекс);
КонецЕсли;
Индекс = Индекс - 1;
КонецЦикла;
НачальнаяСтрокаОбластиГруппыДоступа = Неопределено;
Если Область = Неопределено Тогда
Область = Макет.ПолучитьОбласть("ПраваОбъектовТаблицаСтрока");
КонецЕсли;
Если УпрощенныйИнтерфейс Тогда
Область.Параметры.ПрофильИлиГруппаДоступа = ОписаниеПрофиля.ГруппаДоступа;
Область.Параметры.ПредставлениеПрофиляИлиГруппыДоступа = ОписаниеПрофиля.ПредставлениеГруппыДоступа;
Иначе
Область.Параметры.ПрофильИлиГруппаДоступа = ОписаниеГруппыДоступа.ГруппаДоступа;
Если ПодробныеСведенияОПравахДоступа Тогда
ПредставлениеРолейПрофиля = СокрЛП(ПредставлениеРолейПрофиля);
Если ЗначениеЗаполнено(ПредставлениеРолейПрофиля)
И СтрЗаканчиваетсяНа(ПредставлениеРолейПрофиля, ",") Тогда
ПредставлениеРолейПрофиля = Лев(ПредставлениеРолейПрофиля, СтрДлина(ПредставлениеРолейПрофиля) - 1);
КонецЕсли;
Если КоличествоРолей > 1 Тогда
УточнениеПредставленияГруппыДоступа = НСтр("ru = '(профиль: %1, роли:
|%2)'");
Иначе
УточнениеПредставленияГруппыДоступа = НСтр("ru = '(профиль: %1, роль:
|%2)'");
КонецЕсли;
Область.Параметры.ПредставлениеПрофиляИлиГруппыДоступа = ОписаниеГруппыДоступа.ПредставлениеГруппыДоступа
+ Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
УточнениеПредставленияГруппыДоступа, ОписаниеПрофиля.ПредставлениеПрофиля,
СокрЛП(ПредставлениеРолейПрофиля));
Иначе
Область.Параметры.ПредставлениеПрофиляИлиГруппыДоступа = ОписаниеГруппыДоступа.ПредставлениеГруппыДоступа;
КонецЕсли;
КонецЕсли;
Если ВсеРолиСОграничением Тогда
Если ПолучитьФункциональнуюОпцию("ОграничиватьДоступНаУровнеЗаписей") Тогда
Для Каждого ОписаниеВидаДоступа Из ОписаниеГруппыДоступа.Строки Цикл
Индекс = ОписаниеВидаДоступа.Строки.Количество() - 1;
Пока Индекс >= 0 Цикл
Если ОписаниеВидаДоступа.Строки[Индекс].ЗначениеДоступа = Неопределено Тогда
ОписаниеВидаДоступа.Строки.Удалить(Индекс);
КонецЕсли;
Индекс = Индекс - 1;
КонецЦикла;
Если Область = Неопределено Тогда
Область = Макет.ПолучитьОбласть("ПраваОбъектовТаблицаСтрока");
КонецЕсли;
Область.Параметры.ВидДоступа = ОписаниеВидаДоступа.ВидДоступа;
Область.Параметры.ПредставлениеВидаДоступа = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонПредставленияВидаДоступа(ОписаниеВидаДоступа,
ВозможныеПрава.ПоТипамСсылок), ОписаниеВидаДоступа.ПредставлениеВидаДоступа);
ВывестиОбласть(Документ, Область, 3, НачальнаяСтрокаОбластиОбъекта,
КонечнаяСтрокаОбластиОбъекта, НачальнаяСтрокаОбластиГруппыДоступа);
Для Каждого ОписаниеЗначенияДоступа Из ОписаниеВидаДоступа.Строки Цикл
Область = Макет.ПолучитьОбласть("ПраваОбъектовТаблицаСтрокаЗначенияДоступа");
Область.Параметры.ПредставлениеЗначенияДоступа = ОписаниеЗначенияДоступа.ПредставлениеЗначенияДоступа;
Область.Параметры.ЗначениеДоступа = ОписаниеЗначенияДоступа.ЗначениеДоступа;
ВывестиОбласть(Документ, Область, 3, НачальнаяСтрокаОбластиОбъекта,
КонечнаяСтрокаОбластиОбъекта, НачальнаяСтрокаОбластиГруппыДоступа);
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Если Область <> Неопределено Тогда
ВывестиОбласть(Документ, Область, 3, НачальнаяСтрокаОбластиОбъекта, КонечнаяСтрокаОбластиОбъекта,
НачальнаяСтрокаОбластиГруппыДоступа);
КонецЕсли;
УстановитьГраницыВидовИЗначенийДоступа(Документ, НачальнаяСтрокаОбластиГруппыДоступа,
КонечнаяСтрокаОбластиОбъекта);
ОбъединитьЯчейкиУстановитьГраницы(Документ, НачальнаяСтрокаОбластиГруппыДоступа,
КонечнаяСтрокаОбластиОбъекта, 3);
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
ОбъединитьЯчейкиУстановитьГраницы(Документ, НачальнаяСтрокаОбластиОбъекта, КонечнаяСтрокаОбластиОбъекта, 2);
КонецЦикла;
Документ.Вывести(ОбластьОтступ, 3);
Документ.Вывести(ОбластьОтступ, 3);
Документ.Вывести(ОбластьОтступ, 3);
Документ.Вывести(ОбластьОтступ, 3);
КонецЦикла;
Документ.Вывести(ОбластьОтступ, 2);
Документ.Вывести(ОбластьОтступ, 2);
КонецПроцедуры
Процедура ЗаполнитьПредставленияОбъектов(ПраваОбъектов)
ПраваОбъектов.Колонки.Добавить("ПредставлениеВидаОбъектов", Новый ОписаниеТипов("Строка"));
ПраваОбъектов.Колонки.Добавить("ПредставлениеОбъекта", Новый ОписаниеТипов("Строка"));
ИдентификаторыВидаМетаданных = ПраваОбъектов.Строки.ВыгрузитьКолонку("ИдентификаторОбъектаМетаданных");
ВидыОбъектовМетаданных = ОбщегоНазначения.ОбъектыМетаданныхПоИдентификаторам(ИдентификаторыВидаМетаданных, Ложь);
КоллекцииОбъектовМетаданных = СтандартныеПодсистемыПовтИсп.СвойстваКоллекцийОбъектовМетаданных();
Для каждого ОписаниеВидаОбъектов Из ПраваОбъектов.Строки Цикл
ОбъектМетаданных = ВидыОбъектовМетаданных[ОписаниеВидаОбъектов.ИдентификаторОбъектаМетаданных];
Если ОбъектМетаданных <> Неопределено Тогда
ИмяБазовогоТипа = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(ОбъектМетаданных);
Если ИмяБазовогоТипа <> "" Тогда
СвойстваКоллекции = КоллекцииОбъектовМетаданных.Найти(ИмяБазовогоТипа, "Имя");
Если СвойстваКоллекции <> Неопределено Тогда
ОписаниеВидаОбъектов.ПредставлениеВидаОбъектов = СвойстваКоллекции.Синоним;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(ОписаниеВидаОбъектов.ПредставлениеВидаОбъектов) Тогда
ОписаниеВидаОбъектов.ПредставлениеВидаОбъектов = ОписаниеВидаОбъектов.ВидОбъектов;
КонецЕсли;
ИдентификаторыОбъектовМетаданных = ОписаниеВидаОбъектов.Строки.ВыгрузитьКолонку("ИдентификаторОбъектаМетаданных");
ОбъектыМетаданных = ОбщегоНазначения.ОбъектыМетаданныхПоИдентификаторам(ИдентификаторыОбъектовМетаданных, Ложь);
Для Каждого ОписаниеОбъекта Из ОписаниеВидаОбъектов.Строки Цикл
ОбъектМетаданных = ОбъектыМетаданных[ОписаниеОбъекта.ИдентификаторОбъектаМетаданных];
Если ОбъектМетаданных <> Неопределено Тогда
ОписаниеОбъекта.ПредставлениеОбъекта = ОбъектМетаданных.Синоним;
Иначе
ОписаниеОбъекта.ПредставлениеОбъекта = НСтр("ru = 'не существует'") + " " + ОписаниеОбъекта.Таблица;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Процедура ВывестиПраваНаОтдельныеОбъекты(Знач ВозможныеПрава, Знач Макет, Знач РезультатЗапроса, Знач ВыводПравГруппы)
ОбластьОтступ = Макет.ПолучитьОбласть("Отступ");
НастройкиПрав = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
НастройкиПрав.Колонки.Добавить("ТипОбъектовПолноеИмя");
НастройкиПрав.Колонки.Добавить("ПредставлениеВидаОбъектов");
НастройкиПрав.Колонки.Добавить("ПолноеНаименование");
Для Каждого ОписаниеТипаОбъектов Из НастройкиПрав.Строки Цикл
МетаданныеТипа = Метаданные.НайтиПоТипу(ОписаниеТипаОбъектов.ТипОбъектов);
ОписаниеТипаОбъектов.ТипОбъектовПолноеИмя = МетаданныеТипа.ПолноеИмя();
ОписаниеТипаОбъектов.ПредставлениеВидаОбъектов = МетаданныеТипа.Представление();
КонецЦикла;
НастройкиПрав.Строки.Сортировать("ПредставлениеВидаОбъектов Возр");
Для Каждого ОписаниеТипаОбъектов Из НастройкиПрав.Строки Цикл
ОписаниеПрав = ВозможныеПрава.ПоТипамСсылок.Получить(ОписаниеТипаОбъектов.ТипОбъектов);
Если ВозможныеПрава.ИерархическиеТаблицы.Получить(ОписаниеТипаОбъектов.ТипОбъектов) = Неопределено Тогда
КорневыеЭлементыТипаОбъектов = Неопределено;
Иначе
КорневыеЭлементыТипаОбъектов = КорневыеЭлементыТипаОбъектов(ОписаниеТипаОбъектов.ТипОбъектов);
КонецЕсли;
Для Каждого ОписаниеОбъекта Из ОписаниеТипаОбъектов.Строки Цикл
ОписаниеОбъекта.ПолноеНаименование = ОписаниеОбъекта.Объект.ПолноеНаименование();
КонецЦикла;
ОписаниеТипаОбъектов.Строки.Сортировать("ПолноеНаименование Возр");
Область = Макет.ПолучитьОбласть("НастройкиПравГруппировка");
Область.Параметры.Заполнить(ОписаниеТипаОбъектов);
Документ.Вывести(Область, 1);
Область = Макет.ПолучитьОбласть("НастройкиПравЛегендаШапка");
Документ.Вывести(Область, 2);
Для Каждого ОписаниеПрава Из ОписаниеПрав Цикл
ПредставленияПрава = РегистрыСведений.НастройкиПравОбъектов.ПредставлениеВозможногоПрава(ОписаниеПрава);
Область = Макет.ПолучитьОбласть("НастройкиПравЛегендаСтрока");
Область.Параметры.Заголовок = СтрЗаменить(ПредставленияПрава.Заголовок, Символы.ПС, " ");
Область.Параметры.Подсказка = СтрЗаменить(ПредставленияПрава.Подсказка, Символы.ПС, " ");
Документ.Вывести(Область, 2);
КонецЦикла;
ЗаголовокДляПодпапок = НСтр("ru = 'Для
|подпапок'");
ПодсказкаДляПодпапок = НСтр("ru = 'Права не только для текущей папки, но и для ее нижестоящих папок'");
Область = Макет.ПолучитьОбласть("НастройкиПравЛегендаСтрока");
Область.Параметры.Заголовок = СтрЗаменить(ЗаголовокДляПодпапок, Символы.ПС, " ");
Область.Параметры.Подсказка = СтрЗаменить(ПодсказкаДляПодпапок, Символы.ПС, " ");
Документ.Вывести(Область, 2);
ЗаголовокНастройкаПолученаОтГруппы = НСтр("ru = 'Настройка прав получена от группы'");
Область = Макет.ПолучитьОбласть("НастройкиПравЛегендаСтрокаНаследование");
Область.Параметры.Подсказка = НСтр("ru = 'Наследование прав от вышестоящих папок'");
Документ.Вывести(Область, 2);
Документ.Вывести(ОбластьОтступ, 2);
МакетШапки = Новый ТабличныйДокумент;
МакетСтроки = Новый ТабличныйДокумент;
ВывестиГруппыПользователя = ОписаниеТипаОбъектов.ГрупповоеУчастие И Не ВыводПравГруппы;
КоличествоКолонок = ОписаниеПрав.Количество() + ?(ВывестиГруппыПользователя, 2, 1);
Для НомерКолонки = 1 По КоличествоКолонок Цикл
НоваяЯчейкаШапки = Макет.ПолучитьОбласть("НастройкиПравДеталиЯчейкаШапки");
ЯчейкаШапки = МакетШапки.Присоединить(НоваяЯчейкаШапки);
ЯчейкаШапки.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
НоваяЯчейкаСтроки = Макет.ПолучитьОбласть("НастройкиПравДеталиЯчейкаСтроки");
ЯчейкаСтроки = МакетСтроки.Присоединить(НоваяЯчейкаСтроки);
ЯчейкаСтроки.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
КонецЦикла;
Если ВывестиГруппыПользователя Тогда
ЯчейкаШапки.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Лево;
ЯчейкаСтроки.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Лево;
КонецЕсли;
НомерЯчейкиДляПодпапок = "R1C" + Формат(ОписаниеПрав.Количество() + 1, "ЧГ=");
МакетШапки.Область(НомерЯчейкиДляПодпапок).Текст = ЗаголовокДляПодпапок;
МакетШапки.Область(НомерЯчейкиДляПодпапок).ШиринаКолонки = МаксимальнаяДлинаСтроки(
МакетШапки.Область(НомерЯчейкиДляПодпапок).Текст);
Смещение = 1;
ТекущийНомерОбласти = Смещение;
Для Каждого ОписаниеПрава Из ОписаниеПрав Цикл
ПредставленияПрава = РегистрыСведений.НастройкиПравОбъектов.ПредставлениеВозможногоПрава(ОписаниеПрава);
НомерЯчейки = "R1C" + Формат(ТекущийНомерОбласти, "ЧГ=");
МакетШапки.Область(НомерЯчейки).Текст = ПредставленияПрава.Заголовок;
МакетШапки.Область(НомерЯчейки).ШиринаКолонки = МаксимальнаяДлинаСтроки(ПредставленияПрава.Заголовок);
ТекущийНомерОбласти = ТекущийНомерОбласти + 1;
МакетСтроки.Область(НомерЯчейки).ШиринаКолонки = МакетШапки.Область(НомерЯчейки).ШиринаКолонки;
КонецЦикла;
Если ВывестиГруппыПользователя Тогда
НомерЯчейкиДляГруппы = "R1C" + Формат(КоличествоКолонок, "ЧГ=");
МакетШапки.Область(НомерЯчейкиДляГруппы).Текст = ЗаголовокНастройкаПолученаОтГруппы;
МакетШапки.Область(НомерЯчейкиДляГруппы).ШиринаКолонки = 35;
КонецЕсли;
Документ.Вывести(МакетШапки, 2);
ТекстДа = НСтр("ru = 'Да'");
ТекстНет = НСтр("ru = 'Нет'");
Для Каждого ОписаниеОбъекта Из ОписаниеТипаОбъектов.Строки Цикл
Если КорневыеЭлементыТипаОбъектов = Неопределено Или КорневыеЭлементыТипаОбъектов.Получить(
ОписаниеОбъекта.Объект) <> Неопределено Тогда
Область = Макет.ПолучитьОбласть("НастройкиПравДеталиОбъект");
ИначеЕсли ОписаниеОбъекта.Наследовать Тогда
Область = Макет.ПолучитьОбласть("НастройкиПравДеталиОбъектНаследоватьДа");
Иначе
Область = Макет.ПолучитьОбласть("НастройкиПравДеталиОбъектНаследоватьНет");
КонецЕсли;
Область.Параметры.Заполнить(ОписаниеОбъекта);
Документ.Вывести(Область, 2);
Для Каждого ОписаниеПользователя Из ОписаниеОбъекта.Строки Цикл
Для НомерОбластиПрава = 1 По КоличествоКолонок Цикл
НомерЯчейки = "R1C" + Формат(НомерОбластиПрава, "ЧГ=");
МакетСтроки.Область(НомерЯчейки).Текст = "";
КонецЦикла;
Если ТипЗнч(ОписаниеПользователя.НаследованиеРазрешено) = Тип("Булево") Тогда
МакетСтроки.Область(НомерЯчейкиДляПодпапок).Текст =
?(ОписаниеПользователя.НаследованиеРазрешено, ТекстДа, ТекстНет);
КонецЕсли;
ПраваВладельца = ВозможныеПрава.ПоТипам.Получить(ОписаниеТипаОбъектов.ТипОбъектов);
Для Каждого ОписаниеТекущегоПрава Из ОписаниеПользователя.Строки Цикл
ПравоВладельца = ПраваВладельца.Получить(ОписаниеТекущегоПрава.Право);
Если ПравоВладельца <> Неопределено Тогда
НомерОбластиПрава = ПравоВладельца.ИндексПрава + Смещение;
НомерЯчейки = "R1C" + Формат(НомерОбластиПрава, "ЧГ=");
МакетСтроки.Область(НомерЯчейки).Текст = ?(
ОписаниеТекущегоПрава.ПравоЗапрещено, ТекстНет, ТекстДа);
КонецЕсли;
КонецЦикла;
Если ВывестиГруппыПользователя Тогда
Если ОписаниеПользователя.ГрупповоеУчастие Тогда
МакетСтроки.Область(НомерЯчейкиДляГруппы).Текст = ОписаниеПользователя.ПользовательНаименование;
МакетСтроки.Область(НомерЯчейкиДляГруппы).ПараметрРасшифровки = "Пользователь";
МакетСтроки.Параметры.Пользователь = ОписаниеПользователя.Пользователь;
КонецЕсли;
КонецЕсли;
МакетСтроки.Область(НомерЯчейкиДляГруппы).ШиринаКолонки = 35;
Документ.Вывести(МакетСтроки, 2);
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Процедура ВывестиЗаголовокОтчета(Знач Макет, Свойства, Знач ПользовательИлиГруппа)
Если ТипЗнч(ПользовательИлиГруппа) = Тип("СправочникСсылка.Пользователи") Тогда
Свойства.Вставить("ЗаголовокОтчета", НСтр("ru = 'Отчет по правам пользователя'"));
Свойства.Вставить("РолиПоПрофилямГруппировка", НСтр("ru = 'Роли пользователя по профилям'"));
Свойства.Вставить("ПредставлениеОбъекта", НСтр("ru = 'Пользователь: %1'"));
ИначеЕсли ТипЗнч(ПользовательИлиГруппа) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда
Свойства.Вставить("ЗаголовокОтчета", НСтр("ru = 'Отчет по правам внешнего пользователя'"));
Свойства.Вставить("РолиПоПрофилямГруппировка", НСтр("ru = 'Роли внешнего пользователя по профилям'"));
Свойства.Вставить("ПредставлениеОбъекта", НСтр("ru = 'Внешний пользователь: %1'"));
ИначеЕсли ТипЗнч(ПользовательИлиГруппа) = Тип("СправочникСсылка.ГруппыПользователей") Тогда
Свойства.Вставить("ЗаголовокОтчета", НСтр("ru = 'Отчет по правам группы пользователей'"));
Свойства.Вставить("РолиПоПрофилямГруппировка", НСтр("ru = 'Роли группы пользователей по профилям'"));
Свойства.Вставить("ПредставлениеОбъекта", НСтр("ru = 'Группа пользователей: %1'"));
Иначе
Свойства.Вставить("ЗаголовокОтчета", НСтр("ru = 'Отчет по правам группы внешних пользователей'"));
Свойства.Вставить("РолиПоПрофилямГруппировка", НСтр("ru = 'Роли группы внешних пользователей по профилям'"));
Свойства.Вставить("ПредставлениеОбъекта", НСтр("ru = 'Группа внешних пользователей: %1'"));
КонецЕсли;
Свойства.ПредставлениеОбъекта = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
Свойства.ПредставлениеОбъекта, Строка(ПользовательИлиГруппа));
Область = Макет.ПолучитьОбласть("Заголовок");
Область.Параметры.Заполнить(Свойства);
Документ.Вывести(Область);
КонецПроцедуры
Процедура ВывестиСвойстваПользователяИБ(Знач Макет, Знач ПользовательИлиГруппа)
Документ.НачатьАвтогруппировкуСтрок();
Документ.Вывести(Макет.ПолучитьОбласть("СвойстваПользователяИБГруппировка"), 1,, Истина);
Область = Макет.ПолучитьОбласть("СвойстваПользователяИБДетали1");
УстановитьПривилегированныйРежим(Истина);
СвойстваПользователяИБ = Пользователи.СвойстваПользователяИБ(
ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПользовательИлиГруппа, "ИдентификаторПользователяИБ"));
УстановитьПривилегированныйРежим(Ложь);
Если СвойстваПользователяИБ <> Неопределено Тогда
Область.Параметры.ВходВПрограммуРазрешен = Пользователи.ВходВПрограммуРазрешен(
СвойстваПользователяИБ);
Документ.Вывести(Область, 2);
Область = Макет.ПолучитьОбласть("СвойстваПользователяИБДетали2");
Область.Параметры.Заполнить(СвойстваПользователяИБ);
Область.Параметры.ЯзыкПредставление = ПредставлениеЯзыка(СвойстваПользователяИБ.Язык);
Область.Параметры.РежимЗапускаПредставление = ПредставлениеРежимаЗапуска(СвойстваПользователяИБ.РежимЗапуска);
Если Не ЗначениеЗаполнено(СвойстваПользователяИБ.ПользовательОС) Тогда
Область.Параметры.ПользовательОС = НСтр("ru = 'Не указан'");
КонецЕсли;
Документ.Вывести(Область, 2);
Иначе
Область.Параметры.ВходВПрограммуРазрешен = Ложь;
Документ.Вывести(Область, 2);
КонецЕсли;
Документ.ЗакончитьАвтогруппировкуСтрок();
КонецПроцедуры
Процедура ВывестиПодробныеСведенияОПравахДоступа(Знач Макет, ПользовательИлиГруппа, Знач РезультатЗапроса, Свойства)
ОбластьОтступ = Макет.ПолучитьОбласть("Отступ");
ОписанияГруппДоступа = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам).Строки;
ОднаПерсональнаяГруппа = ОписанияГруппДоступа.Количество() = 1 И ЗначениеЗаполнено(ОписанияГруппДоступа[0].Участник);
Область = Макет.ПолучитьОбласть("ВсеГруппыДоступаГруппировка");
Область.Параметры.Заполнить(Свойства);
Если ОднаПерсональнаяГруппа Тогда
Если ТипЗнч(ПользовательИлиГруппа) = Тип("СправочникСсылка.Пользователи") Тогда
ПредставлениеДоступа = НСтр("ru = 'Ограничения доступа пользователя'");
ИначеЕсли ТипЗнч(ПользовательИлиГруппа) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда
ПредставлениеДоступа = НСтр("ru = 'Ограничения доступа внешнего пользователя'");
ИначеЕсли ТипЗнч(ПользовательИлиГруппа) = Тип("СправочникСсылка.ГруппыПользователей") Тогда
ПредставлениеДоступа = НСтр("ru = 'Ограничения доступа группы пользователей'");
Иначе
ПредставлениеДоступа = НСтр("ru = 'Ограничения доступа группы внешних пользователей'");
КонецЕсли;
Иначе
Если ТипЗнч(ПользовательИлиГруппа) = Тип("СправочникСсылка.Пользователи") Тогда
ПредставлениеДоступа = НСтр("ru = 'Группы доступа пользователя'");
ИначеЕсли ТипЗнч(ПользовательИлиГруппа) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда
ПредставлениеДоступа = НСтр("ru = 'Группы доступа внешнего пользователя'");
ИначеЕсли ТипЗнч(ПользовательИлиГруппа) = Тип("СправочникСсылка.ГруппыПользователей") Тогда
ПредставлениеДоступа = НСтр("ru = 'Группы доступа группы пользователей'");
Иначе
ПредставлениеДоступа = НСтр("ru = 'Группы доступа группы внешних пользователей'");
КонецЕсли;
КонецЕсли;
Область.Параметры.ПредставлениеДоступа = ПредставлениеДоступа;
Документ.Вывести(Область, 1);
Документ.Вывести(ОбластьОтступ, 2);
Для Каждого ОписаниеГруппыДоступа Из ОписанияГруппДоступа Цикл
Если Не ОднаПерсональнаяГруппа Тогда
Область = Макет.ПолучитьОбласть("ГруппаДоступаГруппировка");
Область.Параметры.Заполнить(ОписаниеГруппыДоступа);
Документ.Вывести(Область, 2);
КонецЕсли;
Если ОписаниеГруппыДоступа.Строки.Количество() = 1 И ОписаниеГруппыДоступа.Строки[0].Участник = ПользовательИлиГруппа Тогда
Иначе
Область = Макет.ПолучитьОбласть("ГруппаДоступаДеталиПользовательВходитВГруппу");
Документ.Вывести(Область, 3);
Если ОписаниеГруппыДоступа.Строки.Найти(ПользовательИлиГруппа, "Участник") <> Неопределено Тогда
Область = Макет.ПолучитьОбласть("ГруппаДоступаДеталиПользовательВходитВГруппуЯвно");
Документ.Вывести(Область, 3);
КонецЕсли;
Отбор = Новый Структура("ГрупповоеУчастие", Истина);
ОписанияГруппПользователей = ОписаниеГруппыДоступа.Строки.НайтиСтроки(Отбор);
Если ОписанияГруппПользователей.Количество() > 0 Тогда
Область = Макет.ПолучитьОбласть("ГруппаДоступаДеталиПользовательВходитВГруппуКакУчастникГруппПользователей");
Документ.Вывести(Область, 3);
Для Каждого ОписаниеГруппыПользователя Из ОписанияГруппПользователей Цикл
Область = Макет.ПолучитьОбласть("ГруппаДоступаДеталиПользовательВходитВГруппаКакПредставлениеУчастника");
Область.Параметры.Заполнить(ОписаниеГруппыПользователя);
Документ.Вывести(Область, 3);
КонецЦикла;
КонецЕсли;
КонецЕсли;
Если Не ОднаПерсональнаяГруппа Тогда
Область = Макет.ПолучитьОбласть("ГруппаДоступаДеталиПрофиль");
Область.Параметры.Заполнить(ОписаниеГруппыДоступа);
Документ.Вывести(Область, 3);
КонецЕсли;
Если Не ОднаПерсональнаяГруппа И ЗначениеЗаполнено(ОписаниеГруппыДоступа.Ответственный) Тогда
Область = Макет.ПолучитьОбласть("ГруппаДоступаДеталиОтветственный");
Область.Параметры.Заполнить(ОписаниеГруппыДоступа);
Документ.Вывести(Область, 3);
КонецЕсли;
Если Не ОднаПерсональнаяГруппа И ЗначениеЗаполнено(ОписаниеГруппыДоступа.Комментарий) Тогда
Область = Макет.ПолучитьОбласть("ГруппаДоступаДеталиКомментарий");
Область.Параметры.Заполнить(ОписаниеГруппыДоступа);
Документ.Вывести(Область, 3);
КонецЕсли;
Документ.Вывести(ОбластьОтступ, 3);
Документ.Вывести(ОбластьОтступ, 3);
КонецЦикла;
КонецПроцедуры
Процедура ВывестиРолиПоПрофилям(Знач Макет, ПользовательИлиГруппа, Знач РезультатЗапроса, Свойства)
ОбластьОтступ = Макет.ПолучитьОбласть("Отступ");
РолиПоПрофилям = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
РолиПоПрофилям.Строки.Сортировать("ПредставлениеПрофиля Возр, ПредставлениеРоли Возр");
Если РолиПоПрофилям.Строки.Количество() > 0 Тогда
Область = Макет.ПолучитьОбласть("РолиПоПрофилямГруппировка");
Область.Параметры.Заполнить(Свойства);
Документ.Вывести(Область, 1);
Документ.Вывести(ОбластьОтступ, 2);
Для Каждого ОписаниеПрофиля Из РолиПоПрофилям.Строки Цикл
Область = Макет.ПолучитьОбласть("РолиПоПрофилямПрофильПредставление");
Область.Параметры.Заполнить(ОписаниеПрофиля);
Документ.Вывести(Область, 2);
Для Каждого ОписаниеРоли Из ОписаниеПрофиля.Строки Цикл
Область = Макет.ПолучитьОбласть("РолиПоПрофилямРольПредставление");
Область.Параметры.Заполнить(ОписаниеРоли);
Документ.Вывести(Область, 3);
КонецЦикла;
КонецЦикла;
КонецЕсли;
Документ.Вывести(ОбластьОтступ, 2);
Документ.Вывести(ОбластьОтступ, 2);
КонецПроцедуры
Функция ШаблонПредставленияВидаДоступа(ОписаниеВидаДоступа, ВладельцыНастроекПрав)
Если ОписаниеВидаДоступа.ВсеРазрешены = Неопределено Тогда
ШаблонПредставленияВидаДоступа = "%1";
ИначеЕсли ОписаниеВидаДоступа.Строки.Количество() = 0 Тогда
Если ВладельцыНастроекПрав.Получить(ТипЗнч(ОписаниеВидаДоступа.ВидДоступа)) <> Неопределено Тогда
ШаблонПредставленияВидаДоступа = "%1";
ИначеЕсли ОписаниеВидаДоступа.ВсеРазрешены Тогда
Если ОписаниеВидаДоступа.ВидДоступа = Справочники.Пользователи.ПустаяСсылка()
Или ОписаниеВидаДоступа.ВидДоступа = Справочники.ВнешниеПользователи.ПустаяСсылка() Тогда
ШаблонПредставленияВидаДоступа = НСтр("ru = '%1 (без запрещенных, авторизованный пользователь и его группы всегда разрешены)'");
Иначе
ШаблонПредставленияВидаДоступа = НСтр("ru = '%1 (без запрещенных)'");
КонецЕсли;
Иначе
Если ОписаниеВидаДоступа.ВидДоступа = Справочники.Пользователи.ПустаяСсылка()
Или ОписаниеВидаДоступа.ВидДоступа = Справочники.ВнешниеПользователи.ПустаяСсылка() Тогда
ШаблонПредставленияВидаДоступа = НСтр("ru = '%1 (без разрешенных, авторизованный пользователь и его группы всегда разрешены)'");
Иначе
ШаблонПредставленияВидаДоступа = НСтр("ru = '%1 (без разрешенных)'");
КонецЕсли;
КонецЕсли;
Иначе
Если ОписаниеВидаДоступа.ВсеРазрешены Тогда
Если ОписаниеВидаДоступа.ВидДоступа = Справочники.Пользователи.ПустаяСсылка()
Или ОписаниеВидаДоступа.ВидДоступа = Справочники.ВнешниеПользователи.ПустаяСсылка() Тогда
ШаблонПредставленияВидаДоступа = НСтр("ru = '%1 (запрещенные, авторизованный пользователь и его группы всегда разрешены):'");
Иначе
ШаблонПредставленияВидаДоступа = НСтр("ru = '%1 (запрещенные):'");
КонецЕсли;
Иначе
Если ОписаниеВидаДоступа.ВидДоступа = Справочники.Пользователи.ПустаяСсылка()
Или ОписаниеВидаДоступа.ВидДоступа = Справочники.ВнешниеПользователи.ПустаяСсылка() Тогда
ШаблонПредставленияВидаДоступа = НСтр("ru = '%1 (разрешенные, авторизованный пользователь и его группы всегда разрешены):'");
Иначе
ШаблонПредставленияВидаДоступа = НСтр("ru = '%1 (разрешенные):'");
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат ШаблонПредставленияВидаДоступа;
КонецФункции
Процедура ВывестиОбласть(Знач Документ, Область, Уровень, НачальнаяСтрокаОбластиОбъекта, КонечнаяСтрокаОбластиОбъекта,
НачальнаяСтрокаОбластиГруппыДоступа)
Если НачальнаяСтрокаОбластиОбъекта = Неопределено Тогда
НачальнаяСтрокаОбластиОбъекта = Документ.Вывести(Область, Уровень);
КонечнаяСтрокаОбластиОбъекта = НачальнаяСтрокаОбластиОбъекта;
Иначе
КонечнаяСтрокаОбластиОбъекта = Документ.Вывести(Область);
КонецЕсли;
Если НачальнаяСтрокаОбластиГруппыДоступа = Неопределено Тогда
НачальнаяСтрокаОбластиГруппыДоступа = КонечнаяСтрокаОбластиОбъекта;
КонецЕсли;
Область = Неопределено;
КонецПроцедуры
Процедура ОбъединитьЯчейкиУстановитьГраницы(Знач Документ, Знач НачальнаяСтрокаОбласти, Знач КонечнаяСтрокаОбласти,
Знач НомерКолонки)
Область = Документ.Область(НачальнаяСтрокаОбласти.Верх, НомерКолонки, КонечнаяСтрокаОбласти.Низ, НомерКолонки);
Область.Объединить();
ЛинияГраницы = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Точечная);
Область.ГраницаСверху = ЛинияГраницы;
Область.ГраницаСнизу = ЛинияГраницы;
КонецПроцедуры
Процедура УстановитьГраницыВидовИЗначенийДоступа(Знач Документ, Знач НачальнаяСтрокаОбластиГруппыДоступа,
Знач КонечнаяСтрокаОбластиОбъекта)
ЛинияГраницы = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Точечная);
Область = Документ.Область(НачальнаяСтрокаОбластиГруппыДоступа.Верх, 4, НачальнаяСтрокаОбластиГруппыДоступа.Верх, 5);
Область.ГраницаСверху = ЛинияГраницы;
Область = Документ.Область(КонечнаяСтрокаОбластиОбъекта.Низ, 4, КонечнаяСтрокаОбластиОбъекта.Низ, 5);
Область.ГраницаСнизу = ЛинияГраницы;
КонецПроцедуры
Функция ПредставлениеРежимаЗапуска(РежимЗапуска)
Если РежимЗапуска = "Авто" Тогда
ПредставлениеРежимаЗапуска = НСтр("ru = 'Авто'");
ИначеЕсли РежимЗапуска = "ОбычноеПриложение" Тогда
ПредставлениеРежимаЗапуска = НСтр("ru = 'Обычное приложение'");
ИначеЕсли РежимЗапуска = "УправляемоеПриложение" Тогда
ПредставлениеРежимаЗапуска = НСтр("ru = 'Управляемое приложение'");
Иначе
ПредставлениеРежимаЗапуска = "";
КонецЕсли;
Возврат ПредставлениеРежимаЗапуска;
КонецФункции
Функция ПредставлениеЯзыка(Язык)
ПредставлениеЯзыка = "";
Для Каждого МетаданныеЯзыка Из Метаданные.Языки Цикл
Если МетаданныеЯзыка.Имя = Язык Тогда
ПредставлениеЯзыка = МетаданныеЯзыка.Синоним;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат ПредставлениеЯзыка;
КонецФункции
Функция МаксимальнаяДлинаСтроки(МногострочнаяСтрока, НачальнаяДлина = 5)
Для НомерСтроки = 1 По СтрЧислоСтрок(МногострочнаяСтрока) Цикл
ДлинаПодстроки = СтрДлина(СтрПолучитьСтроку(МногострочнаяСтрока, НомерСтроки));
Если НачальнаяДлина < ДлинаПодстроки Тогда
НачальнаяДлина = ДлинаПодстроки;
КонецЕсли;
КонецЦикла;
Возврат НачальнаяДлина + 1;
КонецФункции
Функция КорневыеЭлементыТипаОбъектов(ТипОбъектов)
ИмяТаблицы = Метаданные.НайтиПоТипу(ТипОбъектов).ПолноеИмя();
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ПустаяСсылка", ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ИмяТаблицы).ПустаяСсылка());
Запрос.Текст =
"ВЫБРАТЬ
| ТекущаяТаблица.Ссылка КАК Ссылка
|ИЗ
| &ТекущаяТаблица КАК ТекущаяТаблица
|ГДЕ
| ТекущаяТаблица.Родитель = &ПустаяСсылка";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекущаяТаблица", ИмяТаблицы);
Выборка = Запрос.Выполнить().Выбрать();
КорневыеЭлементы = Новый Соответствие;
Пока Выборка.Следующий() Цикл
КорневыеЭлементы.Вставить(Выборка.Ссылка, Истина);
КонецЦикла;
Возврат КорневыеЭлементы;
КонецФункции
#КонецОбласти
#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли