Отказ в подписи
Для генерации файла отказа в подписи используется прямой вызов методов API: GenerateSignatureRejectionXml(V2) или GenerateSignatureRejectionXml.
Предупреждение
Обращение к методам API из ПМ приводит к тому, что позже алгоритмы придётся переписывать. По окончании перехода методы API перестанут поддерживаться. Используйте публичные методы модуля.
Сценарий работы:
Формируют файлы отказа в подписи, которые сохраняются в информационную базу.
Сохраненные файлы подписывают с помощью функциональности ИБ или модуля.
Отправка подписанного файла отказа происходит публичным методом ЭДО_ОтправитьОтветНаДокумент.
Пример кода
Функция ВыполнитьРегламентныеДействия(Параметры)
ОтпечатокСертификата = ОтпечатокСертификатаИзКонтекстаСеанса();
Документы_ОтказатьВПодписи = ДокументыДД_ОтказатьВПодписи();
Для Каждого ЭлементТЗ Из Документы_ОтказатьВПодписи Цикл
ДокументДД = ЭлементТЗ.ДокументДД;
ДвоичныеДанныеФайла_ОтказВПодписи = АПИ_ПолучитьФайлОтказаВПодписи(ДокументДД, ОтпечатокСертификата);
РезультатПодписания = ОсновнойМодуль.ПодписатьДанныеНаСервере(ДвоичныеДанныеФайла_ОтказВПодписи, ОтпечатокСертификата);
Если РезультатПодписания.Успешно Тогда
ДвоичныеДанныеПодписи = РезультатПодписания.ДвоичныеДанныеПодписи;
ДанныеОтправки = Новый Структура;
ДанныеОтправки.Вставить("Вердикт" , "ОтказатьВПодписи");
ДанныеОтправки.Вставить("ДокументДД", ДокументДД);
Попытка
ОсновнойМодуль.ЭДО_ОтправитьОтветНаДокумент(ДанныеОтправки, ДвоичныеДанныеФайла_ОтказВПодписи, ДвоичныеДанныеПодписи);
Исключение
ТекстОшибки = ОписаниеОшибки();
Сообщить(ТекстОшибки);
КонецПопытки;
КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецФункции
Для перевнедрения данного сценария используйте один из методов:
Для генерации файла отказа в аннулировании используйте метод ЭДО_СгенерироватьФайлОтказа.
Что делать при перевнедрении
Во время переходного периода
Требуемые действия:
Обновите модуль до версии не ниже 4.59.
Замените код прямого вызова метода API на вызов метода ЭДО_СгенерироватьФайлОтказа.
Примечание
На время переходного периода данный публичный метод будет возвращать двоичные данные файла отказа в подписи. Часть алгоритма бизнес-процесса в ПМ, связанного с подписанием и отправкой файла отказа, редактировать не нужно.
Пример кода
Функция ВыполнитьРегламентныеДействия(Параметры)
ОтпечатокСертификата = ОтпечатокСертификатаИзКонтекстаСеанса();
Документы_ОтказатьВПодписи = ДокументыДД_ОтказатьВПодписи();
Для Каждого ЭлементТЗ Из Документы_ОтказатьВПодписи Цикл
ДокументДД = ЭлементТЗ.ДокументДД;
Идентификаторы = Новый Структура;
Идентификаторы.Вставить("BoxId", ДокументДД.BoxId);
Идентификаторы.Вставить("MessageId", ДокументДД.LetterId);
Идентификаторы.Вставить("EntityId", ДокументДД.DocumentId);
Идентификаторы.Вставить("ОтпечатокСертификата", ОтпечатокСертификата);
ПричинаОтказа = "В электронном документе некорректно заполнена табличная часть";
ДвоичныеДанныеФайла_ОтказВПодписи = ОсновнойМодуль.ЭДО_СгенерироватьФайлОтказа(Идентификаторы, ПричинаОтказа);
РезультатПодписания = ОсновнойМодуль.ПодписатьДанныеНаСервере(ДвоичныеДанныеФайла_ОтказВПодписи, ОтпечатокСертификата);
Если РезультатПодписания.Успешно Тогда
ДвоичныеДанныеПодписи = РезультатПодписания.ДвоичныеДанныеПодписи;
ДанныеОтправки = Новый Структура;
ДанныеОтправки.Вставить("Вердикт" , "ОтказатьВПодписи");
ДанныеОтправки.Вставить("ДокументДД", ДокументДД);
Попытка
ОсновнойМодуль.ЭДО_ОтправитьОтветНаДокумент(ДанныеОтправки, ДвоичныеДанныеФайла_ОтказВПодписи, ДвоичныеДанныеПодписи);
Исключение
ТекстОшибки = ОписаниеОшибки();
Сообщить(ТекстОшибки);
КонецПопытки;
КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецФункции
По окончании переходного периода
Требуемые действия:
Обновите модуль до версии не ниже 4.63.
После окончания переходного периода публичный метод ЭДО_СгенерироватьФайлОтказа начнет возвращать файл УС.
Удалите код подписи файла УС.
Пример кода
Функция ВыполнитьРегламентныеДействия(Параметры)
ОтпечатокСертификата = ОтпечатокСертификатаИзКонтекстаСеанса();
Документы_ОтказатьВПодписи = ДокументыДД_ОтказатьВПодписи();
Для Каждого ЭлементТЗ Из Документы_ОтказатьВПодписи Цикл
ДокументДД = ЭлементТЗ.ДокументДД;
Идентификаторы = Новый Структура;
Идентификаторы.Вставить("BoxId", ДокументДД.BoxId);
Идентификаторы.Вставить("MessageId", ДокументДД.LetterId);
Идентификаторы.Вставить("EntityId", ДокументДД.DocumentId);
ПричинаОтказа = "В электронном документе некорректно заполнена табличная часть";
ДвоичныеДанныеФайла_ОтказВПодписи = ОсновнойМодуль.ЭДО_СгенерироватьФайлОтказа(Идентификаторы, ПричинаОтказа);
ДанныеОтправки = Новый Структура;
ДанныеОтправки.Вставить("Вердикт" , "ОтказатьВПодписи");
ДанныеОтправки.Вставить("ДокументДД", ДокументДД);
Попытка
ОсновнойМодуль.ЭДО_ОтправитьОтветНаДокумент(ДанныеОтправки, ДвоичныеДанныеФайла_ОтказВПодписи);
Исключение
ТекстОшибки = ОписаниеОшибки();
Сообщить(ТекстОшибки);
КонецПопытки;
КонецЦикла;
Возврат Истина;
КонецФункции
Примечание
По умолчанию метод ЭДО_СгенерироватьФайлОтказа заполняет данные отправителя УС данными авторизовавшегося в модуле пользователя.
Если требуется указать другие данные отправителя, то используйте третий параметр метода.
Пример кода
ОтправительУС = ОсновнойМодуль.Контракт_УчастникОбменаУниверсальнымиСообщениями();
ОтправительУС.Фамилия = "Булгаков";
ОтправительУС.Имя = "Михаил";
ОтправительУС.Отчество = "Афанасьевич";
ОтправительУС.Должность = "Писатель, драматург, театральный режиссер и актер";
ДвоичныеДанныеФайла_Отказа = ОсновнойМодуль.ЭДО_СгенерироватьФайлОтказа(Идентификаторы, ПричинаОтказа, ОтправительУС);
Для генерации и отправки файла отказа в подписи используйте метод ЭДО_ПодготовитьИОтправитьОтветНаДокумент.
Предупреждение
Для этого варианта установите на сервере сертификат для подписания документов. Также заполните соответствующие настройки организации в модуле. См. раздел «Системные настройки» в модуле Диадок 1С в карточке организации.
Что делать при перевнедрении
Во время переходного периода
Требуемые действия:
Обновите модуль до версии не ниже 4.58.
Выполните установку сертификата на сервер и заполните соответствующую настройку модуля.
Переведите алгоритм генерации и отправки отказа в подписи на метод ЭДО_ПодготовитьИОтправитьОтветНаДокумент:
3.1 Для документов, по которым требуется сформировать и отправить отказ в подписи, заполните реквизит «ТребуемоеДействиеВДД» в соответствующем элементе справочника Диадок_Документы. Передаваемое значение: «ОтказатьВПодписи».
3.2 Вызовите метод, в который передать ссылку на электронный документ из подсистемы хранения Диадока.
Пример кода
Процедура ОтказатьВПодписи()
ВариантыОтветаПоДокументу = ОсновнойМодуль.ЭДО_Перечисление_ВариантыОтветаПоДокументу();
Документы_ОтказатьВПодписи = ДокументыДД_ОтказатьВПодписи();
УстанавливаемыеРеквизиты = Новый Структура("ТребуемоеДействиеВДД", ВариантыОтветаПоДокументу.ОтказатьВПодписи);
Пока Документы_ОтказатьВПодписи.Следующий() Цикл
ОсновнойМодуль.ЭДО_ЗаписатьРеквизитыДокумента(Документы_ОтказатьВПодписи.ДокументДД, УстанавливаемыеРеквизиты);
ОсновнойМодуль.ЭДО_ПодготовитьИОтправитьОтветНаДокумент(Документы_ОтказатьВПодписи.ДокументДД);
КонецЦикла;
КонецПроцедуры
По окончании переходного периода
Требуемые действия:
Обновите модуль до версии не ниже 4.63.