Переход с технологии Конвертация данных 2.0 на версию 3.0 — это не просто обновление правил, это смена парадигмы. В КД 3.0 мы работаем через универсальный формат EnterpriseData, где вместо прямого маппинга «Объект-Объект» используется посредник в виде XDTO-пакетов. Рассмотрим подробнее, с какими трудностями сталкиваются разработчики при первой настройке такого обмена и как их преодолеть.
Часто при первой настройке синхронизации между уже работающими базами (например, УНФ и БП) система пытается выгрузить десятки тысяч старых записей. Проанализируем, как взять этот процесс под контроль.
В КД 3.0 механизм регистрации изменений завязан на Планы обмена. Чтобы не выгружать всё подряд, выполним следующие шаги:
Разберем ситуацию: вы зарегистрировали документ к обмену, запустили синхронизацию, но файл обмена не содержит данных объекта. Выясним причину, почему так происходит.
Основная логика фильтрации в КД 3.0 сосредоточена в правилах ПОД (Порядок обработки данных). Рассмотрим основные факторы:
ПриОбработке прописано условие, которое не выполняется (например, проверка на вид операции или дату), объект не будет выгружен.Проанализируем критическую ошибку, которая часто возникает при загрузке данных в приемник. Стек ошибки обычно указывает на общий модуль ОбменДаннымиXDTOСервер. Эта проблема связана с тем, что система не может сопоставить входящий тип данных XDTO с метаданными текущей конфигурации.
Для решения этой проблемы выполним следующие действия:
Неопределено при попытке получить ссылку.ПолучитьСсылку у пустого объекта.Посмотрим, как настраивается нумерация при обмене между УНФ и БУХ. В КД 3.0 правила обычно не меняют номер документа «на лету», это задача системных механизмов БСП.
Если номера приходят с неверными префиксами, проверим следующее:
ПКО_..._Отправка_ПриОтправкеДанных. Именно там может быть прописана логика модификации номера перед упаковкой в XML.ПриУстановкеНовогоНомера, которое добавляет префикс уже на стороне получателя.Рассмотрим ситуацию, когда при обмене элемент справочника (например, Номенклатура) должен только создаваться, но если он уже найден в базе, его реквизиты не должны обновляться данными из источника.
Для реализации этой логики необходимо внести изменения в правила приемника (модуль менеджера обмена или через конфигурацию КД 3.1). Разберем пример кода в обработчике ПередЗаписьюПолученныхДанных для ПКО:
Процедура ПКО_Справочник_Номенклатура_Получение_ПередЗаписьюПолученныхДанных(ДанныеИБ, ПолученныеДанные, СвойстваОбъекта, КомпонентыОбмена, Отказ)
// Если ДанныеИБ не равны Неопределено, значит объект в базе найден
Если НЕ ДанныеИБ = Неопределено Тогда
// Чтобы не перезаписывать объект, можно установить ПолученныеДанные в Неопределено
// В этом случае система пропустит этап заполнения реквизитов и записи
ПолученныеДанные = Неопределено;
КонецЕсли;
КонецПроцедуры
Важный момент: Если вы полностью отменяете перезапись через ПолученныеДанные = Неопределено, убедитесь, что это не нарушит ссылочную целостность других связанных объектов, которые могут ожидать обновления данных.
Проанализируем несколько советов, которые упростят работу: