Документооборот с контролирующими органами / Мастер действия при переиздании сертификата / Модуль формы

файл

#Область ОписаниеПеременных

&НаКлиенте
Перем КонтекстЭДОКлиент;

#КонецОбласти

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	// Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест".
	Если Параметры.Свойство("АвтоТест") Тогда
		Возврат;
	КонецЕсли;
	
	Инициализация(Параметры);
	УправлениеФормой(ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ПриОткрытииЗавершение", ЭтотОбъект);
	ДокументооборотСКОКлиент.ПолучитьКонтекстЭДО(ОписаниеОповещения);
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура СпособПодтвержденияКриптооперацийПриИзменении(Элемент)
	ОбработкаЗаявленийАбонентаКлиентСервер.УстановитьМодифицированность(ЭтотОбъект);
КонецПроцедуры

&НаКлиенте
Процедура ВключатьЛицензиюКриптоПроВСертификатПриИзменении(Элемент)
	
	Если ВключатьЛицензиюКриптоПроВСертификат И ПредупреждатьПроНаличиеЛицензииКриптоПро Тогда
		
		ОписаниеОповещения = Новый ОписаниеОповещения(
			"ВключатьЛицензиюКриптоПроВСертификатПриИзменении_Завершение", 
			ЭтотОбъект);
			
		ТекстВопроса = НСтр("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);
	Иначе
		ЭлементФормы.ЦветТекста = Новый Цвет;
	КонецЕсли;
	
	Форма.УчетнаяЗаписьОблачнойПодписиПредставление = ПредставлениеМестаХранения;
	ЭлементФормы.Видимость = ДоступностьРаздела;
	Форма.Элементы.ВыбранноеМестоХраненияКлюча.ОтображениеПодсказки = ?(ДоступностьРаздела, ОтображениеПодсказки.ОтображатьСнизу, ОтображениеПодсказки.Нет);
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура ИзменитьОформлениеФлагаДобавитьЛицензиюКриптоПро(Форма)
	
	Элементы = Форма.Элементы;
	
	ЭтоОблако = Форма.ЭтоУчетнаяЗаписьВМоделиСервиса И НЕ Форма.ЭтоПереходВКоробку;
	
	Видимость = 
		Форма.ПоказыватьФлагВключатьЛицензиюКриптоПроВСертификат
		И Форма.ИзменитьМестоХранения 
		И НЕ ЭтоОблако 
		И НЕ Форма.ЭтоПереходВОблако;
	
	Элементы.ВключатьЛицензиюКриптоПроВСертификат.Доступность = НЕ ИспользоватьСуществующий(Форма);
	Элементы.ВключатьЛицензиюКриптоПроВСертификат.Видимость = Видимость;
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьИспользованиеДолговременногоТокена()
	
	ОбработкаЗаявленийАбонента.ЗаполнитьИспользованиеДолговременногоТокена(ЭтотОбъект);
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Функция ИспользоватьСуществующий(Форма)
	Возврат ОбработкаЗаявленийАбонентаКлиентСервер.ИспользоватьСуществующий(Форма);
КонецФункции

&НаКлиенте
Процедура ПриОткрытииЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	КонтекстЭДОКлиент = Результат.КонтекстЭДО;

КонецПроцедуры

&НаСервереБезКонтекста
Функция РеквизитыОрганизации(ТекущаяОрганизация)
	
	Результат = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ТекущаяОрганизация, "ИНН");
	Возврат Результат;
	
КонецФункции

&НаКлиенте
Процедура ВыбратьУчетнуюЗаписьОблачнойПодписи(Элемент)
	
	ОповещениеСледующее = Новый ОписаниеОповещения("ВыбратьУчетнуюЗаписьОблачнойПодписиПослеВыбора", ЭтотОбъект);
	
	ПараметрыОперации = Новый Структура;
	ПараметрыОперации.Вставить("ИНН", РеквизитыОрганизации(Организация).ИНН);
	
	КонтекстЭДОКлиент.ОткрытьНастройкиОблачнойПодписи(
				ОповещениеСледующее, 
				УчетнаяЗаписьОблачнойПодписи, 
				Логин, 
				СерверОблачнойПодписи, 
				Организация, 
				Ложь,
				ТолькоПросмотр,
				ПараметрыОперации);
				
КонецПроцедуры

&НаКлиенте
Процедура ВыбратьУчетнуюЗаписьОблачнойПодписиПослеВыбора(РезультатВыбора, ДополнительныеПараметры) Экспорт
	
	Если РезультатВыбора <> Неопределено Тогда
		ОбработкаЗаявленийАбонентаКлиентСервер.УстановитьМодифицированность(ЭтотОбъект);
		УчетнаяЗаписьОблачнойПодписи = РезультатВыбора.УчетнаяЗаписьОблачнойПодписи;
		Логин = РезультатВыбора.Логин;
		СерверОблачнойПодписи = РезультатВыбора.СерверОблачнойПодписи;
		ЛогинПроверен = ЗначениеЗаполнено(Логин) И НЕ ЗначениеЗаполнено(УчетнаяЗаписьОблачнойПодписи);
		ИзменитьОформлениеОблачнаяПодпись(ЭтотОбъект);
	КонецЕсли;	
	
КонецПроцедуры

#КонецОбласти

Связанные материалы