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