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