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