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