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