1С: Получить список пользователей роли

Как оказалось, в 1С нет штатного механизма (простого) для посмотреть список пользователей, которые имеют назначенную роль (конкретную). Потому изобрел следующую обработку, кототорая:

  • выводит на экран список ролей
  • перебирает всех пользователей и если у пользователя назначена выбранная роль, то выводит её в консоль

Код:


&НаСервере
Функция ПолучитьСпискоПользователейНаСервере()
	УстановитьПривилегированныйРежим(истина);
    КоллекцияРолейКонфигурации = Метаданные.Роли;
	СписокИменВсехРолей = Новый Массив;
	Для Каждого ТекущаяРоль Из КоллекцияРолейКонфигурации Цикл
	    СписокИменВсехРолей.Добавить(Новый Структура("Имя,Синоним",ТекущаяРоль.Имя,ТекущаяРоль.Синоним));
	КонецЦикла;
	возврат СписокИменВсехРолей;
	УстановитьПривилегированныйРежим(ложь);
КонецФункции

&НаСервере
Функция ПроверитьИНаказать()
	УстановитьПривилегированныйРежим(истина);
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Пользователи.Ссылка КАК Ссылка,
		|	Пользователи.ИдентификаторПользователяИБ КАК ИдентификаторПользователяИБ
		|ИЗ
		|	Справочник.Пользователи КАК Пользователи
		|ГДЕ
		|	Пользователи.ПометкаУдаления = ЛОЖЬ";	
	РезультатЗапроса = Запрос.Выполнить();	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		
			ИскомыйПользователь = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ВыборкаДетальныеЗаписи.ИдентификаторПользователяИБ);
			Если ИскомыйПользователь<>Неопределено Тогда
				РолиПользователя = ИскомыйПользователь.Роли;
				Для Каждого Роль Из РолиПользователя Цикл
				    Если Роль.Имя = ВсеРоли Тогда
				        Сообщить(ВыборкаДетальныеЗаписи.Ссылка);
				    КонецЕсли;
				КонецЦикла;		
		    конецесли;
		
	КонецЦикла;	
    УстановитьПривилегированныйРежим(ложь);
КонецФункции


&НаКлиенте
Процедура ПолучитьСпискоПользователей(Команда)
	ПроверитьИНаказать();	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	СписокРолей=ПолучитьСпискоПользователейНаСервере();
	Элементы.ВсеРоли.СписокВыбора.Очистить();
	для каждого стр из СписокРолей цикл
		Элементы.ВсеРоли.СписокВыбора.Добавить(стр.Имя,стр.Синоним);
	конеццикла;
КонецПроцедуры

Обработку, можно скачать тут: