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