Документооборот с контролирующими органами / Выбор сертификата / Модуль формы

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

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

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

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

&НаКлиенте
Процедура СертификатыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	КоманднаяПанельФормыВыбрать(Неопределено);
	
КонецПроцедуры

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

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура КоманднаяПанельФормыПоказыватьПросроченные(Команда)
	
	Элементы.ПоказыватьПросроченные.Пометка = НЕ Элементы.ПоказыватьПросроченные.Пометка;
	ПереформироватьТаблицуСертификатов();

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

&НаКлиенте
Процедура СертификатыКнопкаОткрыть(Команда)
	
	ТекДанные = Элементы.Сертификаты.ТекущиеДанные;
	Если ТекДанные = Неопределено Тогда
		ПоказатьПредупреждение(, НСтр("ru = 'Выберите в таблице сертификат для показа.'"));
	Иначе
		СертификатДляПоказа = Новый Структура("Адрес", АдресСертификата(ТекДанные.Base64));
		КриптографияЭДКОКлиент.ПоказатьСертификат(СертификатДляПоказа);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура КоманднаяПанельФормыВыбрать(Кнопка)
	
	Если Элементы.Сертификаты.ТекущиеДанные = Неопределено Тогда
		ПоказатьПредупреждение(,НСтр("ru = 'Выберите сертификат'"));
	Иначе
		ТекущиеДанныеСтруктурой = ДанныеФормыЭлементКоллекцииВСтруктуру();
		Закрыть(ТекущиеДанныеСтруктурой);
	КонецЕсли;
	
КонецПроцедуры

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

#Область СлужебныеПроцедурыИФункции

&НаСервере
Функция АдресСертификата(Base64) 
	
	ДвДанные = Base64Значение(Base64);
	Адрес = ПоместитьВоВременноеХранилище(ДвДанные, Новый УникальныйИдентификатор);
	
	Возврат Адрес;
		
КонецФункции

&НаКлиенте
Функция ДанныеФормыЭлементКоллекцииВСтруктуру()
	
	ТекущиеДанные = Элементы.Сертификаты.ТекущиеДанные;
	
	Результат = Новый Структура;
	
	Для Каждого Колонка Из КолонкиТаблицы() Цикл
		Результат.Вставить(Колонка, ТекущиеДанные[Колонка]);
	КонецЦикла;
	
	Возврат Результат;
	
КонецФункции

&НаСервере
Функция КолонкиТаблицы()
	
	Перем Результат, Реквизит;
	
	Результат = Новый Массив;
	
	Для Каждого Реквизит Из ЭтаФорма.ПолучитьРеквизиты("ОблачныеСертификатыКалуги") Цикл
		Результат.Добавить(Реквизит.Имя);
	КонецЦикла;
	
	Возврат Результат;
	
КонецФункции

&НаСервере
Процедура ПересчитатьТаблицуСертификатов(ТекущийСертификат)
	
	ОблачныеСертификатыКалуги.Очистить();
	
	ИдентификаторСтроки = 0;
	ТекущаяДата = ТекущаяДатаСеанса();
	
	Для каждого Строка Из ОблачныеСертификатыСырыеДанные Цикл
		
		Валиден = ТекущаяДата <= Строка.Значение.ДействителенПо;
		
		Если НЕ Элементы.ПоказыватьПросроченные.Пометка 
			И НЕ Валиден Тогда
			Продолжить;
		КонецЕсли;
		
		Сертификат = Новый СертификатКриптографии(Base64Значение(Строка.Значение.Base64));
		Владелец = ДокументооборотСКОКлиентСервер.ВладелецСертификат(Сертификат);
		
		ИННы = ДокументооборотСКОКлиентСервер.ИННыИзСертификата(Владелец);
		
		НоваяСтрока = ОблачныеСертификатыКалуги.Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка.Значение);
		НоваяСтрока.ЭтоОблачныйСертификат = Истина;
		НоваяСтрока.ИННВладельца = ИННы.ФЛ;
		НоваяСтрока.ИНН = ИННы.ЮЛ;
		НоваяСтрока.Валиден = Валиден;
		
		Владелец.Свойство("O", НоваяСтрока.Организация);

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

&НаКлиенте
Процедура ПереформироватьТаблицуСертификатов()
	
	ТекущийСертификат = ЗапомнитьТекущейСертификат();
	ПересчитатьТаблицуСертификатов(ТекущийСертификат);
	
КонецПроцедуры

&НаКлиенте
Функция ЗапомнитьТекущейСертификат()
	
	// запоминаем текущий сертификат
	Если Элементы.Сертификаты.ТекущиеДанные <> Неопределено Тогда
		ТекущийСертификат = Элементы.Сертификаты.ТекущиеДанные.Отпечаток;
	КонецЕсли;
	
	Возврат ТекущийСертификат;
	
КонецФункции

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

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