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