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