#Область ОписаниеПеременных
&НаКлиенте
Перем ПараметрыЗаписиПриПроверкеПервогоАдминистратора;
&НаКлиенте
Перем ПропуститьНаименованиеПриИзменении, ПропуститьНаименованиеАвтоПодбор;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды");
МодульПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
КонецЕсли;
ОбщаяНастройкаПоказыватьВСпискеВыбора =
ПользователиСлужебный.НастройкиВхода().Общие.ПоказыватьВСпискеВыбора;
Если ОбщегоНазначения.РазделениеВключено() Тогда
РазделениеВключено = Истина;
ДоступноИзменениеПользователей = Истина;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса") Тогда
МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса");
ДоступноИзменениеПользователей = МодульПользователиСлужебныйВМоделиСервиса.ДоступноИзменениеПользователей();
КонецЕсли;
Если НЕ ДоступноИзменениеПользователей Тогда
Если Объект.Ссылка.Пустая() Тогда
ВызватьИсключение НСтр("ru = 'В демонстрационном режиме создание новых учетных записей пользователей недоступно.'");
КонецЕсли;
ТолькоПросмотр = Истина;
КонецЕсли;
Если ЗначениеЗаполнено(Объект.Ссылка)
И ЗначениеЗаполнено(Объект.ИдентификаторПользователяСервиса)
И Объект.Ссылка <> Пользователи.АвторизованныйПользователь() Тогда
Элементы.Отступ.Видимость = Ложь;
Элементы.НадписьНаличиеПароля.Видимость = Ложь;
Элементы.СменитьПароль.Видимость = Ложь;
КонецЕсли;
Элементы.ПользовательИБАутентификацияOpenID.Видимость = Ложь;
Элементы.ПользовательИБАутентификацияOpenIDConnect.Видимость = Ложь;
Элементы.ПользовательИБАутентификацияТокеномДоступа.Видимость = Ложь;
Элементы.ПользовательИБАутентификацияСтандартная.Видимость = Ложь;
Элементы.ПотребоватьСменуПароляПриВходе.Видимость = Ложь;
Элементы.ПользовательИБЗапрещеноИзменятьПароль.Видимость = Ложь;
Элементы.ПользовательИБЗапрещеноВосстанавливатьПароль.Видимость = Ложь;
Элементы.СвойстваАутентификацииОС.Видимость = Ложь;
Элементы.ПользовательИБРежимЗапуска.Видимость = Ложь;
КонецЕсли;
Если СтандартныеПодсистемыСервер.ЭтоУчебнаяПлатформа() Тогда
Элементы.СвойстваАутентификацииОС.ТолькоПросмотр = Истина;
КонецЕсли;
Для каждого РежимЗапуска Из РежимЗапускаКлиентскогоПриложения Цикл
ПолноеИмяЗначения = ПолучитьПолноеИмяПредопределенногоЗначения(РежимЗапуска);
ИмяЗначения = Сред(ПолноеИмяЗначения, СтрНайти(ПолноеИмяЗначения, ".") + 1);
Элементы.ПользовательИБРежимЗапуска.СписокВыбора.Добавить(ИмяЗначения, Строка(РежимЗапуска));
КонецЦикла;
Элементы.ПользовательИБРежимЗапуска.СписокВыбора.СортироватьПоПредставлению();
Если Метаданные.Языки.Количество() < 2 Тогда
Элементы.ПользовательИБЯзык.Видимость = Ложь;
Иначе
Для каждого МетаданныеЯзыка Из Метаданные.Языки Цикл
Элементы.ПользовательИБЯзык.СписокВыбора.Добавить(
МетаданныеЯзыка.Имя, МетаданныеЯзыка.Синоним);
КонецЦикла;
КонецЕсли;
УровеньДоступа = ПользователиСлужебный.УровеньДоступаКСвойствамПользователя(Объект);
УстановитьПривилегированныйРежим(Истина);
Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда
Если Параметры.ГруппаНовогоПользователя <> Пользователи.ГруппаВсеПользователи() Тогда
ГруппаНовогоПользователя = Параметры.ГруппаНовогоПользователя;
КонецЕсли;
Если ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда
ЗначениеКопирования = Параметры.ЗначениеКопирования;
Объект.Наименование = "";
ИдентификаторКопируемогоПользователяИБ = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(
ЗначениеКопирования, "ИдентификаторПользователяИБ");
Если Не ПользователиСлужебный.УровеньДоступаПользователяВыше(ЗначениеКопирования, УровеньДоступа) Тогда
ПрочитатьПользователяИБ(ЗначениеЗаполнено(ИдентификаторКопируемогоПользователяИБ));
Иначе
ПрочитатьПользователяИБ();
КонецЕсли;
Если Не УровеньДоступа.ИзменениеРазрешенияНаВход Тогда
ВходВПрограммуРазрешен = Ложь;
ВходВПрограммуРазрешенЗначениеПрямогоИзменения = Ложь;
КонецЕсли;
ПользовательИБАдресЭлектроннойПочты = "";
Иначе
ПрочитатьПользователяИБ();
Если Не ЗначениеЗаполнено(Параметры.ИдентификаторПользователяИБ) Тогда
ПользовательИБАутентификацияСтандартная = Истина;
Если ОбщегоНазначения.РазделениеВключено() Тогда
ПользовательИБПоказыватьВСпискеВыбора = Ложь;
ПользовательИБАутентификацияOpenID = Истина;
КонецЕсли;
Если УровеньДоступа.ИзменениеРазрешенияНаВход Тогда
ВходВПрограммуРазрешен = Истина;
ВходВПрограммуРазрешенЗначениеПрямогоИзменения = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Иначе
ПрочитатьПользователяИБ();
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
ОбработатьИнтерфейсРолей("НастроитьИнтерфейсРолейПриСозданииФормы", ПользовательИБСуществует);
НачальноеОписаниеПользователяИБ = НачальноеОписаниеПользователяИБ();
ТребуетсяСинхронизацияССервисом = Объект.Ссылка.Пустая();
ПарольДляПодтвержденияИзмененияПочты = Неопределено;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда
МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией");
ВидКонтактнойИнформацииEmailПользователя = ВидКонтактнойИнформации("EmailПользователя");
ВидКонтактнойИнформацииТелефонПользователя = ВидКонтактнойИнформации("ТелефонПользователя");
ИсключаемыеВиды = Новый Массив;
ИсключаемыеВиды.Добавить(ВидКонтактнойИнформацииEmailПользователя);
ИсключаемыеВиды.Добавить(ВидКонтактнойИнформацииТелефонПользователя);
ДополнительныеПараметры = МодульУправлениеКонтактнойИнформацией.ПараметрыКонтактнойИнформации();
ДополнительныеПараметры.ИмяЭлементаДляРазмещения = "КонтактнаяИнформация";
ДополнительныеПараметры.ИсключаемыеВиды = ИсключаемыеВиды;
МодульУправлениеКонтактнойИнформацией.ПриСозданииНаСервере(ЭтотОбъект, Объект, ДополнительныеПараметры);
Если ПользователиСлужебный.ДоступнаНастройкаВосстановленияПароля(УровеньДоступа) Тогда
Если Не ПользователиСлужебный.ИнтерактивноЗапрашиватьВводПароля(УровеньДоступа, Объект) Тогда
ПарольДляПодтвержденияИзмененияПочты = "";
КонецЕсли;
ИмяРеквизитаСПочтойДляВосстановленияПароля = МодульУправлениеКонтактнойИнформацией.ОпределитьЭлементСПочтойДляВосстановленияПароля(
ЭтотОбъект,
ПользовательИБАдресЭлектроннойПочты,
ПользователиСлужебный.ДоступноРедактированиеПочтыДляВосстановленияПароля(УровеньДоступа, Объект));
КонецЕсли;
ПереопределитьРедактированиеКонтактнойИнформацииВСервисе();
Иначе
Элементы.ГруппаКонтактнаяИнформацияПолеEmailПользователя.Видимость = Ложь;
Элементы.ГруппаКонтактнаяИнформацияПолеТелефонПользователя.Видимость = Ложь;
КонецЕсли;
НастроитьФорму(Объект, Истина);
Если ОбщегоНазначения.ЭтоАвтономноеРабочееМесто() Тогда
Элементы.ГруппаШапка.ТолькоПросмотр = Истина;
Элементы.КонтактнаяИнформация.ТолькоПросмотр = Истина;
Элементы.СтраницаДополнительныеРеквизиты.ТолькоПросмотр = Истина;
Элементы.СтраницаКомментарий.ТолькоПросмотр = Истина;
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация")
И ДействияСПользователемСервиса <> Неопределено Тогда
МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией");
МодульУправлениеКонтактнойИнформацией.УстановитьДоступностьЭлементовКонтактнойИнформации(ЭтотОбъект,
ОпределитьДоступностьЭлементовКонтактнойИнформации());
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "СтраницаДополнительныеРеквизиты");
ДополнительныеПараметры.Вставить("ОтложеннаяИнициализация", Истина);
МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами");
МодульУправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры);
КонецЕсли;
ПодготовитьНеобязательныйРеквизит("ФизическоеЛицо", Пользователи.ФизическоеЛицоИспользуется());
ПодготовитьНеобязательныйРеквизит("Подразделение", Пользователи.ПодразделениеИспользуется());
ОбновитьВидимостьРеквизитаПоказыватьВСпискеВыбора();
Если ОбщегоНазначения.РазделениеВключено()
Или Не Пользователи.ОбщиеНастройкиВходаИспользуются() Тогда
Элементы.ГруппаИзменитьОграничение.Видимость = Ложь;
КонецЕсли;
Элементы.ПотребоватьСменуПароляПриВходе.РасширеннаяПодсказка.Заголовок =
ПользователиСлужебный.ПодсказкаПотребоватьСменуПароляПриВходе(Ложь);
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
Элементы.ФормаЗаписатьИЗакрыть.Отображение = ОтображениеКнопки.Картинка;
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Обсуждения") Тогда
МодульОбсужденияСлужебный = ОбщегоНазначения.ОбщийМодуль("ОбсужденияСлужебный");
МодульОбсужденияСлужебный.ПриСозданииНаСервереПользователя(Отказ, ЭтотОбъект, Объект);
КонецЕсли;
Если НЕ ЗначениеЗаполнено(АдресФотографии) Тогда
АдресФотографии = ПоместитьВоВременноеХранилище(БиблиотекаКартинок.ПользовательБезФотографии,
УникальныйИдентификатор);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
#Если ВебКлиент Тогда
Элементы.ПользовательИБПользовательОС.КнопкаВыбора = Ложь;
#КонецЕсли
ОбновитьСвойствоПоказыватьВСпискеВыбора();
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент");
МодульУправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
КонецЕсли;
Если ОшибкаРаботыССервисом <> Неопределено Тогда
ТекущаяОшибкаРаботыССервисом = ОшибкаРаботыССервисом;
ОшибкаРаботыССервисом = Неопределено;
СтандартныеПодсистемыКлиент.ВывестиИнформациюОбОшибке(ТекущаяОшибкаРаботыССервисом);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент");
Если МодульУправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда
ОбновитьЭлементыДополнительныхРеквизитов();
МодульУправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
КонецЕсли;
Если ВРег(ИмяСобытия) = ВРег("Запись_НаборКонстант") Тогда
Если ВРег(Источник) = ВРег("ИспользоватьВнешнихПользователей") Тогда
ПодключитьОбработчикОжидания("ПриИзмененияИспользованияВнешнихПользователей", 0.1, Истина);
КонецЕсли;
Если ВРег(Источник) = ВРег("НастройкиВходаПользователей") Тогда
ПодключитьОбработчикОжидания("ПриИзмененияНастроекВходаПользователей", 0.1, Истина);
КонецЕсли;
КонецЕсли;
Если ВРег(ИмяСобытия) = ВРег("Запись_ГруппыДоступа") Тогда
ПодключитьОбработчикОжидания("ПриИзмененияГруппыДоступа", 0.1, Истина);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами");
МодульУправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда
МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией");
МодульУправлениеКонтактнойИнформацией.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект, "КонтактнаяИнформация");
Если ТипЗнч(УровеньДоступа) = Тип("Структура") И ПользователиСлужебный.ДоступнаНастройкаВосстановленияПароля(УровеньДоступа) Тогда
ИмяРеквизитаСПочтойДляВосстановленияПароля = МодульУправлениеКонтактнойИнформацией.ОпределитьЭлементСПочтойДляВосстановленияПароля(
ЭтотОбъект,
ПользовательИБАдресЭлектроннойПочты,
ПользователиСлужебный.ДоступноРедактированиеПочтыДляВосстановленияПароля(УровеньДоступа, ТекущийОбъект));
КонецЕсли;
КонецЕсли;
НастроитьФорму(ТекущийОбъект);
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом");
МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКомандыКлиентСервер");
МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецЕсли;
Фотография = ТекущийОбъект.Фотография.Получить();
Если Фотография <> Неопределено Тогда
АдресФотографии = ПоместитьВоВременноеХранилище(Фотография, УникальныйИдентификатор);
ФотографияЗадана = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
ОчиститьСообщения();
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда
Если ЗначениеЗаполнено(ИмяРеквизитаСПочтойДляВосстановленияПароля)
И ПользовательИБАдресЭлектроннойПочты <> ЭтотОбъект[ИмяРеквизитаСПочтойДляВосстановленияПароля] Тогда
Если ПарольДляПодтвержденияИзмененияПочты = Неопределено Тогда
Отказ = Истина;
ДополнительныеПараметры = Новый Структура("ПараметрыЗаписи", ПараметрыЗаписи);
Оповещение = Новый ОписаниеОповещения("ПослеЗапросаПароляДляИзмененияПочты", ЭтотОбъект, ДополнительныеПараметры);
ОткрытьФорму("Справочник.Пользователи.Форма.ВводПароля",, ЭтотОбъект,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
Возврат;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ЗаголовокВопросов = НСтр("ru = 'Запись пользователя информационной базы'");
Если ЗначениеЗаполнено(ЗначениеКопирования)
И Не ЗначениеЗаполнено(Объект.Ссылка)
И ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом")
И (Не ПараметрыЗаписи.Свойство("НеКопироватьПраваПользователя")
И Не ПараметрыЗаписи.Свойство("КопироватьПраваПользователя")) Тогда
Отказ = Истина;
ПоказатьВопрос(
Новый ОписаниеОповещения("ПослеОтветаНаВопросОКопированииПрав", ЭтотОбъект, ПараметрыЗаписи),
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Скопировать также права пользователя ""%1""?'"), Строка(ЗначениеКопирования)),
РежимДиалогаВопрос.ДаНет,
,
,
ЗаголовокВопросов);
Возврат;
КонецЕсли;
Если Не ПараметрыЗаписи.Свойство("СПустымСпискомРолей")
И ВходВПрограммуРазрешен
И ДействияВФорме.Роли = "Редактирование"
И ПользовательИБРоли.Количество() = 0 Тогда
Отказ = Истина;
ПоказатьВопрос(
Новый ОписаниеОповещения("ПослеОтветаНаВопросОЗаписиСПустымСпискомРолей", ЭтотОбъект, ПараметрыЗаписи),
НСтр("ru = 'Пользователю информационной базы не установлено ни одной роли. Продолжить?'"),
РежимДиалогаВопрос.ДаНет,
,
,
ЗаголовокВопросов);
Возврат;
КонецЕсли;
Если Не ПараметрыЗаписи.Свойство("ССозданиемПервогоАдминистратора")
И ЗначениеЗаполнено(ПользовательИБИмя)
И СписокПользователейИБПустой() Тогда
Отказ = Истина;
ПараметрыЗаписиПриПроверкеПервогоАдминистратора = ПараметрыЗаписи;
ПодключитьОбработчикОжидания("ПроверитьПервогоАдминистратора", 0.1, Истина);
Возврат;
КонецЕсли;
Если ОбщегоНазначенияКлиент.РазделениеВключено()
И ТребуетсяСинхронизацияССервисом
И Не ПараметрыЗаписи.Свойство("ПослеЗапросаПароляДляАутентификацииВСервисе") Тогда
ПараметрыЗаписи.Вставить("ПослеЗапросаПароляДляАутентификацииВСервисе");
Отказ = Истина;
ПользователиСлужебныйКлиент.ЗапроситьПарольДляАутентификацииВСервисе(
Новый ОписаниеОповещения("ПослеЗапросаПароляДляАутентификацииВСервисеПередЗаписью", ЭтотОбъект, ПараметрыЗаписи),
ЭтотОбъект,
ПарольПользователяСервиса);
Возврат;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
ТекущийОбъект.ДополнительныеСвойства.Вставить("ЗначениеКопирования", ЗначениеКопирования);
ТекущийОбъект.ДополнительныеСвойства.Вставить("ПочтаДляВосстановленияПароляУстанавливаетсяВФорме");
ТекущийОбъект.ДополнительныеСвойства.Вставить("ПарольПользователяСервиса", ПарольПользователяСервиса);
ТекущийОбъект.ДополнительныеСвойства.Вставить("СинхронизироватьССервисом", ТребуетсяСинхронизацияССервисом);
Если ТребуетсяЗаписьПользователяИБ(ЭтотОбъект) Тогда
Если ПользователиСлужебный.ДоступнаНастройкаВосстановленияПароля(УровеньДоступа) Тогда
Если ПользовательИБЗапрещеноИзменятьПароль Тогда
ПользовательИБЗапрещеноВосстанавливатьПароль = Истина;
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда
Если ПользователиСлужебный.ДоступноРедактированиеПочтыДляВосстановленияПароля(УровеньДоступа, Объект) Тогда
Если ЗначениеЗаполнено(ИмяРеквизитаСПочтойДляВосстановленияПароля)
И ПользовательИБАдресЭлектроннойПочты <> ЭтотОбъект[ИмяРеквизитаСПочтойДляВосстановленияПароля] Тогда
Если ЗначениеЗаполнено(ТекущийОбъект.Ссылка) Тогда
Подготовлен = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущийОбъект.Ссылка, "Подготовлен");
Иначе
Подготовлен = УровеньДоступа.УправлениеСписком;
КонецЕсли;
ИзменятьПочтуБезПодтвержденияПаролем = Пользователи.ЭтоПолноправныйПользователь() Или Подготовлен;
Если Не ИзменятьПочтуБезПодтвержденияПаролем Тогда
ПарольСовпадаетССохраненным = Ложь;
Если ТипЗнч(ПарольДляПодтвержденияИзмененияПочты) = Тип("Строка") Тогда
УстановитьПривилегированныйРежим(Истина);
ПарольСовпадаетССохраненным = ПользователиСлужебный.СтарыйПарольСовпадаетССохраненным(
ПарольДляПодтвержденияИзмененияПочты, Объект.ИдентификаторПользователяИБ);
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
Если Не ПарольСовпадаетССохраненным Тогда
ПарольДляПодтвержденияИзмененияПочты = Неопределено;
ВызватьИсключение НСтр("ru = 'Пароль указан неверно'");
КонецЕсли;
КонецЕсли;
ПользовательИБАдресЭлектроннойПочты = ЭтотОбъект[ИмяРеквизитаСПочтойДляВосстановленияПароля];
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ОписаниеПользователяИБ = ОписаниеПользователяИБ();
Если ЗначениеЗаполнено(Объект.ИдентификаторПользователяИБ) Тогда
ОписаниеПользователяИБ.Вставить("УникальныйИдентификатор", Объект.ИдентификаторПользователяИБ);
КонецЕсли;
ОписаниеПользователяИБ.Вставить("Действие", "Записать");
ТекущийОбъект.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ);
Если ПараметрыЗаписи.Свойство("ССозданиемПервогоАдминистратора") Тогда
ТекущийОбъект.ДополнительныеСвойства.Вставить("СозданиеАдминистратора",
НСтр("ru = 'Первый пользователь информационной базы назначается администратором.'"));
КонецЕсли;
КонецЕсли;
Если ДействияВФорме.СвойстваЭлемента <> "Редактирование" Тогда
ЗаполнитьЗначенияСвойств(ТекущийОбъект, ОбщегоНазначения.ЗначенияРеквизитовОбъекта(
ТекущийОбъект.Ссылка, "Наименование, ПометкаУдаления"));
КонецЕсли;
РегистрыСведений.СведенияОПользователях.УстановитьСведенияОПользователе(ЭтотОбъект, ТекущийОбъект);
ТекущийОбъект.ДополнительныеСвойства.Вставить("ГруппаНовогоПользователя", ГруппаНовогоПользователя);
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами");
МодульУправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда
МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией");
Если НЕ Отказ И ДействияВФорме.КонтактнаяИнформация = "Редактирование" Тогда
МодульУправлениеКонтактнойИнформацией.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект);
КонецЕсли;
КонецЕсли;
Если ФотографияЗадана И ЭтоАдресВременногоХранилища(АдресФотографии) Тогда
ТекущийОбъект.Фотография = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(АдресФотографии), Новый СжатиеДанных(9));
Иначе
ТекущийОбъект.Фотография = Новый ХранилищеЗначения(Неопределено);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Если ПараметрыЗаписи.Свойство("КопироватьПраваПользователя") Тогда
Источник = ЗначениеКопирования;
Приемник = ТекущийОбъект.Ссылка;
МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный");
МодульУправлениеДоступомСлужебный.ПриКопированииПравНовомуПользователю(Источник, Приемник);
ПользователиСлужебный.СкопироватьГруппыПользователя(Источник, Приемник);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
ТребуетсяСинхронизацияССервисом = Ложь;
Если ТребуетсяЗаписьПользователяИБ(ЭтотОбъект) Тогда
ПараметрыЗаписи.Вставить(
ТекущийОбъект.ДополнительныеСвойства.ОписаниеПользователяИБ.РезультатДействия);
КонецЕсли;
Если ПараметрыЗаписи.Свойство("ССозданиемПервогоАдминистратора") Тогда
ПользователиСлужебный.СкопироватьНастройкиПользователя("", ПользовательИБИмя);
КонецЕсли;
НастроитьФорму(ТекущийОбъект, , ПараметрыЗаписи);
ОбновитьСпособИзмененияEMailВСервисе();
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом");
МодульУправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Обсуждения")
И ЗначениеЗаполнено(Объект.ИдентификаторПользователяИБ) Тогда
МодульОбсуждения = ОбщегоНазначения.ОбщийМодуль("Обсуждения");
МодульОбсуждения.ОбновитьПользователяВСистемеВзаимодействия(ТекущийОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
КонецЕсли;
Оповестить("Запись_Пользователи", Новый Структура, Объект.Ссылка);
Если ПараметрыЗаписи.Свойство("ДобавленПользовательИБ") Тогда
Оповестить("ДобавленПользовательИБ", ПараметрыЗаписи.ДобавленПользовательИБ, ЭтотОбъект);
ИначеЕсли ПараметрыЗаписи.Свойство("ИзмененПользовательИБ") Тогда
Оповестить("ИзмененПользовательИБ", ПараметрыЗаписи.ИзмененПользовательИБ, ЭтотОбъект);
ИначеЕсли ПараметрыЗаписи.Свойство("УдаленПользовательИБ") Тогда
Оповестить("УдаленПользовательИБ", ПараметрыЗаписи.УдаленПользовательИБ, ЭтотОбъект);
ИначеЕсли ПараметрыЗаписи.Свойство("ОчищеноСопоставлениеСНесуществующимПользователемИБ") Тогда
Оповестить(
"ОчищеноСопоставлениеСНесуществующимПользователемИБ",
ПараметрыЗаписи.ОчищеноСопоставлениеСНесуществующимПользователемИБ,
ЭтотОбъект);
КонецЕсли;
Если ЗначениеЗаполнено(ГруппаНовогоПользователя) Тогда
ОповеститьОбИзменении(ГруппаНовогоПользователя);
Оповестить("Запись_ГруппыПользователей", Новый Структура, ГруппаНовогоПользователя);
ГруппаНовогоПользователя = Неопределено;
КонецЕсли;
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Обсуждения") Тогда
ОписаниеЗавершения = Новый ОписаниеОповещения("ПослеЗаписиЗавершение", ЭтотОбъект, ПараметрыЗаписи);
МодульОбсужденияСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбсужденияСлужебныйКлиент");
МодульОбсужденияСлужебныйКлиент.ПослеЗаписиПользователя(ЭтотОбъект, ОписаниеЗавершения);
Возврат;
КонецЕсли;
ПарольДляПодтвержденияИзмененияПочты = Неопределено;
ПослеЗаписиЗавершение(Неопределено, ПараметрыЗаписи);
КонецПроцедуры
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
Если ТребуетсяЗаписьПользователяИБ(ЭтотОбъект) Тогда
ОписаниеПользователяИБ = ОписаниеПользователяИБ();
ОписаниеПользователяИБ.Вставить("ИдентификаторПользователяИБ", Объект.ИдентификаторПользователяИБ);
Если ЗначениеЗаполнено(ИмяРеквизитаСПочтойДляВосстановленияПароля) Тогда
ОписаниеПользователяИБ.АдресЭлектроннойПочты = ЭтотОбъект[ИмяРеквизитаСПочтойДляВосстановленияПароля];
КонецЕсли;
ПользователиСлужебный.ПроверитьОписаниеПользователяИБ(ОписаниеПользователяИБ, Отказ, Ложь);
КонецЕсли;
Если ВходВПрограммуРазрешен
И ЗначениеЗаполнено(СрокДействия)
И СрокДействия <= НачалоДня(ТекущаяДатаСеанса()) Тогда
ОбщегоНазначения.СообщитьПользователю(
НСтр("ru = 'Ограничение должно быть до завтра или более.'"),, "ВходВПрограммуРазрешен",, Отказ);
КонецЕсли;
Если Не Элементы.Роли.ТолькоПросмотр Тогда
Ошибки = Неопределено;
ЭлементыДерева = Роли.ПолучитьЭлементы();
Для Каждого Элемент Из ЭлементыДерева Цикл
Если Не Элемент.Пометка Тогда
Продолжить;
КонецЕсли;
Если Элемент.ЭтоНесуществующаяРоль Тогда
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки,
"Роли[%1].РолиСиноним",
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Несуществующая роль ""%1"".'"), Элемент.Синоним),
"Роли",
ЭлементыДерева.Индекс(Элемент),
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Несуществующая роль ""%1"" в строке %2.'"), Элемент.Синоним, "%1"));
КонецЕсли;
Если Элемент.ЭтоНедоступнаяРоль Тогда
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки,
"Роли[%1].РолиСиноним",
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" недоступна для пользователей.'"), Элемент.Синоним),
"Роли",
ЭлементыДерева.Индекс(Элемент),
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %2 недоступна для пользователей.'"), Элемент.Синоним, "%1"));
КонецЕсли;
КонецЦикла;
ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки, Отказ);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами");
МодульУправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда
МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией");
МодульУправлениеКонтактнойИнформацией.ОбработкаПроверкиЗаполненияНаСервере(ЭтотОбъект, Объект, Отказ);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
ОбработатьИнтерфейсРолей("НастроитьИнтерфейсРолейПриЗагрузкеНастроек", Настройки);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ЗаполнитьИзПользователяИБ(Команда)
Если УровеньДоступа.УправлениеСписком
И ДействияВФорме.СвойстваЭлемента = "Редактирование" Тогда
Если ПриЧтенииВходВПрограммуРазрешен И Объект.Недействителен Тогда
Объект.Недействителен = Ложь;
НедействителенПриИзменении(Элементы.Недействителен);
КонецЕсли;
КонецЕсли;
ЗаполнитьПоляПоПользователюИБНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура НаименованиеПриИзменении(Элемент)
Если ПропуститьНаименованиеПриИзменении = Истина Тогда
Возврат;
КонецЕсли;
ОбновитьИмяДляВхода(ЭтотОбъект, Истина);
УстановитьНеобходимостьСинхронизацииССервисом(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура НаименованиеАвтоПодбор(Элемент, Текст, ДанныеВыбора,
ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
Если Не ЗначениеЗаполнено(Текст)
Или Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПодборФИО")
Или ПропуститьНаименованиеАвтоПодбор = Истина Тогда
ПропуститьНаименованиеАвтоПодбор = Ложь;
Возврат;
КонецЕсли;
МодульПодборФИОКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодборФИОКлиент");
ДанныеФИО = Новый Структура("Представление", Текст);
ДанныеКлассификатора = МодульПодборФИОКлиент.Подобрать("ФИО", ДанныеФИО);
Если ДанныеКлассификатора.Количество() > 0 Тогда
СтандартнаяОбработка = Ложь;
ДанныеВыбора = Новый СписокЗначений;
ДанныеВыбора.ЗагрузитьЗначения(ДанныеКлассификатора);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НаименованиеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПропуститьНаименованиеПриИзменении = Истина;
ДанныеНаименования = СтрРазделить(ВыбранноеЗначение, " ", Ложь);
Элементы.Наименование.ОбновитьТекстРедактирования();
Если ДанныеНаименования.Количество() < 3 Тогда
НовоеЗначение = ВыбранноеЗначение + " ";
Иначе
НовоеЗначение = ВыбранноеЗначение;
ПропуститьНаименованиеАвтоПодбор = Истина;
КонецЕсли;
Элементы.Наименование.ВыделенныйТекст = НовоеЗначение;
Если Объект.Наименование <> НовоеЗначение Тогда
Объект.Наименование = ВыбранноеЗначение;
КонецЕсли;
ПропуститьНаименованиеПриИзменении = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура НедействителенПриИзменении(Элемент)
Если РазделениеВключено
И Не Объект.Недействителен Тогда
ВходВПрограммуРазрешенЗначениеПрямогоИзменения = Истина;
КонецЕсли;
Если Объект.Недействителен Тогда
ВходВПрограммуРазрешен = Ложь;
Если Не ПользовательИБАутентификацияOpenID
И Не ПользовательИБАутентификацияOpenIDConnect
И Не ПользовательИБАутентификацияТокеномДоступа
И Не ПользовательИБАутентификацияОС
И Не ПользовательИБАутентификацияСтандартнаяЗначениеПрямогоИзменения
И ПользовательИБАутентификацияСтандартная Тогда
ПользовательИБАутентификацияСтандартная = Ложь;
КонецЕсли;
ИначеЕсли ВходВПрограммуРазрешенЗначениеПрямогоИзменения Тогда
Если Не ПользовательИБАутентификацияСтандартная
И Не ПользовательИБАутентификацияOpenID
И Не ПользовательИБАутентификацияOpenIDConnect
И Не ПользовательИБАутентификацияТокеномДоступа
И Не ПользовательИБАутентификацияОС Тогда
ПользовательИБАутентификацияСтандартная = Истина;
КонецЕсли;
ВходВПрограммуРазрешен = Истина;
КонецЕсли;
ОбновитьСвойствоПоказыватьВСпискеВыбора();
УстановитьДоступностьСвойств(ЭтотОбъект);
УстановитьНеобходимостьСинхронизацииССервисом(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ВходВПрограммуРазрешенПриИзменении(Элемент)
Если РазделениеВключено
И Не ВходВПрограммуРазрешен Тогда
ВходВПрограммуРазрешен = Истина;
Объект.Недействителен = Истина;
НедействителенПриИзменении(Элементы.Недействителен);
Возврат;
КонецЕсли;
Если Объект.ПометкаУдаления И ВходВПрограммуРазрешен Тогда
ВходВПрограммуРазрешен = Ложь;
ПоказатьПредупреждение(,
НСтр("ru = 'Чтобы разрешить вход в приложение, снимите пометку на удаление с этого пользователя.'"));
Возврат;
КонецЕсли;
Если Не ВходВПрограммуРазрешен
И Не ПользовательИБАутентификацияOpenID
И Не ПользовательИБАутентификацияOpenIDConnect
И Не ПользовательИБАутентификацияТокеномДоступа
И Не ПользовательИБАутентификацияОС
И Не ПользовательИБАутентификацияСтандартнаяЗначениеПрямогоИзменения
И ПользовательИБАутентификацияСтандартная Тогда
ПользовательИБАутентификацияСтандартная = Ложь;
КонецЕсли;
ОбновитьИмяДляВхода(ЭтотОбъект);
Если ВходВПрограммуРазрешен
И Не ПользовательИБАутентификацияOpenID
И Не ПользовательИБАутентификацияOpenIDConnect
И Не ПользовательИБАутентификацияТокеномДоступа
И Не ПользовательИБАутентификацияОС
И Не ПользовательИБАутентификацияСтандартная Тогда
ПользовательИБАутентификацияСтандартная = Истина;
КонецЕсли;
ОбновитьСвойствоПоказыватьВСпискеВыбора();
УстановитьДоступностьСвойств(ЭтотОбъект);
УстановитьНеобходимостьСинхронизацииССервисом(ЭтотОбъект);
Если Не УровеньДоступа.ИзменениеРазрешенияНаВход
И Не ВходВПрограммуРазрешен Тогда
ПоказатьПредупреждение(,
НСтр("ru = 'После записи вход в приложение сможет разрешить только администратор.'"));
КонецЕсли;
ВходВПрограммуРазрешенЗначениеПрямогоИзменения = ВходВПрограммуРазрешен;
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьОграничениеНаВходВПрограмму(Команда)
ОткрытьФорму("Справочник.Пользователи.Форма.ОграничениеНаВходВПрограмму",, ЭтотОбъект,,,,
Новый ОписаниеОповещения("ИзменитьОграничениеНаВходВПрограммуЗавершение", ЭтотОбъект));
КонецПроцедуры
&НаКлиенте
Процедура ПользовательИБИмяПриИзменении(Элемент)
ПользовательИБИмя = СокрЛП(ПользовательИБИмя);
ПользовательИБИмяЗначениеПрямогоИзменения = ПользовательИБИмя;
УстановитьДоступностьСвойств(ЭтотОбъект);
УстановитьНеобходимостьСинхронизацииССервисом(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПользовательИБАутентификацияСтандартнаяПриИзменении(Элемент)
АутентификацияПриИзменении();
ПользовательИБАутентификацияСтандартнаяЗначениеПрямогоИзменения = ПользовательИБАутентификацияСтандартная;
КонецПроцедуры
&НаКлиенте
Процедура ПотребоватьСменуПароляПриВходеПриИзменении(Элемент)
Если ПотребоватьСменуПароляПриВходе Тогда
ПользовательИБЗапрещеноИзменятьПароль = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПользовательИБПоказыватьВСпискеВыбораПриИзменении(Элемент)
УстановитьДоступностьСвойств(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПользовательИБЗапрещеноИзменятьПарольПриИзменении(Элемент)
Если ПользовательИБЗапрещеноИзменятьПароль Тогда
ПотребоватьСменуПароляПриВходе = Ложь;
ПользовательИБЗапрещеноВосстанавливатьПароль = Истина;
КонецЕсли;
УстановитьДоступностьСвойств(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПользовательИБАутентификацияOpenIDПриИзменении(Элемент)
АутентификацияПриИзменении();
КонецПроцедуры
&НаКлиенте
Процедура ПользовательИБАутентификацияOpenIDConnectПриИзменении(Элемент)
АутентификацияПриИзменении();
КонецПроцедуры
&НаКлиенте
Процедура ПользовательИБАутентификацияТокеномДоступаПриИзменении(Элемент)
АутентификацияПриИзменении();
КонецПроцедуры
&НаКлиенте
Процедура ПользовательИБАутентификацияОСПриИзменении(Элемент)
АутентификацияПриИзменении();
КонецПроцедуры
&НаКлиенте
Процедура ПользовательИБПользовательОСПриИзменении(Элемент)
УстановитьДоступностьСвойств(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПользовательИБПользовательОСНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
#Если НЕ ВебКлиент И НЕ МобильныйКлиент Тогда
ОткрытьФорму("Справочник.Пользователи.Форма.ВыборПользователяОперационнойСистемы", , Элемент);
#КонецЕсли
КонецПроцедуры
&НаКлиенте
Процедура ПользовательИБЯзыкПриИзменении(Элемент)
УстановитьДоступностьСвойств(ЭтотОбъект);
УстановитьНеобходимостьСинхронизацииССервисом(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПользовательИБРежимЗапускаПриИзменении(Элемент)
УстановитьДоступностьСвойств(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПользовательИБРежимЗапускаОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура СтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства")
И ТекущаяСтраница.Имя = "СтраницаДополнительныеРеквизиты"
И Не ПараметрыСвойств.ВыполненаОтложеннаяИнициализация Тогда
СвойстваВыполнитьОтложеннуюИнициализацию();
МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент");
МодульУправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПотребоватьСменуПароляПриВходеРасширеннаяПодсказкаОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОткрытьФорму("ОбщаяФорма.НастройкиВходаПользователей", , ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ФотографияНажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОповещениеОЗавершение = Новый ОписаниеОповещения("ФотографияНажатиеЗавершение", ЭтотОбъект);
ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла();
ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор;
ПараметрыЗагрузки.Диалог.Фильтр = НСтр("ru = 'Изображения'") + "|*.JPG;*.JPEG;*.JP2;*.JPG2;*.PNG;*.BMP;*.TIFF";
ФайловаяСистемаКлиент.ЗагрузитьФайл(ОповещениеОЗавершение, ПараметрыЗагрузки);
КонецПроцедуры
&НаКлиенте
Процедура ФотографияНажатиеЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
#Если Не ВебКлиент Тогда
Картинка = Новый Картинка(ПолучитьИзВременногоХранилища(Результат.Хранение));
Если Картинка.Формат() = ФорматКартинки.НеизвестныйФормат Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выберите файл с изображением.'"));
Возврат;
КонецЕсли;
Если Картинка.РазмерФайла() > 2 * 1024 * 1024 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выберите файл с изображением меньше 2 Мб.'"));
Возврат;
КонецЕсли;
#КонецЕсли
Если ЭтоАдресВременногоХранилища(АдресФотографии) Тогда
УдалитьИзВременногоХранилища(АдресФотографии);
КонецЕсли;
АдресФотографии = Результат.Хранение;
Модифицированность = Истина;
ФотографияЗадана = Истина;
КонецПроцедуры
#Область ПоддержкаКонтактнойИнформации
&НаКлиенте
Процедура Подключаемый_EMailПриИзменении(Элемент)
МодульУправлениеКонтактнойИнформациейКлиент =
ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент");
МодульУправлениеКонтактнойИнформациейКлиент.НачатьИзменение(ЭтотОбъект, Элемент);
УстановитьНеобходимостьСинхронизацииССервисом(ЭтотОбъект);
Если НЕ Объект.Ссылка.Пустая() Тогда
Возврат;
КонецЕсли;
ТаблицаКИ = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов;
СтрокаEMail = ТаблицаКИ.НайтиСтроки(Новый Структура("Вид",
ВидКонтактнойИнформацииEmailПользователя))[0];
Если ЗначениеЗаполнено(ЭтотОбъект[СтрокаEMail.ИмяРеквизита]) Тогда
ПользовательИБПароль = "" + Новый УникальныйИдентификатор + "qQ";
УстановитьНаличиеПароля(ЭтотОбъект, Истина, ПользователиКлиент.АвторизованныйПользователь());
КонецЕсли;
УстановитьДоступностьСвойств(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_EMailОчистка(Элемент, СтандартнаяОбработка)
Если Не Элемент.РедактированиеТекста Тогда
СтандартнаяОбработка = Ложь;
Возврат;
КонецЕсли;
МодульУправлениеКонтактнойИнформациейКлиент =
ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент");
МодульУправлениеКонтактнойИнформациейКлиент.НачатьОчистку(ЭтотОбъект, Элемент.Имя);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ТелефонПриИзменении(Элемент)
МодульУправлениеКонтактнойИнформациейКлиент =
ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент");
МодульУправлениеКонтактнойИнформациейКлиент.НачатьИзменение(ЭтотОбъект, Элемент);
УстановитьНеобходимостьСинхронизацииССервисом(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_EMailНачалоВыбора(Элемент)
Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
Возврат;
КонецЕсли;
ТаблицаКИ = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов;
Отбор = Новый Структура("Вид", ВидКонтактнойИнформацииEmailПользователя);
СтрокаEMail = ТаблицаКИ.НайтиСтроки(Отбор)[0];
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("СтараяПочта", ЭтотОбъект[СтрокаEMail.ИмяРеквизита]);
ОткрытьФорму("Справочник.Пользователи.Форма.СменаПочты", ПараметрыФормы, ЭтотОбъект,,,,
Новый ОписаниеОповещения("ПослеВыбораНовойПочты", ЭтотОбъект));
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КонтактнаяИнформацияПриИзменении(Элемент)
МодульУправлениеКонтактнойИнформациейКлиент =
ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент");
МодульУправлениеКонтактнойИнформациейКлиент.НачатьИзменение(ЭтотОбъект, Элемент);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КонтактнаяИнформацияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
МодульУправлениеКонтактнойИнформациейКлиент =
ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент");
МодульУправлениеКонтактнойИнформациейКлиент.НачатьВыбор(ЭтотОбъект, Элемент,, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КонтактнаяИнформацияПриНажатии(Элемент, СтандартнаяОбработка)
МодульУправлениеКонтактнойИнформациейКлиент =
ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент");
МодульУправлениеКонтактнойИнформациейКлиент.НачатьВыбор(ЭтотОбъект, Элемент,, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КонтактнаяИнформацияОчистка(Элемент, СтандартнаяОбработка)
МодульУправлениеКонтактнойИнформациейКлиент =
ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент");
МодульУправлениеКонтактнойИнформациейКлиент.НачатьОчистку(ЭтотОбъект, Элемент.Имя);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КонтактнаяИнформацияВыполнитьКоманду(Команда)
МодульУправлениеКонтактнойИнформациейКлиент =
ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент");
МодульУправлениеКонтактнойИнформациейКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда.Имя);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КонтактнаяИнформацияАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
МодульУправлениеКонтактнойИнформациейКлиент =
ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент");
МодульУправлениеКонтактнойИнформациейКлиент.АвтоПодборАдреса(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КонтактнаяИнформацияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
МодульУправлениеКонтактнойИнформациейКлиент =
ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент");
МодульУправлениеКонтактнойИнформациейКлиент.ОбработкаВыбора(ЭтотОбъект, ВыбранноеЗначение, Элемент.Имя, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПродолжитьОбновлениеКонтактнойИнформации(Результат, ДополнительныеПараметры) Экспорт
ОбновитьКонтактнуюИнформацию(Результат);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыРоли
&НаКлиенте
Процедура РолиПометкаПриИзменении(Элемент)
СтрокаТаблицы = Элементы.Роли.ТекущиеДанные;
Если СтрокаТаблицы = Неопределено Тогда
Возврат;
КонецЕсли;
Если СтрокаТаблицы.Пометка И СтрокаТаблицы.Имя = "ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок" Тогда
Оповещение = Новый ОписаниеОповещения("РолиПометкаПриИзмененииПослеПодтверждения", ЭтотОбъект);
ПользователиСлужебныйКлиент.ПоказатьПредупреждениеБезопасности(Оповещение,
ПользователиСлужебныйКлиентСервер.ВидыПредупрежденийБезопасности().ПередВыборомРоли);
Иначе
Если СтрокаТаблицы.Имя = "ПолныеПрава" Тогда
УстановитьНеобходимостьСинхронизацииССервисом(ЭтотОбъект);
КонецЕсли;
ОбработатьИнтерфейсРолей("ОбновитьСоставРолей");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РолиПометкаПриИзмененииПослеПодтверждения(Ответ, ПараметрыВыполнения) Экспорт
СтрокаТаблицы = Элементы.Роли.ТекущиеДанные;
Если СтрокаТаблицы = Неопределено Тогда
Возврат;
КонецЕсли;
Если Ответ = "Продолжить" Тогда
ОбработатьИнтерфейсРолей("ОбновитьСоставРолей");
Иначе
СтрокаТаблицы.Пометка = Ложь;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ЗаписатьИЗакрыть(Команда)
Записать(Новый Структура("ЗаписатьИЗакрыть"));
КонецПроцедуры
&НаКлиенте
Процедура СменитьПароль(Команда)
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ВернутьПарольБезУстановки", Истина);
ДополнительныеПараметры.Вставить("СтарыйПароль", ПользовательИБСтарыйПароль);
ДополнительныеПараметры.Вставить("ИмяДляВхода", ПользовательИБИмя);
ПользователиСлужебныйКлиент.ОткрытьФормуСменыПароля(Объект.Ссылка, Новый ОписаниеОповещения(
"СменитьПарольПослеПолученияПароля", ЭтотОбъект), ДополнительныеПараметры);
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьФотографию(Команда)
ФотографияНажатие(Элементы.Фотография, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ОчиститьФотографию(Команда)
АдресФотографии = ПоместитьВоВременноеХранилище(БиблиотекаКартинок.ПользовательБезФотографии, УникальныйИдентификатор);
ФотографияЗадана = Ложь;
Модифицированность = Истина;
КонецПроцедуры
#Область ДляРаботыИнтерфейсаРолей
&НаКлиенте
Процедура ПоказатьТолькоВыбранныеРоли(Команда)
ОбработатьИнтерфейсРолей("ТолькоВыбранныеРоли");
ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ГруппировкаРолейПоПодсистемам(Команда)
ОбработатьИнтерфейсРолей("ГруппировкаПоПодсистемам");
ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ВключитьРоли(Команда)
ОбработатьИнтерфейсРолей("ОбновитьСоставРолей", "ВключитьВыделенные");
ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтотОбъект, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ИсключитьРоли(Команда)
ОбработатьИнтерфейсРолей("ОбновитьСоставРолей", "ИсключитьВыделенные");
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент");
МодульУправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.РолиПометка.Имя);
ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Роли.Имя");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Метаданные.Роли.ПолныеПрава.Имя;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗапретИзмененияАдминистративногоДоступа");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Доступность", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.РолиПометка.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.РолиСиноним.Имя);
ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Роли.Имя");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Метаданные.Роли.ПолныеПрава.Имя;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗапретИзмененияАдминистративногоДоступа");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
КонецПроцедуры
&НаКлиенте
Процедура ПриИзмененияИспользованияВнешнихПользователей()
ОбновитьВидимостьРеквизитаПоказыватьВСпискеВыбора();
ОбновитьСвойствоПоказыватьВСпискеВыбора();
КонецПроцедуры
&НаКлиенте
Процедура ПриИзмененияНастроекВходаПользователей()
ПриИзмененияНастроекВходаПользователейНаСервере();
ОбновитьСвойствоПоказыватьВСпискеВыбора();
КонецПроцедуры
&НаСервере
Процедура ПриИзмененияНастроекВходаПользователейНаСервере()
ОбщаяНастройкаПоказыватьВСпискеВыбора =
ПользователиСлужебный.НастройкиВхода().Общие.ПоказыватьВСпискеВыбора;
ОбновитьВидимостьРеквизитаПоказыватьВСпискеВыбора();
КонецПроцедуры
&НаСервере
Процедура ОбновитьВидимостьРеквизитаПоказыватьВСпискеВыбора()
Если ОбщегоНазначения.РазделениеВключено()
Или ВнешниеПользователи.ИспользоватьВнешнихПользователей() Тогда
Элементы.ПользовательИБПоказыватьВСпискеВыбора.Видимость = Ложь;
Возврат;
КонецЕсли;
Элементы.ПользовательИБПоказыватьВСпискеВыбора.Видимость =
ОбщаяНастройкаПоказыватьВСпискеВыбора = "ВключеноДляНовыхПользователей"
Или ОбщаяНастройкаПоказыватьВСпискеВыбора = "ВыключеноДляНовыхПользователей"
КонецПроцедуры
&НаКлиенте
Процедура ПриИзмененияГруппыДоступа()
ПриИзмененияГруппыДоступаНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПриИзмененияГруппыДоступаНаСервере()
УстановитьПривилегированныйРежим(Истина);
НаличиеПрав = РегистрыСведений.СведенияОПользователях.НаличиеПрав(Объект.ИдентификаторПользователяИБ);
УстановитьПривилегированныйРежим(Ложь);
УстановитьДоступностьСвойств(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура НастроитьФорму(ТекущийОбъект, ПриСозданииНаСервере = Ложь, ПараметрыЗаписи = Неопределено)
Если НачальноеОписаниеПользователяИБ = Неопределено Тогда
Возврат;
КонецЕсли;
Если Не ПриСозданииНаСервере Тогда
ПрочитатьПользователяИБ(, Ложь);
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
РегистрыСведений.СведенияОПользователях.ПрочитатьСведенияОПользователе(ЭтотОбъект);
НаличиеПрав = РегистрыСведений.СведенияОПользователях.НаличиеПрав(Объект.ИдентификаторПользователяИБ);
УстановитьПривилегированныйРежим(Ложь);
УровеньДоступа = ПользователиСлужебный.УровеньДоступаКСвойствамПользователя(ТекущийОбъект);
ОпределитьДействияВФорме();
ОпределитьНесоответствияПользователяСПользователемИБ(ПараметрыЗаписи);
ОбработатьИнтерфейсРолей("УстановитьТолькоПросмотрРолей",
ПользователиСлужебный.ЗапретРедактированияРолей()
Или ДействияВФорме.Роли <> "Редактирование"
Или Не УровеньДоступа.НастройкиДляВхода);
Если ОбщегоНазначения.РазделениеВключено()
И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса") Тогда
МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса");
Попытка
ДействияСПользователемСервиса = МодульПользователиСлужебныйВМоделиСервиса.ПолучитьДействияСПользователемСервиса(
ТекущийОбъект.Ссылка, ДействияСПользователемСервиса);
Исключение
ОшибкаРаботыССервисом = ИнформацияОбОшибке();
КонецПопытки;
КонецЕсли;
Элементы.КонтактнаяИнформация.Видимость = ЗначениеЗаполнено(ДействияВФорме.КонтактнаяИнформация);
Элементы.СвойстваПользователяИБ.Видимость = ЗначениеЗаполнено(ДействияВФорме.СвойстваПользователяИБ);
Элементы.ГруппаИмя.Видимость = ЗначениеЗаполнено(ДействияВФорме.СвойстваПользователяИБ);
ВыводитьСписокРолей = ЗначениеЗаполнено(ДействияВФорме.Роли);
Элементы.ОтображениеРолей.Видимость = ВыводитьСписокРолей;
Элементы.РекомендуетсяПроверитьНастройкиДляВхода.Видимость =
УровеньДоступа.ИзменениеРазрешенияНаВход
И ТекущийОбъект.Подготовлен
И Не ПриЧтенииВходВПрограммуРазрешен;
Если ТекущийОбъект.Служебный Тогда
ТолькоПросмотр = Истина;
КонецЕсли;
Элементы.ГруппаСлужебныйПользователь.Видимость = ТекущийОбъект.Служебный;
ТолькоПросмотр = ТолькоПросмотр
ИЛИ ДействияВФорме.Роли <> "Редактирование"
И ДействияВФорме.СвойстваЭлемента <> "Редактирование"
И ДействияВФорме.КонтактнаяИнформация <> "Редактирование"
И ДействияВФорме.СвойстваПользователяИБ <> "Редактирование";
ДоступностьКнопки = Не ТолькоПросмотр И ПравоДоступа("Редактирование",
Метаданные.Справочники.Пользователи);
Если Элементы.ФормаЗаписатьИЗакрыть.Доступность <> ДоступностьКнопки Тогда
Элементы.ФормаЗаписатьИЗакрыть.Доступность = ДоступностьКнопки;
КонецЕсли;
Если Элементы.ИзменитьОграничениеНаВходВПрограмму.Доступность <> ДоступностьКнопки Тогда
Элементы.ИзменитьОграничениеНаВходВПрограмму.Доступность = ДоступностьКнопки;
КонецЕсли;
Если Элементы.СменитьПароль.Доступность <> ДоступностьКнопки Тогда
Элементы.СменитьПароль.Доступность = ДоступностьКнопки;
КонецЕсли;
Элементы.Наименование.ТолькоПросмотр =
Не (ДействияВФорме.СвойстваЭлемента = "Редактирование" И УровеньДоступа.УправлениеСписком);
Элементы.Недействителен.ТолькоПросмотр = Элементы.Наименование.ТолькоПросмотр;
Элементы.ФизическоеЛицо.ТолькоПросмотр = Элементы.Наименование.ТолькоПросмотр;
Элементы.Подразделение.ТолькоПросмотр = Элементы.Наименование.ТолькоПросмотр;
Элементы.СвойстваПользователяИБ.ТолькоПросмотр =
Не ( ДействияВФорме.СвойстваПользователяИБ = "Редактирование"
И (УровеньДоступа.УправлениеСписком Или УровеньДоступа.ИзменениеТекущего));
Элементы.ГруппаИмя.ТолькоПросмотр = Элементы.СвойстваПользователяИБ.ТолькоПросмотр;
Элементы.ПользовательИБИмя.ТолькоПросмотр = Не УровеньДоступа.НастройкиДляВхода;
Элементы.ПользовательИБАутентификацияСтандартная.ТолькоПросмотр = Не УровеньДоступа.НастройкиДляВхода;
Элементы.ПользовательИБАутентификацияOpenID.ТолькоПросмотр = Не УровеньДоступа.НастройкиДляВхода;
Элементы.ПользовательИБАутентификацияOpenIDConnect.ТолькоПросмотр = Не УровеньДоступа.НастройкиДляВхода;
Элементы.ПользовательИБАутентификацияТокеномДоступа.ТолькоПросмотр = Не УровеньДоступа.НастройкиДляВхода;
Элементы.ПользовательИБАутентификацияОС.ТолькоПросмотр = Не УровеньДоступа.НастройкиДляВхода;
Элементы.ПользовательИБПользовательОС.ТолькоПросмотр = Не УровеньДоступа.НастройкиДляВхода;
Элементы.ПользовательИБПоказыватьВСпискеВыбора.ТолькоПросмотр = Не УровеньДоступа.УправлениеСписком;
Элементы.ПотребоватьСменуПароляПриВходе.ТолькоПросмотр = Не УровеньДоступа.УправлениеСписком;
Элементы.ПользовательИБЗапрещеноИзменятьПароль.ТолькоПросмотр = Не УровеньДоступа.УправлениеСписком;
Элементы.ПользовательИБЗапрещеноВосстанавливатьПароль.ТолькоПросмотр = Не УровеньДоступа.УправлениеСписком;
Элементы.ПользовательИБРежимЗапуска.ТолькоПросмотр = Не УровеньДоступа.УправлениеСписком;
Элементы.Комментарий.ТолькоПросмотр =
Не (ДействияВФорме.СвойстваЭлемента = "Редактирование" И УровеньДоступа.УправлениеСписком);
УстановитьДоступностьСвойств(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ПодготовитьНеобязательныйРеквизит(ИмяРеквизита, Используется)
Если Не Используется Тогда
Элементы[ИмяРеквизита].Видимость = Ложь;
Иначе
ТипыПодразделения = Метаданные.ОпределяемыеТипы[ИмяРеквизита].Тип.Типы();
Если ТипыПодразделения.Количество() = 1 И ОбщегоНазначения.ЭтоСсылка(ТипыПодразделения[0]) Тогда
ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипыПодразделения[0]);
Элементы[ИмяРеквизита].Заголовок = ПредставлениеОбъекта(ОбъектМетаданных);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПредставлениеОбъекта(ОбъектМетаданных)
Если ЗначениеЗаполнено(ОбъектМетаданных.ПредставлениеОбъекта) Тогда
Возврат ОбъектМетаданных.ПредставлениеОбъекта;
КонецЕсли;
Возврат ОбъектМетаданных.Представление();
КонецФункции
&НаКлиенте
Процедура ПослеЗапросаПароляДляАутентификацииВСервисеПередЗаписью(НовыйПарольПользователяСервиса, ПараметрыЗаписи) Экспорт
Если НовыйПарольПользователяСервиса = Неопределено Тогда
Возврат;
КонецЕсли;
ПарольПользователяСервиса = НовыйПарольПользователяСервиса;
Попытка
Записать(ПараметрыЗаписи);
Исключение
ПарольПользователяСервиса = Неопределено;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗапросаПароляДляИзмененияПочты(Результат, ДополнительныеПараметры) Экспорт
Если ТипЗнч(Результат) = Тип("Строка") Тогда
ПарольДляПодтвержденияИзмененияПочты = Результат;
Записать(ДополнительныеПараметры.ПараметрыЗаписи);
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьИмяДляВхода(Форма, ПриИзмененииНаименования = Ложь)
Элементы = Форма.Элементы;
ПоказатьИмяСОтметкойНезаполненного = ТребуетсяЗаписьПользователяИБ(Форма, Ложь);
Элементы.ПользовательИБИмя.АвтоОтметкаНезаполненного = ПоказатьИмяСОтметкойНезаполненного;
Если Не ПоказатьИмяСОтметкойНезаполненного Тогда
Элементы.ПользовательИБИмя.ОтметкаНезаполненного = Ложь;
КонецЕсли;
Если Форма.ПользовательИБСуществует Тогда
Возврат;
КонецЕсли;
КраткоеИмя = ПользователиСлужебныйКлиентСервер.ПолучитьКраткоеИмяПользователяИБ(Форма.Объект.Наименование);
Если Не ПоказатьИмяСОтметкойНезаполненного Тогда
Если (Не ЗначениеЗаполнено(Форма.ПользовательИБИмяЗначениеПрямогоИзменения)
Или Форма.ПользовательИБИмяЗначениеПрямогоИзменения = КраткоеИмя)
И Форма.ПользовательИБИмя = КраткоеИмя Тогда
Форма.ПользовательИБИмя = "";
КонецЕсли;
Иначе
Если ПриИзмененииНаименования
Или Не ЗначениеЗаполнено(Форма.ПользовательИБИмя) Тогда
Форма.ПользовательИБИмя = КраткоеИмя;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура АутентификацияПриИзменении()
Если Не ПользовательИБАутентификацияСтандартная
И Не ПользовательИБАутентификацияOpenID
И Не ПользовательИБАутентификацияOpenIDConnect
И Не ПользовательИБАутентификацияТокеномДоступа
И Не ПользовательИБАутентификацияОС Тогда
ВходВПрограммуРазрешен = Ложь;
ПользовательИБЗапрещеноВосстанавливатьПароль = Истина;
Если РазделениеВключено Тогда
Объект.Недействителен = Истина;
НедействителенПриИзменении(Элементы.Недействителен);
Возврат;
КонецЕсли;
ИначеЕсли Не ВходВПрограммуРазрешен Тогда
ВходВПрограммуРазрешен = ВходВПрограммуРазрешенЗначениеПрямогоИзменения;
Если ЗначениеЗаполнено(ИмяРеквизитаСПочтойДляВосстановленияПароля)
И ЗначениеЗаполнено(ЭтотОбъект[ИмяРеквизитаСПочтойДляВосстановленияПароля]) Тогда
ПользовательИБЗапрещеноВосстанавливатьПароль = Ложь;
КонецЕсли;
КонецЕсли;
УстановитьДоступностьСвойств(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьСвойствоПоказыватьВСпискеВыбора()
Если ОбщаяНастройкаПоказыватьВСпискеВыбора = "СкрытоИВключеноДляВсехПользователей" Тогда
ПользовательИБПоказыватьВСпискеВыбора = ПользовательИБАутентификацияСтандартная;
ИначеЕсли ОбщаяНастройкаПоказыватьВСпискеВыбора = "СкрытоИВыключеноДляВсехПользователей" Тогда
ПользовательИБПоказыватьВСпискеВыбора = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыбораНовойПочты(НоваяПочта, Контекст) Экспорт
Если Не ЗначениеЗаполнено(НоваяПочта) Тогда
Возврат;
КонецЕсли;
ПользователиСлужебныйКлиент.ЗапроситьПарольДляАутентификацииВСервисе(
Новый ОписаниеОповещения("СменитьПочтуПослеЗапросаПароляДляАутентификацииВСервисе", ЭтотОбъект, НоваяПочта),
ЭтотОбъект,
ПарольПользователяСервиса);
КонецПроцедуры
&НаКлиенте
Процедура СменитьПочтуПослеЗапросаПароляДляАутентификацииВСервисе(НовыйПарольПользователяСервиса, НоваяПочта) Экспорт
Если НовыйПарольПользователяСервиса = Неопределено Тогда
Возврат;
КонецЕсли;
ПарольПользователяСервиса = НовыйПарольПользователяСервиса;
Попытка
СоздатьЗапросНаСменуПочты(НоваяПочта, Объект.Ссылка, ПарольПользователяСервиса);
Исключение
ПарольПользователяСервиса = Неопределено;
ВызватьИсключение;
КонецПопытки;
ПоказатьПредупреждение(,
НСтр("ru = 'На указанный адрес отправлено письмо с запросом на подтверждение.
|Почта будет изменена только после подтверждения запроса пользователем.'"));
КонецПроцедуры
&НаСервереБезКонтекста
Процедура СоздатьЗапросНаСменуПочты(Знач НоваяПочта, Знач Пользователь, Знач ПарольПользователяСервиса)
ИнтеграцияПодсистемБСП.ПриСозданииЗапросаНаСменуПочты(НоваяПочта,
Пользователь, ПарольПользователяСервиса);
КонецПроцедуры
&НаКлиенте
Процедура СменитьПарольПослеПолученияПароля(Результат, Контекст) Экспорт
Если Не ЗначениеЗаполнено(Результат) Тогда
Возврат;
КонецЕсли;
Модифицированность = Истина;
ПользовательИБПароль = Результат.НовыйПароль;
ПользовательИБСтарыйПароль = Результат.СтарыйПароль;
Если Результат.СтарыйПароль <> Неопределено Тогда
ПарольПользователяСервиса = Результат.СтарыйПароль;
КонецЕсли;
УстановитьНеобходимостьСинхронизацииССервисом(ЭтотОбъект);
УстановитьНаличиеПароля(ЭтотОбъект, ЗначениеЗаполнено(ПользовательИБПароль),
ПользователиКлиент.АвторизованныйПользователь());
УстановитьДоступностьСвойств(ЭтотОбъект);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьНаличиеПароля(Форма, ПарольУстановлен, АвторизованныйПользователь)
ПользователиСлужебныйКлиентСервер.УстановитьНаличиеПароля(Форма, ПарольУстановлен, АвторизованныйПользователь);
КонецПроцедуры
&НаСервере
Процедура ОпределитьДействияВФорме()
ДействияВФорме = Новый Структура;
ДействияВФорме.Вставить("Роли", "");
ДействияВФорме.Вставить("КонтактнаяИнформация", "Просмотр");
ДействияВФорме.Вставить("СвойстваПользователяИБ", "");
ДействияВФорме.Вставить("СвойстваЭлемента", "Просмотр");
Если Не УровеньДоступа.АдминистраторСистемы
И УровеньДоступа.ПолныеПрава
И Пользователи.ЭтоПолноправныйПользователь(Объект.Ссылка, Истина) Тогда
ДействияВФорме.Роли = "Просмотр";
ДействияВФорме.СвойстваПользователяИБ = "Просмотр";
ИначеЕсли УровеньДоступа.АдминистраторСистемы
ИЛИ УровеньДоступа.ПолныеПрава Тогда
ДействияВФорме.Роли = "Редактирование";
ДействияВФорме.КонтактнаяИнформация = "Редактирование";
ДействияВФорме.СвойстваПользователяИБ = "Редактирование";
ДействияВФорме.СвойстваЭлемента = "Редактирование";
Иначе
Если УровеньДоступа.ИзменениеТекущего Тогда
ДействияВФорме.СвойстваПользователяИБ = "Редактирование";
ДействияВФорме.КонтактнаяИнформация = "Редактирование";
КонецЕсли;
Если УровеньДоступа.УправлениеСписком Тогда
ДействияВФорме.СвойстваПользователяИБ = "Редактирование";
ДействияВФорме.КонтактнаяИнформация = "Редактирование";
ДействияВФорме.СвойстваЭлемента = "Редактирование";
Если УровеньДоступа.НастройкиДляВхода Тогда
ДействияВФорме.Роли = "Редактирование";
КонецЕсли;
Если Пользователи.ЭтоПолноправныйПользователь(Объект.Ссылка) Тогда
ДействияВФорме.Роли = "Просмотр";
КонецЕсли;
КонецЕсли;
КонецЕсли;
ПользователиСлужебный.ПриОпределенииДействийВФорме(Объект.Ссылка, ДействияВФорме);
Если СтрНайти(", Просмотр, Редактирование,", ", " + ДействияВФорме.Роли + ",") = 0 Тогда
ДействияВФорме.Роли = "";
ИначеЕсли ДействияВФорме.Роли = "Редактирование"
И ПользователиСлужебный.ЗапретРедактированияРолей() Тогда
ДействияВФорме.Роли = "Просмотр";
КонецЕсли;
Если СтрНайти(", Просмотр, Редактирование,", ", " + ДействияВФорме.КонтактнаяИнформация + ",") = 0 Тогда
ДействияВФорме.КонтактнаяИнформация = "";
КонецЕсли;
Если СтрНайти(", Просмотр, ПросмотрВсех, Редактирование, РедактированиеСвоих, РедактированиеВсех,",
", " + ДействияВФорме.СвойстваПользователяИБ + ",") = 0 Тогда
ДействияВФорме.СвойстваПользователяИБ = "";
Иначе
Если СтрНайти(ДействияВФорме.СвойстваПользователяИБ, "Просмотр") Тогда
ДействияВФорме.СвойстваПользователяИБ = "Просмотр";
ИначеЕсли СтрНайти(ДействияВФорме.СвойстваПользователяИБ, "Редактирование") Тогда
ДействияВФорме.СвойстваПользователяИБ = "Редактирование";
КонецЕсли;
КонецЕсли;
Если СтрНайти(", Просмотр, Редактирование,", ", " + ДействияВФорме.СвойстваЭлемента + ",") = 0 Тогда
ДействияВФорме.СвойстваЭлемента = "";
КонецЕсли;
Если Объект.Служебный Тогда
Если ДействияВФорме.Роли = "Редактирование" Тогда
ДействияВФорме.Роли = "Просмотр";
КонецЕсли;
Если ДействияВФорме.КонтактнаяИнформация = "Редактирование" Тогда
ДействияВФорме.КонтактнаяИнформация = "Просмотр";
КонецЕсли;
Если ДействияВФорме.СвойстваПользователяИБ = "Редактирование" Тогда
ДействияВФорме.СвойстваПользователяИБ = "Просмотр";
КонецЕсли;
Если ДействияВФорме.СвойстваЭлемента = "Редактирование" Тогда
ДействияВФорме.СвойстваЭлемента = "Просмотр";
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ОписаниеПользователяИБ(ДляПроверкиПервогоАдминистратора = Ложь)
Если УровеньДоступа.УправлениеСписком
И ДействияВФорме.СвойстваЭлемента = "Редактирование" Тогда
ПользовательИБПолноеИмя = Объект.Наименование;
КонецЕсли;
Если УровеньДоступа.АдминистраторСистемы
Или УровеньДоступа.ПолныеПрава Тогда
Результат = Пользователи.НовоеОписаниеПользователяИБ();
Пользователи.СкопироватьСвойстваПользователяИБ(
Результат,
ЭтотОбъект,
,
"УникальныйИдентификатор,
|Роли",
ПользователиСлужебный.ИменаСвойствПользователяИБСПрефиксом());
Результат.Вставить("ВходВПрограммуРазрешен", ВходВПрограммуРазрешен);
Иначе
Результат = Новый Структура;
Если УровеньДоступа.ИзменениеТекущего Тогда
Результат.Вставить("АдресЭлектроннойПочты", ПользовательИБАдресЭлектроннойПочты);
Результат.Вставить("Пароль", ПользовательИБПароль);
Результат.Вставить("Язык", ПользовательИБЯзык);
КонецЕсли;
Если УровеньДоступа.УправлениеСписком Тогда
Результат.Вставить("АдресЭлектроннойПочты", ПользовательИБАдресЭлектроннойПочты);
Результат.Вставить("ВходВПрограммуРазрешен", ВходВПрограммуРазрешен);
Результат.Вставить("ПоказыватьВСпискеВыбора", ПользовательИБПоказыватьВСпискеВыбора
И Не ВнешниеПользователи.ИспользоватьВнешнихПользователей());
Результат.Вставить("ЗапрещеноИзменятьПароль", ПользовательИБЗапрещеноИзменятьПароль);
Результат.Вставить("ЗапрещеноВосстанавливатьПароль", ПользовательИБЗапрещеноВосстанавливатьПароль);
Результат.Вставить("Язык", ПользовательИБЯзык);
Результат.Вставить("РежимЗапуска", ПользовательИБРежимЗапуска);
Если ДействияВФорме.СвойстваЭлемента = "Редактирование" Тогда
Результат.Вставить("ПолноеИмя", ПользовательИБПолноеИмя);
КонецЕсли;
КонецЕсли;
Если УровеньДоступа.НастройкиДляВхода Тогда
Результат.Вставить("АутентификацияСтандартная", ПользовательИБАутентификацияСтандартная);
Результат.Вставить("Имя", ПользовательИБИмя);
Результат.Вставить("Пароль", ПользовательИБПароль);
Результат.Вставить("АутентификацияOpenID", ПользовательИБАутентификацияOpenID);
Результат.Вставить("АутентификацияOpenIDConnect", ПользовательИБАутентификацияOpenIDConnect);
Результат.Вставить("АутентификацияТокеномДоступа", ПользовательИБАутентификацияТокеномДоступа);
Результат.Вставить("АутентификацияОС", ПользовательИБАутентификацияОС);
Результат.Вставить("ПользовательОС", ПользовательИБПользовательОС);
КонецЕсли;
КонецЕсли;
Если Не УровеньДоступа.НастройкиДляВхода Тогда
Возврат Результат;
КонецЕсли;
Если Не ПользователиСлужебный.ЗапретРедактированияРолей() Тогда
ТекущиеРоли = ПользовательИБРоли.Выгрузить(, "Роль").ВыгрузитьКолонку("Роль");
Результат.Вставить("Роли", ТекущиеРоли);
КонецЕсли;
Если ДляПроверкиПервогоАдминистратора Тогда
Возврат Результат;
КонецЕсли;
Если ПользователиСлужебный.ТребуетсяСоздатьПервогоАдминистратора(Результат) Тогда
Если Результат.Свойство("Роли") И Результат.Роли <> Неопределено Тогда
РолиАдминистратора = Результат.Роли;
Иначе
РолиАдминистратора = Новый Массив;
КонецЕсли;
Если РолиАдминистратора.Найти("ПолныеПрава") = Неопределено Тогда
РолиАдминистратора.Добавить("ПолныеПрава");
КонецЕсли;
Если РолиАдминистратора.Найти("АдминистраторСистемы") = Неопределено Тогда
РолиАдминистратора.Добавить("АдминистраторСистемы");
КонецЕсли;
Результат.Вставить("Роли", РолиАдминистратора);
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервере
Функция ТребуетсяСоздатьПервогоАдминистратора(ТекстВопроса = Неопределено)
Возврат ПользователиСлужебный.ТребуетсяСоздатьПервогоАдминистратора(
ОписаниеПользователяИБ(Истина), ТекстВопроса);
КонецФункции
&НаСервереБезКонтекста
Функция СписокПользователейИБПустой()
УстановитьПривилегированныйРежим(Истина);
Возврат Не ЗначениеЗаполнено(ПользователиИнформационнойБазы.ТекущийПользователь().Имя)
И ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() = 0;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьНеобходимостьСинхронизацииССервисом(Форма)
Форма.ТребуетсяСинхронизацияССервисом = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ПослеОтветаНаВопросОЗаписиСПустымСпискомРолей(Ответ, ПараметрыЗаписи) Экспорт
Если Ответ = КодВозвратаДиалога.Да Тогда
ПараметрыЗаписи.Вставить("СПустымСпискомРолей");
Записать(ПараметрыЗаписи);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьПервогоАдминистратора()
ПараметрыЗаписи = ПараметрыЗаписиПриПроверкеПервогоАдминистратора;
ПараметрыЗаписиПриПроверкеПервогоАдминистратора = Неопределено;
ТекстВопроса = "";
Если Не ТребуетсяСоздатьПервогоАдминистратора(ТекстВопроса) Тогда
ПараметрыЗаписи.Вставить("ССозданиемПервогоАдминистратора");
Попытка
Записать(ПараметрыЗаписи);
Исключение
ПарольПользователяСервиса = Неопределено;
ВызватьИсключение;
КонецПопытки;
Возврат;
КонецЕсли;
ЗаголовокВопроса = НСтр("ru = 'Запись пользователя информационной базы'");
ПоказатьВопрос(
Новый ОписаниеОповещения("ПослеПодтвержденияСозданияПервогоАдминистратора", ЭтотОбъект, ПараметрыЗаписи),
ТекстВопроса, РежимДиалогаВопрос.ДаНет, , , ЗаголовокВопроса);
КонецПроцедуры
&НаКлиенте
Процедура ПослеПодтвержденияСозданияПервогоАдминистратора(Ответ, ПараметрыЗаписи) Экспорт
Если Ответ <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
ВходВПрограммуРазрешен = Истина;
ПользовательИБАутентификацияСтандартная = Истина;
ОбновитьСвойствоПоказыватьВСпискеВыбора();
ПараметрыЗаписи.Вставить("ССозданиемПервогоАдминистратора");
Записать(ПараметрыЗаписи);
КонецПроцедуры
&НаКлиенте
Процедура ПослеОтветаНаВопросОКопированииПрав(Ответ, ПараметрыЗаписи) Экспорт
Если Ответ = КодВозвратаДиалога.Да Тогда
ПараметрыЗаписи.Вставить("КопироватьПраваПользователя");
Иначе
ПараметрыЗаписи.Вставить("НеКопироватьПраваПользователя");
КонецЕсли;
Записать(ПараметрыЗаписи);
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписиЗавершение(Результат, ПараметрыЗаписи) Экспорт
Если ПараметрыЗаписи <> Неопределено И ПараметрыЗаписи.Свойство("ЗаписатьИЗакрыть") Тогда
ПодключитьОбработчикОжидания("ЗакрытьФорму", 0.1, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗакрытьФорму()
Закрыть();
КонецПроцедуры
#Область ПоддержкаКонтактнойИнформации
&НаСервере
Процедура ОбновитьКонтактнуюИнформацию(Результат)
МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией");
МодульУправлениеКонтактнойИнформацией.ОбновитьКонтактнуюИнформацию(ЭтотОбъект, Объект, Результат);
КонецПроцедуры
&НаСервере
Процедура ПереопределитьРедактированиеКонтактнойИнформацииВСервисе()
Если НЕ ОбщегоНазначения.РазделениеВключено() Тогда
Возврат;
КонецЕсли;
КонтактнаяИнформация = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов;
СтрокаEMail = КонтактнаяИнформация.НайтиСтроки(Новый Структура("Вид", ВидКонтактнойИнформацииEmailПользователя))[0];
ЭлементEMail = Элементы[СтрокаEMail.ИмяРеквизита];
ЭлементEMail.УстановитьДействие("ПриИзменении", "Подключаемый_EMailПриИзменении");
ЭлементEMail.УстановитьДействие("Очистка", "Подключаемый_EMailОчистка");
ЭлементEMail.АвтоОтметкаНезаполненного = Истина;
ЭлементEMail.КнопкаВыбора = ЗначениеЗаполнено(Объект.Ссылка) И ЗначениеЗаполнено(ЭтотОбъект[СтрокаEMail.ИмяРеквизита]);
ЭлементEMail.РедактированиеТекста = Не ЭлементEMail.КнопкаВыбора;
ЭлементEMail.УстановитьДействие("НачалоВыбора", "Подключаемый_EMailНачалоВыбора");
СтрокаТелефон = КонтактнаяИнформация.НайтиСтроки(Новый Структура("Вид", ВидКонтактнойИнформацииТелефонПользователя))[0];
ЭлементТелефон = Элементы[СтрокаТелефон.ИмяРеквизита];
ЭлементТелефон.УстановитьДействие("ПриИзменении", "Подключаемый_ТелефонПриИзменении");
КонецПроцедуры
&НаСервере
Процедура ОбновитьСпособИзмененияEMailВСервисе()
Если Не ОбщегоНазначения.РазделениеВключено() Тогда
Возврат;
КонецЕсли;
КонтактнаяИнформация = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов;
СтрокаEMail = КонтактнаяИнформация.НайтиСтроки(Новый Структура("Вид", ВидКонтактнойИнформацииEmailПользователя))[0];
ЭлементEMail = Элементы[СтрокаEMail.ИмяРеквизита];
ЭлементEMail.КнопкаВыбора = ЗначениеЗаполнено(Объект.Ссылка) И ЗначениеЗаполнено(ЭтотОбъект[СтрокаEMail.ИмяРеквизита]);
ЭлементEMail.РедактированиеТекста = Не ЭлементEMail.КнопкаВыбора;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ВидКонтактнойИнформации(ИмяВида)
МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией");
Возврат МодульУправлениеКонтактнойИнформацией.ВидКонтактнойИнформацииПоИмени(ИмяВида);
КонецФункции
#КонецОбласти
#Область ПоддержкаДополнительныхРеквизитов
&НаСервере
Процедура СвойстваВыполнитьОтложеннуюИнициализацию()
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами");
МодульУправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьЗависимостиДополнительныхРеквизитов()
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент");
МодульУправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент");
МодульУправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами");
МодульУправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработкаПользователяИБ
&НаСервере
Функция НачальноеОписаниеПользователяИБ()
УстановитьПривилегированныйРежим(Истина);
Если НачальноеОписаниеПользователяИБ <> Неопределено Тогда
НачальноеОписаниеПользователяИБ.Роли = Новый Массив;
Возврат НачальноеОписаниеПользователяИБ;
КонецЕсли;
ОписаниеПользователяИБ = Пользователи.НовоеОписаниеПользователяИБ(Ложь);
Если ОбщегоНазначения.РазделениеВключено()
Или ВнешниеПользователи.ИспользоватьВнешнихПользователей() Тогда
ОписаниеПользователяИБ.ПоказыватьВСпискеВыбора = Ложь;
Иначе
ОписаниеПользователяИБ.ПоказыватьВСпискеВыбора =
ОбщаяНастройкаПоказыватьВСпискеВыбора = "ВключеноДляНовыхПользователей"
Или ОбщаяНастройкаПоказыватьВСпискеВыбора = "СкрытоИВключеноДляВсехПользователей";
КонецЕсли;
ОписаниеПользователяИБ.Роли = Новый Массив;
Возврат ОписаниеПользователяИБ;
КонецФункции
&НаСервере
Процедура ПрочитатьПользователяИБ(ПриКопированииЭлемента = Ложь, ПриСозданииНаСервере = Истина)
УстановитьПривилегированныйРежим(Истина);
ПрочитанныеСвойства = Неопределено;
ОписаниеПользователяИБ = НачальноеОписаниеПользователяИБ();
ПользовательИБСуществует = Ложь;
ПользовательИБОсновной = Ложь;
ПользовательИБПароль = Неопределено;
ВходВПрограммуРазрешен = Ложь;
ВходВПрограммуРазрешенЗначениеПрямогоИзменения = Ложь;
Если ПриСозданииНаСервере И ПриКопированииЭлемента Тогда
ПрочитанныеСвойства = Пользователи.СвойстваПользователяИБ(Параметры.ЗначениеКопирования.ИдентификаторПользователяИБ);
Если ПрочитанныеСвойства <> Неопределено Тогда
Если Пользователи.ВходВПрограммуРазрешен(ПрочитанныеСвойства) Тогда
ВходВПрограммуРазрешен = Истина;
ВходВПрограммуРазрешенЗначениеПрямогоИзменения = Истина;
ОписаниеПользователяИБ.АутентификацияСтандартная = Истина;
КонецЕсли;
ЗаполнитьЗначенияСвойств(
ОписаниеПользователяИБ,
ПрочитанныеСвойства,
"ЗапрещеноИзменятьПароль,
|ПоказыватьВСпискеВыбора,
|ОсновнойИнтерфейс,
|РежимЗапуска" + ?(Не Элементы.ПользовательИБЯзык.Видимость, "", ",
|Язык") + ?(ПользователиСлужебный.ЗапретРедактированияРолей(), "", ",
|Роли"));
КонецЕсли;
Объект.ИдентификаторПользователяИБ = Неопределено;
УстановитьНаличиеПароля(ЭтотОбъект, Ложь, Пользователи.АвторизованныйПользователь());
Иначе
ПрочитанныеСвойства = Пользователи.СвойстваПользователяИБ(Объект.ИдентификаторПользователяИБ);
Если ПрочитанныеСвойства <> Неопределено Тогда
ПользовательИБСуществует = Истина;
ПользовательИБОсновной = Истина;
ИначеЕсли ПриСозданииНаСервере И ЗначениеЗаполнено(Параметры.ИдентификаторПользователяИБ) Тогда
Если Объект.ИдентификаторПользователяИБ <> Параметры.ИдентификаторПользователяИБ Тогда
Объект.ИдентификаторПользователяИБ = Параметры.ИдентификаторПользователяИБ;
Модифицированность = Истина;
КонецЕсли;
ПрочитанныеСвойства = Пользователи.СвойстваПользователяИБ(Объект.ИдентификаторПользователяИБ);
Если ПрочитанныеСвойства <> Неопределено Тогда
ПользовательИБСуществует = Истина;
Если Объект.Наименование <> ПрочитанныеСвойства.ПолноеИмя Тогда
Объект.Наименование = ПрочитанныеСвойства.ПолноеИмя;
Модифицированность = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ПользовательИБСуществует Тогда
Если Пользователи.ВходВПрограммуРазрешен(ПрочитанныеСвойства) Тогда
ВходВПрограммуРазрешен = Истина;
ВходВПрограммуРазрешенЗначениеПрямогоИзменения = Истина;
КонецЕсли;
ЗаполнитьЗначенияСвойств(
ОписаниеПользователяИБ,
ПрочитанныеСвойства,
"Имя,
|ПолноеИмя,
|АдресЭлектроннойПочты,
|АутентификацияСтандартная,
|ПоказыватьВСпискеВыбора,
|ЗапрещеноИзменятьПароль,
|ЗапрещеноВосстанавливатьПароль,
|АутентификацияOpenID,
|АутентификацияOpenIDConnect,
|АутентификацияТокеномДоступа,
|АутентификацияОС,
|ПользовательОС,
|ОсновнойИнтерфейс,
|РежимЗапуска" + ?(Не Элементы.ПользовательИБЯзык.Видимость, "", ",
|Язык") + ?(ПользователиСлужебный.ЗапретРедактированияРолей(), "", ",
|Роли") + ",
|ЗащитаОтОпасныхДействий");
КонецЕсли;
Если ПрочитанныеСвойства = Неопределено Тогда
УстановитьНаличиеПароля(ЭтотОбъект, Ложь,
Пользователи.АвторизованныйПользователь());
Иначе
УстановитьНаличиеПароля(ЭтотОбъект, ПрочитанныеСвойства.ПарольУстановлен,
Пользователи.АвторизованныйПользователь());
КонецЕсли;
КонецЕсли;
Пользователи.СкопироватьСвойстваПользователяИБ(
ЭтотОбъект,
ОписаниеПользователяИБ,
,
"УникальныйИдентификатор,
|Роли" + ?(ВнешниеПользователи.ИспользоватьВнешнихПользователей(), ",
|ПоказыватьВСпискеВыбора", ""),
ПользователиСлужебный.ИменаСвойствПользователяИБСПрефиксом());
Если ПользовательИБОсновной И Не ВходВПрограммуРазрешен Тогда
ХранимыеСвойства = ПользователиСлужебный.ХранимыеСвойстваПользователяИБ(Объект.Ссылка);
ПользовательИБАутентификацияСтандартная = ХранимыеСвойства.АутентификацияСтандартная;
ПользовательИБАутентификацияOpenID = ХранимыеСвойства.АутентификацияOpenID;
ПользовательИБАутентификацияOpenIDConnect = ХранимыеСвойства.АутентификацияOpenIDConnect;
ПользовательИБАутентификацияТокеномДоступа = ХранимыеСвойства.АутентификацияТокеномДоступа;
ПользовательИБАутентификацияОС = ХранимыеСвойства.АутентификацияОС;
КонецЕсли;
Если ПользовательИБСуществует Тогда
ПользовательИБАутентификацияСтандартнаяЗначениеПрямогоИзменения
= ПользовательИБАутентификацияСтандартная;
КонецЕсли;
ОбработатьИнтерфейсРолей("ЗаполнитьРоли", ОписаниеПользователяИБ.Роли);
ПриЧтенииВходВПрограммуРазрешен = ВходВПрограммуРазрешен;
КонецПроцедуры
&НаСервере
Процедура ОпределитьНесоответствияПользователяСПользователемИБ(ПараметрыЗаписи = Неопределено)
ПоказатьНесоответствие = Истина;
ПоказатьКомандыУстраненияРазличий = Ложь;
Если НЕ ПользовательИБСуществует Тогда
ПоказатьНесоответствие = Ложь;
ИначеЕсли Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
Объект.Наименование = ПользовательИБПолноеИмя;
ПоказатьНесоответствие = Ложь;
ИначеЕсли УровеньДоступа.УправлениеСписком Тогда
УточнениеСвойств = Новый Массив;
Если ПользовательИБПолноеИмя <> Объект.Наименование Тогда
ПоказатьКомандыУстраненияРазличий =
ПоказатьКомандыУстраненияРазличий
Или ДействияВФорме.СвойстваЭлемента = "Редактирование";
УточнениеСвойств.Вставить(0, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Полное имя ""%1""'"),
ПользовательИБПолноеИмя));
КонецЕсли;
Если ПриЧтенииВходВПрограммуРазрешен И Объект.Недействителен Тогда
ВходВПрограммуРазрешен = Ложь;
ПоказатьКомандыУстраненияРазличий =
ПоказатьКомандыУстраненияРазличий
Или ДействияВФорме.СвойстваЭлемента = "Редактирование";
УточнениеСвойств.Вставить(0, НСтр("ru = 'Вход в приложение разрешен'"));
КонецЕсли;
Если УровеньДоступа.ИзменениеТекущего Тогда
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда
МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией");
СтрокаОписания = МодульУправлениеКонтактнойИнформацией.СтрокаОписанияПочтыДляВосстановленияПароляИзДанныхФормы(
ЭтотОбъект, ВидКонтактнойИнформацииEmailПользователя, ПользовательИБАдресЭлектроннойПочты);
Если СтрокаОписания = Неопределено Тогда
ПоказатьКомандыУстраненияРазличий =
ПоказатьКомандыУстраненияРазличий
Или ДействияВФорме.СвойстваЭлемента = "Редактирование";
УточнениеСвойств.Вставить(0, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Почта для восстановления пароля ""%1""'"),
ПользовательИБАдресЭлектроннойПочты));
КонецЕсли;
КонецЕсли;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
ОтличаютсяСохраненныеСвойстваПользователяИБ = ЗначениеЗаполнено(Объект.Ссылка)
И РегистрыСведений.СведенияОПользователях.ОтличаютсяСохраненныеСвойстваПользователяИБ(Объект);
УстановитьПривилегированныйРежим(Ложь);
ПоказатьКомментарийУстраненияРазличий =
ПоказатьКомандыУстраненияРазличий
Или ОтличаютсяСохраненныеСвойстваПользователяИБ
И ДействияВФорме.СвойстваЭлемента = "Редактирование";
Если УточнениеСвойств.Количество() > 0
Или ОтличаютсяСохраненныеСвойстваПользователяИБ Тогда
СтрокаУточненияСвойств = "";
ТекущаяСтрока = "";
Для каждого УточнениеСвойства Из УточнениеСвойств Цикл
Если СтрДлина(ТекущаяСтрока + УточнениеСвойства) > 90 Тогда
СтрокаУточненияСвойств = СтрокаУточненияСвойств + СокрП(ТекущаяСтрока) + ", " + Символы.ПС;
ТекущаяСтрока = "";
КонецЕсли;
ТекущаяСтрока = ТекущаяСтрока + ?(ЗначениеЗаполнено(ТекущаяСтрока), ", ", "") + УточнениеСвойства;
КонецЦикла;
Если ЗначениеЗаполнено(ТекущаяСтрока) Тогда
СтрокаУточненияСвойств = СтрокаУточненияСвойств + ТекущаяСтрока;
КонецЕсли;
Если ПоказатьКомментарийУстраненияРазличий Тогда
Рекомендация = Символы.ПС
+ НСтр("ru = 'Нажмите ""Записать"", чтобы устранить различия и не выводить это предупреждение.'");
ИначеЕсли Не Пользователи.ЭтоПолноправныйПользователь() Тогда
Рекомендация = Символы.ПС
+ НСтр("ru = 'Обратитесь к администратору, чтобы устранить различия.'");
Иначе
Рекомендация = "";
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаУточненияСвойств) Тогда
ПояснениеНесоответствия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Следующие свойства пользователя информационной базы отличаются от указанных в этой форме:
|%1.'"),
СтрокаУточненияСвойств) + ?(Не ОтличаютсяСохраненныеСвойстваПользователяИБ, "", "
|" + НСтр("ru = 'Картинка в списке пользователей может отображать устаревшее состояние,
|так как отличаются и некоторые другие сохраненные свойства.'"));
Иначе
ПояснениеНесоответствия =
НСтр("ru = 'Картинка в списке пользователей может отображать устаревшее состояние,
|так как некоторые свойства пользователя информационной базы отличаются от сохраненных.'");
КонецЕсли;
Элементы.СвойстваПояснениеНесоответствия.Заголовок = ПояснениеНесоответствия + Рекомендация;
Иначе
ПоказатьНесоответствие = Ложь;
КонецЕсли;
Иначе
ПоказатьНесоответствие = Ложь;
КонецЕсли;
Элементы.СвойстваОбработкаНесоответствия.Видимость = ПоказатьНесоответствие;
Элементы.СвойстваКомандыУстраненияРазличий.Видимость = ПоказатьКомандыУстраненияРазличий;
Элементы.СвойстваПояснениеНесоответствия.ВертикальноеПоложение = ?(ЗначениеЗаполнено(Рекомендация),
ВертикальноеПоложениеЭлемента.Верх, ВертикальноеПоложениеЭлемента.Центр);
ЕстьНовоеСопоставлениеСНесуществующимПользователемИБ
= НЕ ПользовательИБСуществует
И ЗначениеЗаполнено(Объект.ИдентификаторПользователяИБ);
Если ПараметрыЗаписи <> Неопределено
И ЕстьСопоставлениеСНесуществующимПользователемИБ
И НЕ ЕстьНовоеСопоставлениеСНесуществующимПользователемИБ Тогда
ПараметрыЗаписи.Вставить("ОчищеноСопоставлениеСНесуществующимПользователемИБ", Объект.Ссылка);
КонецЕсли;
ЕстьСопоставлениеСНесуществующимПользователемИБ = ЕстьНовоеСопоставлениеСНесуществующимПользователемИБ;
Если УровеньДоступа.УправлениеСписком Тогда
Элементы.СопоставлениеОбработкаНесоответствия.Видимость = ЕстьСопоставлениеСНесуществующимПользователемИБ;
Иначе
Элементы.СопоставлениеОбработкаНесоответствия.Видимость = Ложь;
КонецЕсли;
Если ДействияВФорме.СвойстваЭлемента = "Редактирование" Тогда
Рекомендация = Символы.ПС
+ НСтр("ru = 'Нажмите ""Записать"", чтобы устранить проблему и не выводить это предупреждение.'");
ИначеЕсли Не Пользователи.ЭтоПолноправныйПользователь() Тогда
Рекомендация = Символы.ПС
+ НСтр("ru = 'Обратитесь к администратору, чтобы устранить различия.'");
Иначе
Рекомендация = "";
КонецЕсли;
Элементы.СопоставлениеПояснениеНесоответствия.Заголовок =
НСтр("ru = 'Несуществующий пользователь информационной базы.'") + Рекомендация;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПоляПоПользователюИБНаСервере()
Если УровеньДоступа.УправлениеСписком
И ДействияВФорме.СвойстваЭлемента = "Редактирование" Тогда
Объект.Наименование = ПользовательИБПолноеИмя;
ЗаполнитьПолеПочтыДляВосстановленияПароляИзИБ();
КонецЕсли;
ОпределитьНесоответствияПользователяСПользователемИБ();
УстановитьДоступностьСвойств(ЭтотОбъект);
УстановитьНеобходимостьСинхронизацииССервисом(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПолеПочтыДляВосстановленияПароляИзИБ()
Если ПустаяСтрока(ИмяРеквизитаСПочтойДляВосстановленияПароля) Тогда
Возврат;
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда
МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией");
ПочтаДляВосстановленияПароляИзОбъекта = Новый Структура(ИмяРеквизитаСПочтойДляВосстановленияПароля, Неопределено);
ЗаполнитьЗначенияСвойств(ПочтаДляВосстановленияПароляИзОбъекта, ЭтотОбъект);
Если ЗначениеЗаполнено(ПочтаДляВосстановленияПароляИзОбъекта[ИмяРеквизитаСПочтойДляВосстановленияПароля])
Или ПочтаДляВосстановленияПароляИзОбъекта[ИмяРеквизитаСПочтойДляВосстановленияПароля] <> ПользовательИБАдресЭлектроннойПочты Тогда
ОписаниеПочты = МодульУправлениеКонтактнойИнформацией.СтрокаОписанияПочтыДляВосстановленияПароляИзДанныхФормы(ЭтотОбъект,
ВидКонтактнойИнформацииEmailПользователя, ЭтотОбъект[ИмяРеквизитаСПочтойДляВосстановленияПароля]);
Если ОписаниеПочты <> Неопределено Тогда
ОписаниеПочты.Представление = ПользовательИБАдресЭлектроннойПочты;
ОписаниеПочты.Значение = МодульУправлениеКонтактнойИнформацией.КонтактнаяИнформацияПоПредставлению(
ПользовательИБАдресЭлектроннойПочты, ВидКонтактнойИнформацииEmailПользователя);
ЭтотОбъект[ИмяРеквизитаСПочтойДляВосстановленияПароля] = ПользовательИБАдресЭлектроннойПочты;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область НачальноеЗаполнениеПроверкаЗаполненияДоступностьСвойств
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьДоступностьСвойств(Форма)
Элементы = Форма.Элементы;
Объект = Форма.Объект;
УровеньДоступа = Форма.УровеньДоступа;
ДействияСПользователемСервиса = Форма.ДействияСПользователемСервиса;
Если Форма.ВходВПрограммуРазрешен Тогда
Элементы.ГруппаНетПрав.Видимость = Форма.НаличиеПрав.НетПрав;
Элементы.ГруппаНетПравНаЗапуск.Видимость = Не Форма.НаличиеПрав.НетПрав
И Форма.НаличиеПрав.НедостаточноПравДляЗапуска;
Элементы.ГруппаНетПравНаВход.Видимость = Не Форма.НаличиеПрав.НетПрав
И Не Форма.НаличиеПрав.НедостаточноПравДляЗапуска
И Форма.НаличиеПрав.НедостаточноПравДляВхода;
Иначе
Элементы.ГруппаНетПрав.Видимость = Ложь;
Элементы.ГруппаНетПравНаЗапуск.Видимость = Ложь;
Элементы.ГруппаНетПравНаВход.Видимость = Ложь;
КонецЕсли;
Элементы.ВходВПрограммуРазрешен.ТолькоПросмотр =
Не ( Элементы.СвойстваПользователяИБ.ТолькоПросмотр = Ложь
И ( УровеньДоступа.ИзменениеРазрешенияНаВход
Или УровеньДоступа.ОтключениеРазрешенияНаВход И Форма.ПриЧтенииВходВПрограммуРазрешен));
Элементы.СменитьПароль.Доступность =
( УровеньДоступа.НастройкиДляВхода
Или УровеньДоступа.ИзменениеТекущего
И Не Форма.ПользовательИБЗапрещеноИзменятьПароль)
И Не Объект.Служебный;
ОбновитьИмяДляВхода(Форма);
Элементы.ВходВПрограммуРазрешен.Доступность = Не Объект.Недействителен;
Элементы.СвойстваПользователяИБ.Доступность = Не Объект.Недействителен;
Элементы.ГруппаИмя.Доступность = Не Объект.Недействителен;
Элементы.ГруппаИзменитьОграничение.Доступность = Не Объект.Недействителен
И Не Элементы.Наименование.ТолькоПросмотр;
Элементы.ПараметрыАутентификации1СПредприятия.Доступность = Форма.ПользовательИБАутентификацияСтандартная;
Элементы.ПользовательИБПользовательОС.Доступность = Форма.ПользовательИБАутентификацияОС;
Элементы.ПользовательИБЗапрещеноВосстанавливатьПароль.Доступность = Не Форма.ПользовательИБЗапрещеноИзменятьПароль;
Если ДействияСПользователемСервиса <> Неопределено Тогда
Отбор = Новый Структура("Вид", Форма.ВидКонтактнойИнформацииEmailПользователя);
НайденныеСтроки = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор);
ЗаполненEMail = (НайденныеСтроки <> Неопределено) И ЗначениеЗаполнено(Форма[НайденныеСтроки[0].ИмяРеквизита]);
Если Объект.Ссылка.Пустая() И ЗаполненEMail Тогда
МожноИзменятьПароль = Ложь;
Иначе
МожноИзменятьПароль = ДействияСПользователемСервиса.ИзменениеПароля;
КонецЕсли;
Элементы.СменитьПароль.Доступность = Элементы.СменитьПароль.Доступность И МожноИзменятьПароль;
Элементы.ПользовательИБИмя.ТолькоПросмотр = Элементы.ПользовательИБИмя.ТолькоПросмотр
ИЛИ НЕ ДействияСПользователемСервиса.ИзменениеИмени;
Элементы.Наименование.ТолькоПросмотр = Элементы.Наименование.ТолькоПросмотр
ИЛИ НЕ ДействияСПользователемСервиса.ИзменениеПолногоИмени;
Элементы.ВходВПрограммуРазрешен.Доступность = Элементы.ВходВПрограммуРазрешен.Доступность
И ДействияСПользователемСервиса.ИзменениеДоступа;
Элементы.Недействителен.Доступность = Элементы.Недействителен.Доступность
И ДействияСПользователемСервиса.ИзменениеДоступа;
Форма.ЗапретИзмененияАдминистративногоДоступа =
НЕ ДействияСПользователемСервиса.ИзменениеАдминистративногоДоступа;
КонецЕсли;
ПользователиСлужебныйКлиентСервер.ОбновитьОграничениеСрокаДействия(Форма);
КонецПроцедуры
&НаСервере
Функция ОпределитьДоступностьЭлементовКонтактнойИнформации()
Результат = Новый Соответствие;
Для Каждого СтрокаКонтактнойИнформации Из КонтактнаяИнформацияОписаниеДополнительныхРеквизитов Цикл
ДействияВидаКонтактнойИнформации = ДействияСПользователемСервиса.КонтактнаяИнформация.Получить(СтрокаКонтактнойИнформации.Вид);
Если ДействияВидаКонтактнойИнформации = Неопределено Тогда
Продолжить;
КонецЕсли;
ЭлементКонтактнойИнформации = Элементы[СтрокаКонтактнойИнформации.ИмяРеквизита];
Результат.Вставить(СтрокаКонтактнойИнформации.Вид,
Не ЭлементКонтактнойИнформации.ТолькоПросмотр
И ДействияВидаКонтактнойИнформации.Изменение);
КонецЦикла;
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура ИзменитьОграничениеНаВходВПрограммуЗавершение(Результат, Контекст) Экспорт
УстановитьДоступностьСвойств(ЭтотОбъект);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ТребуетсяЗаписьПользователяИБ(Форма, УчитыватьСтандартноеИмя = Истина)
Если Форма.ДействияВФорме.СвойстваПользователяИБ <> "Редактирование" Тогда
Возврат Ложь;
КонецЕсли;
Шаблон = Форма.НачальноеОписаниеПользователяИБ;
ТекущееИмя = "";
Если Не УчитыватьСтандартноеИмя Тогда
КраткоеИмя = ПользователиСлужебныйКлиентСервер.ПолучитьКраткоеИмяПользователяИБ(
Форма.Объект.Наименование);
Если Форма.ПользовательИБИмя = КраткоеИмя Тогда
ТекущееИмя = КраткоеИмя;
КонецЕсли;
КонецЕсли;
Если Форма.ПользовательИБСуществует
Или Форма.ВходВПрограммуРазрешен
Или Форма.ПользовательИБИмя <> ТекущееИмя
Или Форма.ПользовательИБАутентификацияСтандартная <> Шаблон.АутентификацияСтандартная
Или Форма.ПользовательИБПоказыватьВСпискеВыбора <> Шаблон.ПоказыватьВСпискеВыбора
Или Форма.ПользовательИБЗапрещеноИзменятьПароль <> Шаблон.ЗапрещеноИзменятьПароль
Или Форма.ПользовательИБПароль <> Неопределено
Или Форма.ПользовательИБАутентификацияOpenID <> Шаблон.АутентификацияOpenID
Или Форма.ПользовательИБАутентификацияOpenIDConnect <> Шаблон.АутентификацияOpenIDConnect
Или Форма.ПользовательИБАутентификацияТокеномДоступа <> Шаблон.АутентификацияТокеномДоступа
Или Форма.ПользовательИБАутентификацияОС <> Шаблон.АутентификацияОС
Или Форма.ПользовательИБПользовательОС <> ""
Или Форма.ПользовательИБРежимЗапуска <> Шаблон.РежимЗапуска
Или Форма.ПользовательИБЯзык <> Шаблон.Язык
Или Форма.ПользовательИБРоли.Количество() <> 0 Тогда
Возврат Истина;
КонецЕсли;
Если Шаблон.Свойство("ЗапрещеноВосстанавливатьПароль")
И Форма.ПользовательИБЗапрещеноВосстанавливатьПароль <> Шаблон.ЗапрещеноВосстанавливатьПароль Тогда
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды");
МодульПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
МодульПодключаемыеКомандыКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиентСервер");
МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
#КонецОбласти
#Область ДляРаботыИнтерфейсаРолей
&НаСервере
Процедура ОбработатьИнтерфейсРолей(Действие, ОсновнойПараметр = Неопределено)
ПараметрыДействия = Новый Структура;
ПараметрыДействия.Вставить("ОсновнойПараметр", ОсновнойПараметр);
ПараметрыДействия.Вставить("Форма", ЭтотОбъект);
ПараметрыДействия.Вставить("КоллекцияРолей", ПользовательИБРоли);
ПараметрыДействия.Вставить("ЗапретИзмененияАдминистративногоДоступа",
ЗапретИзмененияАдминистративногоДоступа);
ПараметрыДействия.Вставить("НазначениеРолей", "ДляАдминистраторов");
БылУстановленАдминистративныйДоступ = ПользовательИБРоли.НайтиСтроки(
Новый Структура("Роль", "ПолныеПрава")).Количество() > 0;
ПользователиСлужебный.ОбработатьИнтерфейсРолей(Действие, ПараметрыДействия);
УстановленАдминистративныйДоступ = ПользовательИБРоли.НайтиСтроки(
Новый Структура("Роль", "ПолныеПрава")).Количество() > 0;
Если УстановленАдминистративныйДоступ <> БылУстановленАдминистративныйДоступ Тогда
УстановитьНеобходимостьСинхронизацииССервисом(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецОбласти