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