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