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