Почему не перезаписываются данные справочника при обмене через «Универсальный обмен данными» и как это исправить?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При переносе документов между конфигурациями 1С с помощью обработки «Универсальный обмен данными в формате XML» (УОД) и правил, созданных в «Конвертации данных 2.0», часто возникает ситуация, когда реквизиты справочников в базе-приемнике не обновляются. Даже если изменить правила поиска (например, отключить поиск по внутреннему идентификатору UUID и настроить поиск по ключевым реквизитам), при повторной выгрузке документов в базе-приемнике продолжают оставаться старые данные.

Рассмотрим подробно, почему возникает эта проблема, проанализируем механизмы работы обработки обмена и разберем проверенные способы исправления ситуации.

Причина проблемы: особенности выгрузки ссылочных реквизитов

Выясним причину такого поведения платформы и обработки обмена. Когда мы выгружаем документ, в котором используется ссылочный реквизит (например, элемент справочника), платформа по умолчанию выгружает не сам объект справочника со всеми его реквизитами, а лишь ссылочный узел XML (тег <Ссылка>).

В этом ссылочном узле передаются только данные, необходимые для поиска существующего объекта в базе-приемнике. При загрузке файла XML обработка обмена выполняет сопоставление:

  1. Ищет существующий элемент в базе-приемнике по указанным полям поиска (или по UUID источника, передаваемому в служебном атрибуте).
  2. Если элемент найден, подставляет ссылку на него в загружаемый документ.
  3. Если элемент не найден, создает новый элемент-пустышку с минимально необходимыми полями поиска.

Важный нюанс: при обработке ссылочного узла платформа не перезаписывает и не обновляет реквизиты уже существующего в базе-приемнике объекта. Полноценная запись и обновление значений реквизитов происходят только тогда, когда в XML-файле присутствует полный узел объекта (тег <Объект>).

Если при первом переносе справочник сопоставился не с тем элементом, то при повторной перевыгрузке только документов платформа снова находит ранее сопоставленный объект и оставляет его свойства без изменений.

Решение 1. Настройка выгрузки объекта целиком в ПКС (КД 2.0)

Разберем по шагам, как настроить правила в «Конвертации данных 2.0», чтобы заставить обработку выгружать справочник как полноценный объект вместе с документами.

  1. Откроем правила обмена в конфигурации «Конвертация данных 2.0».
  2. Перейдем в Правило конвертации свойств (ПКС) документа для нужного ссылочного реквизита.
  3. В настройках свойства включим опцию «Выгружать объект целиком» (или переопределим правило выгрузки ссылки).
  4. Сохраним правила обмена и повторим выгрузку.

При такой настройке в XML-файл вместо краткой ссылки будет помещен полный узел <Объект>, и при загрузке данных в приемнике существующий элемент справочника гарантированно обновит свои значения.

Решение 2. Выгрузка справочника через отдельное ПВД

Посмотрим на другой подход. Чтобы не перегружать выгрузку документов полными объектами справочников при каждом обмене, выгрузим сам справочник отдельно.

  1. В «Конвертации данных» убедимся, что для справочника создано и активно Правило выгрузки данных (ПВД).
  2. В обработке «Универсальный обмен данными в формате XML» сначала запустим выгрузку и загрузку самого справочника (с корректно настроенными полями поиска в ПКО).
  3. После того как справочники в базе-приемнике обновятся, выполним повторную выгрузку и загрузку документов.

Решение 3. Программный вызов выгрузки объекта в обработчиках

Если требуется гарантированно выгружать объект справочника целиком при переносе документа с помощью кода, воспользуемся встроенной функцией «Конвертации данных».

В обработчике ПередВыгрузкой для ПКО документа или ПКС соответствующего реквизита добавим следующий код:


// Принудительная выгрузка объекта справочника целиком
ВыгрузитьОбъект(Источник.Контрагент, "Контрагенты");

В данном примере первым параметром передается ссылка на объект-источник, а вторым — имя Правила конвертации объектов (ПКО) для выгружаемого справочника.

Решение 4. Настройка кэширования в ПКО справочника

Проанализируем еще одну настройку. В обработке обмена действует механизм запоминания выгруженных объектов: если элемент справочника уже выгружался ранее в рамках текущего сеанса, он не выгружается повторно.

Чтобы избежать применения закэшированных данных:

  1. Откроем ПКО нужного справочника.
  2. На вкладке «Настройки» установим флаг «Не запоминать выгруженные объекты».
  3. Убедимся, что снята галочка «Искать по внутреннему идентификатору», а в ПКС отмечены галочками правильные поля поиска (например, Код, Наименование или ИНН/КПП).

Решение 5. Устранение неверных сопоставлений в базе-приемнике

Если из-за первой загрузки в базе-приемнике образовались ошибочные ссылки или дубли, выполним их исправление непосредственно в базе-приемнике:

  1. Откроем типовую обработку «Поиск и замена дублей» (или «Замена элементов»).
  2. Заменим ошибочно созданный элемент справочника на правильный во всех документах и регистрах.
  3. Удалим неверный элемент из базы-приемника перед повторной загрузкой.
← На главную