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