При выполнении обмена данными между информационными базами с использованием правил Конвертации данных 2.0 часто возникает ситуация, когда иерархическая структура справочника нарушается: вместо групп в базе-приемнике появляются обычные элементы. Разберем, почему это происходит и как исправить данное поведение, чтобы иерархия сохранялась корректно.
Основная причина заключается в особенностях работы механизма загрузки данных в типовых правилах обмена. В платформе 1С СправочникОбъект является единым метаданным, однако внутри он четко разделен на элементы и группы с помощью системного реквизита ЭтоГруппа. Этот признак определяет логику работы системы с объектом.
Когда вы выполняете загрузку, алгоритм обработки действует следующим образом:
ПоляПоиска).Если в правилах обмена свойство ЭтоГруппа не указано в ПоляхПоиска или не передается в явном виде при создании, загрузчик не получает инструкции о типе объекта. В этом случае срабатывает механизм инициализации по умолчанию, и объект создается как обычный элемент справочника. Именно поэтому группы при переносе «превращаются» в элементы.
Чтобы система понимала, какой именно объект она создает, необходимо явно указать реквизит ЭтоГруппа в качестве поля поиска. Это заставляет алгоритм загрузки учитывать состояние иерархии еще до момента записи объекта в базу данных приемника.
Шаги по устранению проблемы:
Конвертация данных 2.0 и перейдите в Правила конвертации объектов.Поля поиска.ЭтоГруппа в список полей поиска.Важно понимать, что даже если поиск осуществляется по GUID (внутреннему идентификатору), наличие ЭтоГруппа в ПоляхПоиска является критическим требованием для механизмов Конвертации данных. Обработка загрузки V8Exchange содержит разную логику инициализации для элементов и групп, и именно этот реквизит служит «триггером» для выбора нужной ветки кода.
Если после включения ЭтоГруппа в поиск проблема сохраняется, проанализируйте следующие моменты:
ПослеЗагрузки или ПередЗаписью. Иногда разработчики случайно или намеренно сбрасывают признак группы, что приводит к некорректному сохранению объекта.ЭтоГруппа, корректно передаются Код и Наименование. Хотя они не влияют на тип объекта, их отсутствие может вызвать сбои при записи в базу-приемник.ЭтоГруппа правильно сопоставлено между источником и приемником.Рассмотрим пример того, как логика загрузки проверяет тип объекта в обработчике:
// Примерная логика работы обработчика загрузки
Если ЭтоГруппа Тогда
// Инициализация объекта как группы
Объект = Справочники.ВашСправочник.СоздатьГруппу();
Иначе
// Инициализация объекта как элемента
Объект = Справочники.ВашСправочник.СоздатьЭлемент();
КонецЕсли;
Как видите, если система не получила значение ЭтоГруппа на этапе анализа правил, она по умолчанию выполняет ветку СоздатьЭлемент(). Добавление свойства в ПоляПоиска гарантирует, что переменная ЭтоГруппа будет заполнена корректным значением, и алгоритм сработает правильно.
Таким образом, для исправления ситуации вам достаточно добавить признак ЭтоГруппа в настройки поиска для всех иерархических справочников, участвующих в обмене. Это стандартная практика при разработке правил в Конвертации данных 2.0.