Отказ в подписи

Для генерации файла отказа в подписи используется прямой вызов методов API: GenerateSignatureRejectionXml(V2) или GenerateSignatureRejectionXml.

Предупреждение

Обращение к методам API из ПМ приводит к тому, что позже алгоритмы придётся переписывать. По окончании перехода методы API перестанут поддерживаться. Используйте публичные методы модуля.

Сценарий работы:

  1. Формируют файлы отказа в подписи, которые сохраняются в информационную базу.

  2. Сохраненные файлы подписывают с помощью функциональности ИБ или модуля.

  3. Отправка подписанного файла отказа происходит публичным методом ЭДО_ОтправитьОтветНаДокумент.

Пример кода
Функция ВыполнитьРегламентныеДействия(Параметры)

    ОтпечатокСертификата        = ОтпечатокСертификатаИзКонтекстаСеанса();
    Документы_ОтказатьВПодписи  = ДокументыДД_ОтказатьВПодписи();

    Для Каждого ЭлементТЗ Из Документы_ОтказатьВПодписи Цикл

        ДокументДД = ЭлементТЗ.ДокументДД;

        ДвоичныеДанныеФайла_ОтказВПодписи = АПИ_ПолучитьФайлОтказаВПодписи(ДокументДД, ОтпечатокСертификата);

        РезультатПодписания = ОсновнойМодуль.ПодписатьДанныеНаСервере(ДвоичныеДанныеФайла_ОтказВПодписи, ОтпечатокСертификата);

        Если РезультатПодписания.Успешно Тогда

            ДвоичныеДанныеПодписи = РезультатПодписания.ДвоичныеДанныеПодписи;

            ДанныеОтправки = Новый Структура;
            ДанныеОтправки.Вставить("Вердикт"   , "ОтказатьВПодписи");
            ДанныеОтправки.Вставить("ДокументДД", ДокументДД);

            Попытка
                ОсновнойМодуль.ЭДО_ОтправитьОтветНаДокумент(ДанныеОтправки, ДвоичныеДанныеФайла_ОтказВПодписи, ДвоичныеДанныеПодписи);
            Исключение
                ТекстОшибки = ОписаниеОшибки();
                Сообщить(ТекстОшибки);
            КонецПопытки;

        КонецЕсли;

    КонецЦикла;

    Возврат Истина;

КонецФункции

Что делать при перевнедрении

Во время переходного периода

Требуемые действия:

  1. Обновите модуль до версии не ниже 4.54.

  2. Замените код прямого вызова метода API на вызов метода ЭДО_СгенерироватьФайлОтказа.

Предупреждение

На время переходного периода данный публичный метод будет возвращать двоичные данные файла отказа в подписи. Часть алгоритма бизнес-процесса в ПМ, связанного с подписанием и отправкой файла отказа, редактировать не нужно.

Пример кода
Функция ВыполнитьРегламентныеДействия(Параметры)

    ОтпечатокСертификата        = ОтпечатокСертификатаИзКонтекстаСеанса();
    Документы_ОтказатьВПодписи  = ДокументыДД_ОтказатьВПодписи();

    Для Каждого ЭлементТЗ Из Документы_ОтказатьВПодписи Цикл

        ДокументДД = ЭлементТЗ.ДокументДД;

        Идентификаторы = Новый Структура;

        Идентификаторы.Вставить("BoxId", ДокументДД.BoxId);
        Идентификаторы.Вставить("MessageId", ДокументДД.LetterId);
        Идентификаторы.Вставить("EntityId", ДокументДД.DocumentId);
        Идентификаторы.Вставить("ОтпечатокСертификата", ОтпечатокСертификата);

        ПричинаОтказа = "В электронном документе некорректно заполнена табличная часть";

        ДвоичныеДанныеФайла_ОтказВПодписи = ОсновнойМодуль.ЭДО_СгенерироватьФайлОтказа(Идентификаторы, ПричинаОтказа);

        РезультатПодписания = ОсновнойМодуль.ПодписатьДанныеНаСервере(ДвоичныеДанныеФайла_ОтказВПодписи, ОтпечатокСертификата);

        Если РезультатПодписания.Успешно Тогда

            ДвоичныеДанныеПодписи = РезультатПодписания.ДвоичныеДанныеПодписи;

            ДанныеОтправки = Новый Структура;
            ДанныеОтправки.Вставить("Вердикт"   , "ОтказатьВПодписи");
            ДанныеОтправки.Вставить("ДокументДД", ДокументДД);

            Попытка
                ОсновнойМодуль.ЭДО_ОтправитьОтветНаДокумент(ДанныеОтправки, ДвоичныеДанныеФайла_ОтказВПодписи, ДвоичныеДанныеПодписи);
            Исключение
                ТекстОшибки = ОписаниеОшибки();
                Сообщить(ТекстОшибки);
            КонецПопытки;

        КонецЕсли;

    КонецЦикла;

    Возврат Истина;

КонецФункции

По окончании переходного периода

Требуемые действия:

  1. Обновите модуль до версии 4.5X*.

Примечание

* Точная версия релиза будет определена ближе к окончанию переходного периода.

После обновления публичный метод ЭДО_СгенерироватьФайлОтказа начнет возвращать УС.

  1. Удалите код подписи файла УС.

Пример кода
Функция ВыполнитьРегламентныеДействия(Параметры)

    ОтпечатокСертификата        = ОтпечатокСертификатаИзКонтекстаСеанса();
    Документы_ОтказатьВПодписи  = ДокументыДД_ОтказатьВПодписи();

    Для Каждого ЭлементТЗ Из Документы_ОтказатьВПодписи Цикл

        ДокументДД = ЭлементТЗ.ДокументДД;

        Идентификаторы = Новый Структура;

        Идентификаторы.Вставить("BoxId", ДокументДД.BoxId);
        Идентификаторы.Вставить("MessageId", ДокументДД.LetterId);
        Идентификаторы.Вставить("EntityId", ДокументДД.DocumentId);

        ПричинаОтказа = "В электронном документе некорректно заполнена табличная часть";

        ДвоичныеДанныеФайла_ОтказВПодписи = ОсновнойМодуль.ЭДО_СгенерироватьФайлОтказа(Идентификаторы, ПричинаОтказа);

        ДанныеОтправки = Новый Структура;
        ДанныеОтправки.Вставить("Вердикт"   , "ОтказатьВПодписи");
        ДанныеОтправки.Вставить("ДокументДД", ДокументДД);

        Попытка
            ОсновнойМодуль.ЭДО_ОтправитьОтветНаДокумент(ДанныеОтправки, ДвоичныеДанныеФайла_ОтказВПодписи);
        Исключение
            ТекстОшибки = ОписаниеОшибки();
            Сообщить(ТекстОшибки);
        КонецПопытки;

    КонецЦикла;

    Возврат Истина;

КонецФункции