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