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