Отказ в аннулировании

В подключаемом модуле используются методы генерации, подписания и отправки файлов отказа в аннулировании:

Пример кода
Процедура ОтказатьВАннулировании(ОтпечатокСертификата)

    ТекстПричиныОтказаВАннулировании = "В аннулировании отказано";

    ВариантыОтветаПоДокументу = ОсновнойМодуль.ЭДО_Перечисление_ВариантыОтветаПоДокументу();

    Документы_ОтказатьВАннулировании = ДокументыДД_ОтказатьВАннулировании();

    МассивДокументовДляАннулирования = Новый Массив;

    Пока Документы_ОтказатьВАннулировании.Следующий() Цикл

        МассивДокументовДляАннулирования.Добавить(Документы_ОтказатьВАннулировании.ДокументДД);

    КонецЦикла;

    Если МассивДокументовДляАннулирования.Количество() > 0 Тогда

        МассивИдентификаторов = ОсновнойМодуль.ПолучитьМассивИдентификаторовПоМассивуДокументов(МассивДокументовДляАннулирования);

        ОсновнойМодуль.ДобавитьДвоичныйКонтентАннулированияОтказаВАннулировании(МассивИдентификаторов, ТекстПричиныОтказаВАннулировании, ВариантыОтветаПоДокументу.ОтказатьВАннулировании);

        Для Каждого СтруктураИдентификаторов Из МассивИдентификаторов Цикл

            Для Каждого СтруктураДокумента Из СтруктураИдентификаторов.Documents Цикл

                Если ЗначениеЗаполнено(СтруктураДокумента.ТекстОшибки) Тогда
                    Продолжить;
                КонецЕсли;

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

                Если Не РезультатПодписания.Успешно Тогда
                    СтруктураДокумента.Вставить("ОписаниеОшибки", РезультатПодписания.ОписаниеОшибки);
                    Продолжить;
                КонецЕсли;

                СтруктураДокумента.Вставить("Signature", Base64Строка(РезультатПодписания.ДвоичныеДанныеПодписи));

            КонецЦикла;

        КонецЦикла;

        ОсновнойМодуль.ЭДО_АннулироватьОтказатьВАннулировании(МассивИдентификаторов, ВариантыОтветаПоДокументу.ОтказатьВАннулировании);

    КонецЕсли;

КонецПроцедуры

Для перевнедрения данного сценария используйте один из методов:

Для генерации и отправки файла отказа в аннулировании используйте метод ЭДО_СгенерироватьФайлОтказа.

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

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

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

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

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

  3. Подпишите двоичные данные файла отказа.

  4. Отправьте отказ в аннулировании с помощью метода ЭДО_ОтправитьОтветНаДокумент.

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

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

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

        ДокументДД = ЭлементТЗ.ДокументДД;
        Идентификаторы_ПОА = ОсновнойМодуль.ЭДО_ИдентификаторыПредложенияОбАннулировании(ДокументДД);

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

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

        ПричинаОтказа = "Документ принят к учету. Требуется корректировка.";

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

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

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

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

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

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

        КонецЕсли;

    КонецЦикла;

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

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

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

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

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

  2. Удалите код, связанный с подписанием файла УС.

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

    Документы_ОтказатьВАннулировании  = ДокументыДД_ОтказатьВАннулировании();

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

        ДокументДД = ЭлементТЗ.ДокументДД;
        Идентификаторы_ПОА = ОсновнойМодуль.ЭДО_ИдентификаторыПредложенияОбАннулировании(ДокументДД);

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

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

        ПричинаОтказа = "Документ принят к учету. Требуется корректировка.";

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

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

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

    КонецЦикла;

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

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

Примечание

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

Если требуется указать другие данные отправителя, то используйте третий параметр метода.

Пример кода
ОтправительУС = ОсновнойМодуль.Контракт_УчастникОбменаУниверсальнымиСообщениями();

ОтправительУС.Фамилия   = "Булгаков";
ОтправительУС.Имя       = "Михаил";
ОтправительУС.Отчество  = "Афанасьевич";
ОтправительУС.Должность = "Писатель, драматург, театральный режиссер и актер";

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