При настройке обмена через универсальный формат (EnterpriseData) с использованием конфигурации «Конвертация данных 3.0» (КД3) разработчики часто сталкиваются с цепочкой ошибок еще на этапе загрузки метаданных и существующих правил из типовых конфигураций. Разберем по шагам, почему возникают эти ошибки и как корректно подготовить данные для работы в КД3.
Проанализируем ключевые проблемы, возникающие в цепочке переноса правил из типовых конфигураций (например, УТ 11, БП 3.0, ERP) в конфигурацию КД3:
Метод объекта не обнаружен (ЭтоПланОбменаXDTO) или Метод объекта не обнаружен (ПолучитьВерсииФорматаОбмена) возникают из-за того, что в разных версиях Библиотеки стандартных подсистем (БСП) разработчики 1С перемещали служебные функции между общими модулями ОбменДаннымиСервер, ОбменДаннымиXDTOСервер и модулями менеджеров планов обмена. Обработка из комплекта КД3 пытается вызвать функцию по устаревшему расположению.Поле объекта не обнаружено). При загрузке правил конвертации объектов (ПКО) обработка ЗагрузкаПравилСинхронизацииИзФайлов в КД3 пытается получить свойство ВариантИдентификации. Однако если правило создано только для направления выгрузки («Отправка»), данный блок в метаданных правила отсутствует, что вызывает аварийное падение процедуры.МенеджерОбменаЧерезУниверсальныйФормат (например, // Конвертация УП2.2.4 от...) сверяется с именем импортированной структуры метаданных. Это уведомление носит информационный характер.МенеджерОбменаЧерезУниверсальныйФормат, МенеджерОбменаЧерезУниверсальныйФормат13 и т.д.). Загрузка не того модуля приводит к тому, что правила обработки данных (ПОД) остаются пустыми.Если внешняя обработка выгрузки правил выдает ошибку при открытии в базе-источнике, скорректируем программный код в форме обработки. Откроем внешнюю обработку в конфигураторе и найдем вызовы функций проверки планов обмена.
Посмотрим на пример вызова, вызывающего ошибку в старых версиях обработки:
// Ошибочный вызов в устаревшей обработке:
Если ОбменДаннымиСервер.ЭтоПланОбменаXDTO(ПланОбмена.Имя) Тогда
// ...
КонецЕсли;
Для исправления обратимся напрямую к соответствующему модулю или проверим функционал через безопасную конструкцию:
// Корректный вариант проверки:
ЭтоПланXDTO = Ложь;
Попытка
ЭтоПланXDTO = ОбменДаннымиXDTOСервер.ЭтоПланОбменаXDTO(ПланОбмена.Имя);
Исключение
// Если метод отсутствует в ОбменДаннымиXDTOСервер, проверяем наличие состава плана обмена
ПланОбменаМетаданные = Метаданные.ПланыОбмена.Найти(ПланОбмена.Имя);
Если ПланОбменаМетаданные <> Неопределено Тогда
ЭтоПланXDTO = (ПланОбменаМетаданные.Имя = "СинхронизацияДанныхЧерезУниверсальныйФормат");
КонецЕсли;
КонецПопытки;
Аналогично поступим с процедурой получения версий формата. Если метод ПолучитьВерсииФорматаОбмена отсутствует у менеджера плана обмена, его вызов переносим в блок обработки исключений либо вызываем экспортный метод непосредственно из модуля менеджера плана обмена СинхронизацияДанныхЧерезУниверсальныйФормат.
Выясним причину ошибки Поле объекта не обнаружено при выполнении загрузки в КД3. В процедуре ЗагрузитьПКО() обработки ЗагрузкаПравилСинхронизацииИзФайлов код ожидает обязательного наличия структуры варианта идентификации.
Для устранения ошибки снимем с поддержки обработку (или создадим расширение) и обернем чтение варианта идентификации в проверку:
// Фрагмент процедуры ЗагрузитьПКО()
Если СтруктураПКО.Свойство("ВариантИдентификации") И ЗначениеЗаполнено(СтруктураПКО.ВариантИдентификации) Тогда
Попытка
ОбъектПКО.ВариантИдентификации = Перечисления.ВариантыИдентификацииОбъектов[СтруктураПКО.ВариантИдентификации];
Исключение
ОбъектПКО.ВариантИдентификации = Перечисления.ВариантыИдентификацииОбъектов.ПоУмолчанию;
КонецПопытки;
Иначе
// Для правил только на выгрузку идентификация не требуется
ОбъектПКО.ВариантИдентификации = Перечисления.ВариантыИдентификацииОбъектов.ПустаяСсылка();
КонецЕсли;
После добавления этой проверки загрузка правил конвертации завершится успешно и создаст все объекты ПКО и ПОД в информационной базе КД3.
Рассмотрим регламент действий для корректного переноса логики конвертации:
MD83Exp.epf выгружаем структуру метаданных обеих конфигураций (источника и приемника).Пакеты XDTO конфигурации, находим используемую версию формата EnterpriseData_X_X_X, экспортируем схему в файл .xsd и загружаем её в КД3 в справочник форматов.Выгрузка правил синхронизации.epf в рабочей базе и сохраняем файлы правил.МенеджерОбменаЧерезУниверсальныйФормат (для нужной версии формата), выделяем весь текст и сохраняем его в отдельный текстовый файл .txt.Загрузка правил синхронизации из файлов, последовательно указываем файлы формата, правил и модуля менеджера.В отличие от КД 2.1, где правила жестко завязаны на внутренний формат XML, правила в концепции EnterpriseData (КД 3) представляют собой чистый исполняемый код 1С. Поэтому редактировать логику синхронизации можно несколькими альтернативными путями:
ПРИ_ОТПРАВКЕ, ПРИ_ПОЛУЧЕНИИ) и правила выборки можно объявлять непосредственно в процедурах модуля МенеджерОбменаЧерезУниверсальныйФормат.&Вместо, &После или &Перед к экспортным методам модуля менеджера обмена, не снимая основную конфигурацию с поддержки.