Как было сказано, эта статья логическое продолжение первой, вот ссылка на нее:
Добавление нового документа в формат обмена EnterpriseData (отправка)
Начальные шаги из первой статьи актуальны и для базы приемника, а именно:
- доработка непосредственно пакета XDTO
- Доработка плана обмена
- доработка общего модуля "ОбменДаннымиXDTOСервер"
- доработка общего модуля "ОбменДаннымиПереопределяемый"
- доработка модуля "МенеджерОбменаЧерезУниверсальныйФормат13" (единственное что менеджер в УНФ называется МенеджерОбменаЧерезУниверсальныйФормат18)
А теперь отличия
Как известно объекты добавленные в расширение не попадают в тип "ТипВсеСсылки", в связи с этим при тестировании обмена вываливалась ошибка, для устранения был доработан следующий код:
Общий модуль "ОбщегоНазначения"
&ИзменениеИКонтроль("МенеджерОбъектаПоСсылке")
Функция ДРП_МенеджерОбъектаПоСсылке(Ссылка)
// часть типового кода опущена для краткости, можно посмотреть в самой конфе
#вставка
ИначеЕсли ТипЗнч(Ссылка) = Тип("ДокументСсылка.ДРП_РеестрКПеречислению") Тогда
Возврат Документы[ИмяОбъекта];
#КонецВставки
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
этой доработкой мы делаем возможность вернуть менеджер объекта нашего нового документа.
&ИзменениеИКонтроль("ВидОбъектаПоТипу")
Функция ДРП_ВидОбъектаПоТипу(ТипОбъекта)
// часть типового кода опущена для краткости, можно посмотреть в самой конфе
#вставка
ИначеЕсли ТипОбъекта = Тип("ДокументСсылка.ДРП_РеестрКПеречислению") Тогда
Возврат "Документ";
#КонецВставки
Иначе
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неверный тип значения параметра (%1)'"), Строка(ТипОбъекта));
КонецЕсли;
КонецФункции
Здесь доработка похожей функции модуля которая возвращает вид объекта.
Еще один нюанс на который хотелось бы сделать акцент.
В УНФ (как и в любой другой базе на БСП) есть регистр сведений "Настройки обмена данными XDTO"
В данном регистре хранится информация по версиям формата, для каждого объекта включенного в план обмена.
Конфигурации обмениваются на максимально общем формате обмена, и из за этого, в начале когда я пытался отправить пакет по новому формату система смотрела данный регистр и видела что в базе корреспонденте максимальная версия по объекту 1.8. Формат считался не поддерживаемым в базе корреспонденте и понижался.
В связи с этим я попробовал добавить следующий код в процедуру общего модуля "обменДаннымиXDTОсервер"
&ИзменениеИКонтроль("ПоддерживаемыеОбъектыФорматаКорреспондента")
Функция ДРП_ПоддерживаемыеОбъектыФорматаКорреспондента(УзелОбмена, Режим)
//типовой код опущен для краткости
#вставка
СтрокаТЧ = ТаблицаОбъекты.Добавить();
СтрокаТЧ.Версия = "1.11";
СтрокаТЧ.Объект = "Документ.ДРП_РеестрКПеречислению";
Если СтрНайти(Режим, "Отправка") > 0 Тогда
СтрокаТЧ.Отправка = Истина;
КонецЕсли;
Если СтрНайти(Режим, "Получение") > 0 Тогда
СтрокаТЧ.Получение = Истина;
КонецЕсли;
#КонецВставки
//
Возврат ТаблицаОбъекты;
КонецФункции
Но в итоге эта доработка не понадобилась, она нужна только в момент первой отправки пакета (чтоб он успешно ушел) дальше уже система его получит и на основе его дозаполнит регистр информацией по новому формату, как показано для примера на скрине, по документу содержится информация по новому формату (1.11). Этот вывод я сделал уже по факту, когда увидел заполненный регистр.
В итоге файл успешно получен и обработан и мы видим наш скромный документ в базе приемнике.
Спасибо за внимание и за интерес к первой статье, который побудил меня поставить логическую точку в данном вопросе и написать эту статью).