&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Элементы.ОбъектМетаданных.СписокВыбора.Очистить();
ПросматриваемыеТипыМетаданных = Новый Массив;
ПросматриваемыеТипыМетаданных.Добавить("Справочники");
ПросматриваемыеТипыМетаданных.Добавить("Документы");
ПросматриваемыеТипыМетаданных.Добавить("РегистрыСведений");
ПросматриваемыеТипыМетаданных.Добавить("РегистрыНакопления");
ПросматриваемыеТипыМетаданных.Добавить("РегистрыБухгалтерии");
ПросматриваемыеТипыМетаданных.Добавить("РегистрыРасчета");
ПросматриваемыеТипыМетаданных.Добавить("Отчеты");
ПросматриваемыеТипыМетаданных.Добавить("Обработки");
Для каждого ТекТипМетаданных Из ПросматриваемыеТипыМетаданных Цикл
Для каждого Метаданное Из Метаданные[ТекТипМетаданных] Цикл
Элементы.ОбъектМетаданных.СписокВыбора.Добавить(Метаданное.ПолноеИмя(), Метаданное.Синоним + " (" + ТекТипМетаданных + ")");
КонецЦикла;
КонецЦикла;
Элементы.ОбъектМетаданных.СписокВыбора.СортироватьПоПредставлению();
Элементы.ТипДоступа.СписокВыбора.Очистить();
Элементы.ТипДоступа.СписокВыбора.Добавить("Чтение");
Элементы.ТипДоступа.СписокВыбора.Добавить("Изменение");
Элементы.ТипДоступа.СписокВыбора.Добавить("Просмотр");
Элементы.ТипДоступа.СписокВыбора.Добавить("Редактирование");
КонецПроцедуры
&НаКлиенте
Процедура ЗапускПодПользователем(Команда)
Если НЕ ЗначениеЗаполнено(Пользователь) Тогда
Возврат;
КонецЕсли;
ДанныеПользователя = ДанныеПользователяИБ(Пользователь);
Если ДанныеПользователя.ПользователяНет Тогда
Сообщить(НСтр("ru = 'Нет указанного пользователя информационной базы'"));
КонецЕсли;
СтрокаПараметров = "ENTERPRISE /RunModeManagedApplication " + СтрокаСоединенияИнформационнойБазы() + " /N""" + ДанныеПользователя.ИмяПользователя + """ /P""123""" ;
ОбновитьПарольПользователя(Новый Структура("ИдентификаторПользователяИБ, СохраненыйПароль, СтандартАут", ДанныеПользователя.ИдентификаторПользователяИБ, "QL0AFWMIX8NRZTKeof9cXsvbvu8=,QL0AFWMIX8NRZTKeof9cXsvbvu8=", Истина));
ПодключитьОбработчикОжидания("ВосстановитьПароль",5,Истина);
ЗапуститьСистему(СтрокаПараметров);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ДанныеПользователяИБ(Пользователь)
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(Пользователь);
ДанныеПользователяИБ = Новый Структура;
ДанныеПользователяИБ.Вставить("ПользователяНет", ПользовательИБ = Неопределено);
ДанныеПользователяИБ.Вставить("СтандартАут", ПользовательИБ.АутентификацияСтандартная);
ДанныеПользователяИБ.Вставить("СохраненыйПароль", ПользовательИБ.СохраняемоеЗначениеПароля);
ДанныеПользователяИБ.Вставить("ИмяПользователя", ПользовательИБ.Имя);
ДанныеПользователяИБ.Вставить("ИдентификаторПользователяИБ", ПользовательИБ.Имя);
Возврат ДанныеПользователяИБ;
КонецФункции
&НаСервереБезКонтекста
Процедура ОбновитьПарольПользователя(Параметры) Экспорт
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(Параметры.ИдентификаторПользователяИБ);
ПользовательИБ.СохраняемоеЗначениеПароля = Параметры.СохраненыйПароль;
ПользовательИБ.АутентификацияСтандартная = Параметры.СтандартАут;
ПользовательИБ.Записать();
КонецПроцедуры
&НаКлиенте
Процедура ВосстановитьПароль() Экспорт
ОбновитьПарольПользователя(ДанныеПользователя);
КонецПроцедуры
&НаКлиенте
Процедура ПользовательПриИзменении(Элемент)
ЗаполнитьРолиНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьРолиНаСервере(Роли = Неопределено)
Если НЕ ЗначениеЗаполнено(Пользователь) Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа,
| ПрофилиГруппДоступаРоли.Ссылка КАК ПрофильГруппДоступа,
| ПрофилиГруппДоступаРоли.Роль КАК Роль
|ИЗ
| Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.Роли КАК ПрофилиГруппДоступаРоли
| ПО ГруппыДоступаПользователи.Ссылка.Профиль = ПрофилиГруппДоступаРоли.Ссылка
| И (ГруппыДоступаПользователи.Пользователь = &Пользователь)
|ГДЕ
| ВЫБОР
| КОГДА &РолиЗаполнены = ЛОЖЬ
| ТОГДА ИСТИНА
| КОГДА ПрофилиГруппДоступаРоли.Роль = &РольПолныеПрава
| ТОГДА ИСТИНА
| ИНАЧЕ ПрофилиГруппДоступаРоли.Роль В (&Роли)
| КОНЕЦ
|
|УПОРЯДОЧИТЬ ПО
| ГруппаДоступа,
| Роль");
Запрос.УстановитьПараметр("Пользователь", Пользователь);
Запрос.УстановитьПараметр("Роли", Роли);
Запрос.УстановитьПараметр("РолиЗаполнены", ЗначениеЗаполнено(Роли));
Запрос.УстановитьПараметр("РольПолныеПрава", Справочники.ИдентификаторыОбъектовМетаданных.НайтиПоНаименованию("Полные права (Роль)", Истина));
Выборка = Запрос.Выполнить().Выбрать();
ДоступныеРоли.Очистить();
Пока Выборка.Следующий() Цикл
ЗаполнитьЗначенияСвойств(ДоступныеРоли.Добавить(), Выборка);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьРоли(Команда)
Если ЗначениеЗаполнено(ОбъектМетаданных) И ЗначениеЗаполнено(ТипДоступа) Тогда
ПолучитьРолиНаСервере();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПолучитьРолиНаСервере()
РолиДляОбъекта.Очистить();
Для каждого ТекРоль Из Метаданные.Роли Цикл
Если Лев(ОбъектМетаданных, 9) = "Обработка" ИЛИ
Лев(ОбъектМетаданных, 5) = "Отчет"
Тогда
ТипДоступа = "Просмотр";
КонецЕсли;
Если ПравоДоступа(ТипДоступа, Метаданные.НайтиПоПолномуИмени(ОбъектМетаданных), ТекРоль) Тогда
РолиДляОбъекта.Добавить(ТекРоль.Синоним + " (Роль)", ТекРоль.Синоним, Истина);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ОтобратьВыбранныеРоли(Команда)
ЗаполнитьРолиНаСервере(МассивВыбранныхРолей());
КонецПроцедуры
&НаСервере
Функция МассивВыбранныхРолей()
МассивВыбранныхРолей = Новый Массив;
СправочникРоли = Справочники.ИдентификаторыОбъектовМетаданных.НайтиПоНаименованию("Роли", Истина, Неопределено);
Для каждого ТекРоль Из РолиДляОбъекта Цикл
Если ТекРоль.Пометка Тогда
РольИдентификатор = Справочники.ИдентификаторыОбъектовМетаданных.НайтиПоНаименованию(
ТекРоль.Значение, Истина, СправочникРоли);
МассивВыбранныхРолей.Добавить(РольИдентификатор);
КонецЕсли;
КонецЦикла;
Возврат МассивВыбранныхРолей;
КонецФункции
&НаКлиенте
Процедура ПолучитьРолиПользователя(Команда)
ЗаполнитьРолиНаСервере();
КонецПроцедуры