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