Обновить список сертификатов. Только для внутреннего использования.
// Только для внутреннего использования.
Процедура ОбновитьСписокСертификатов(Сертификаты, СвойстваСертификатовНаКлиенте, КромеУжеДобавленных,
Личные, Ошибка, БезОтбора, ОтборПоОрганизации = Неопределено) Экспорт
ТаблицаСвойствСертификатов = Новый ТаблицаЗначений;
ТаблицаСвойствСертификатов.Колонки.Добавить("Отпечаток", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(255)));
ТаблицаСвойствСертификатов.Колонки.Добавить("КемВыдан");
ТаблицаСвойствСертификатов.Колонки.Добавить("Представление");
ТаблицаСвойствСертификатов.Колонки.Добавить("НаКлиенте", Новый ОписаниеТипов("Булево"));
ТаблицаСвойствСертификатов.Колонки.Добавить("НаСервере", Новый ОписаниеТипов("Булево"));
ТаблицаСвойствСертификатов.Колонки.Добавить("ЭтоЗаявление", Новый ОписаниеТипов("Булево"));
ТаблицаСвойствСертификатов.Колонки.Добавить("ВОблачномСервисе", Новый ОписаниеТипов("Булево"));
Для Каждого СвойстваСертификата Из СвойстваСертификатовНаКлиенте Цикл
НоваяСтрока = ТаблицаСвойствСертификатов.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СвойстваСертификата);
НоваяСтрока.НаКлиенте = Истина;
КонецЦикла;
ТаблицаСвойствСертификатов.Индексы.Добавить("Отпечаток");
Если ЭлектроннаяПодпись.СоздаватьЭлектронныеПодписиНаСервере() Тогда
МенеджерКриптографии = МенеджерКриптографии("ПолучениеСертификатов", Ложь, Ошибка);
Если МенеджерКриптографии <> Неопределено Тогда
МассивСертификатов = МенеджерКриптографии.ПолучитьХранилищеСертификатов(
ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты).ПолучитьВсе();
ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов(ТаблицаСвойствСертификатов,
МассивСертификатов, БезОтбора, ДобавкаВремени(), ТекущаяДатаСеанса());
Если Не Личные Тогда
МассивСертификатов = МенеджерКриптографии.ПолучитьХранилищеСертификатов(
ТипХранилищаСертификатовКриптографии.СертификатыПолучателей).ПолучитьВсе();
ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов(ТаблицаСвойствСертификатов,
МассивСертификатов, БезОтбора, ДобавкаВремени(), ТекущаяДатаСеанса());
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ИспользоватьЭлектроннуюПодписьВМоделиСервиса() Тогда
МодульХранилищеСертификатов = ОбщегоНазначения.ОбщийМодуль("ХранилищеСертификатов");
МассивСертификатов = МодульХранилищеСертификатов.Получить("ПерсональныеСертификаты");
ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов(ТаблицаСвойствСертификатов,
МассивСертификатов, БезОтбора, ДобавкаВремени(), ТекущаяДатаСеанса(), , Истина);
Если Не Личные Тогда
МассивСертификатов = МодульХранилищеСертификатов.Получить("СертификатыПолучателей");
ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов(ТаблицаСвойствСертификатов,
МассивСертификатов, БезОтбора, ДобавкаВремени(), ТекущаяДатаСеанса(), , Истина);
КонецЕсли;
КонецЕсли;
ОбработатьДобавленныеСертификаты(ТаблицаСвойствСертификатов, Не БезОтбора И КромеУжеДобавленных, ОтборПоОрганизации);
ТаблицаСвойствСертификатов.Индексы.Добавить("Представление");
ТаблицаСвойствСертификатов.Сортировать("Представление Возр");
ОбработанныеСтроки = Новый Соответствие;
Индекс = 0;
Отбор = Новый Структура("Отпечаток", "");
Для каждого СвойстваСертификата Из ТаблицаСвойствСертификатов Цикл
Отбор.Отпечаток = СвойстваСертификата.Отпечаток;
Строки = Сертификаты.НайтиСтроки(Отбор);
Если Строки.Количество() = 0 Тогда
Если Сертификаты.Количество()-1 < Индекс Тогда
Строка = Сертификаты.Добавить();
Иначе
Строка = Сертификаты.Вставить(Индекс);
КонецЕсли;
Иначе
Строка = Строки[0];
ИндексСтроки = Сертификаты.Индекс(Строка);
Если ИндексСтроки <> Индекс Тогда
Сертификаты.Сдвинуть(ИндексСтроки, Индекс - ИндексСтроки);
КонецЕсли;
КонецЕсли;
// Обновление только измененных значений, чтобы таблица формы не обновлялась лишний раз.
ОбновитьЗначение(Строка.Отпечаток, СвойстваСертификата.Отпечаток);
ОбновитьЗначение(Строка.Представление, СвойстваСертификата.Представление);
ОбновитьЗначение(Строка.КемВыдан, СвойстваСертификата.КемВыдан);
ОбновитьЗначение(Строка.НаКлиенте, СвойстваСертификата.НаКлиенте);
ОбновитьЗначение(Строка.НаСервере, СвойстваСертификата.НаСервере);
ОбновитьЗначение(Строка.ЭтоЗаявление, СвойстваСертификата.ЭтоЗаявление);
ОбновитьЗначение(Строка.ВОблачномСервисе, СвойстваСертификата.ВОблачномСервисе);
ОбработанныеСтроки.Вставить(Строка, Истина);
Индекс = Индекс + 1;
КонецЦикла;
Индекс = Сертификаты.Количество()-1;
Пока Индекс >=0 Цикл
Строка = Сертификаты.Получить(Индекс);
Если ОбработанныеСтроки.Получить(Строка) = Неопределено Тогда
Сертификаты.Удалить(Индекс);
КонецЕсли;
Индекс = Индекс-1;
КонецЦикла;
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
Обновить список документов - аналог кнопки F5
ОбновитьСписокЗапрещенныхРасширений (БСП)
ОбновитьСписокЗапрещенныхРасширенийВОбластиДанных (БСП)
ЗаписатьСертификатВСправочник (БСП)
ОбновитьИнформационныеСсылкиДляФормВМоделиСервиса (БСП)
ОбновитьИнформационныеСсылкиДляФормВЛокальномРежиме (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)