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