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