Как исправить ошибку «Не найден узел обмена для загрузки данных» при обмене УТ и БП?

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

При выгрузке данных из 1С:Управление торговлей в 1С:Бухгалтерия предприятия (например, редакции 2.0) пользователи и разработчики могут столкнуться со следующим сообщением об ошибке:

Ошибка при выгрузке данных для узла плана обмена. ОписаниеОшибки = {Обработка.ОбменДаннымиXML.МодульОбъекта(13709)}: Не найден узел обмена для загрузки данных. План обмена: ОбменУправлениеТорговлейБухгалтерияКОРП, Код: 003. КодСообщения = 72

Чаще всего подобный сбой возникает внезапно, например, после переноса или восстановления одной из информационных баз из архивной копии (файла .dt). Разберем причины возникновения этой ситуации и пошаговые методы её устранения.

Причины возникновения ошибки

Выясним причину сбоя, опираясь на внутреннюю логику типовой обработки ОбменДаннымиXML и архитектуру планов обмена на базе «Конвертации данных 2.1»:

  1. Нарушение перекрестной адресации кодов узлов: Обмен данными в 1С построен на строгом парном соответствии узлов. В базе-источнике (УТ) предопределенный элемент («Этот узел») имеет свой собственный код (например, 003), а подчиненный узел корреспондента содержит код приемника (например, 001). В базе-приемнике (БП) картина должна быть зеркальной: «Этот узел» имеет код 001, а узел, представляющий УТ — код 003. При прямом COM-подключении база-источник обращается к приемнику и пытается найти узел с кодом своего отправителя через вызов ПланыОбмена[Имя].НайтиПоКоду("003"). Если такого узла нет, формируется ошибка с кодом 72.
  2. Восстановление базы из файла выгрузки (.dt): Загрузка дампа базы полностью перезаписывает таблицы информационной базы, включая табличную часть планов обмена. Если в БП был загружен архив, сделанный до настройки текущего обмена или из другой рабочей копии, коды узлов откатываются к предыдущему состоянию. В результате база-источник пытается передать данные в узел, которого физически нет в восстановленной базе.
  3. Несовпадение имени метаданных и синонима: В тексте ошибки фигурирует имя объекта ОбменУправлениеТорговлейБухгалтерияКОРП, даже если используется версия конфигурации ПРОФ. Дело в том, что разработчики конфигурации используют единое внутреннее имя объекта метаданных плана обмена, в то время как пользовательский синоним отображается как «Бухгалтерия предприятия, редакция 2.0». Платформа всегда обращается к метаданным по их системному имени, а не по синониму.

Способ 1. Синхронизация и исправление кодов узлов вручную

Проанализируем текущие настройки в обеих информационных базах и приведем их к согласованному состоянию. Разберем действия по шагам:

  1. Проверяем коды в базе-источнике (УТ): Откроем список узлов плана обмена, по которому выполняется выгрузка. Обратим внимание на два элемента:
    • Предопределенный узел (отмечен круглой пиктограммой с красной точкой — «Этот узел»). Зафиксируем его код (в нашей ситуации это 003).
    • Узел корреспондента, обозначающий базу БП (например, с кодом 001).
  2. Открываем план обмена в базе-приемнике (БП): Перейдем через главное меню (или режим «Все функции / Функции для технического специалиста») в раздел Планы обмена и найдем план ОбменУправлениеТорговлейБухгалтерияКОРП.
  3. Сопоставляем зеркальные коды: В открывшемся списке узлов проверим:
    • Код предопределенного узла («Этот узел») в БП должен совпадать с кодом корреспондента в УТ (то есть 001).
    • В списке узлов БП обязательно должен существовать элемент корреспондента (обозначающий базу УТ) с кодом 003. Если его нет, создадим новый узел и укажем для него код 003.
  4. Проверяем уникальность кодов: Если платформа блокирует изменение кода из-за контроля уникальности, переименуем ошибочные или дублирующие коды узлов, приведя структуру к строгому соответствию.

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


УзелОбъект = ПланыОбмена.ОбменУправлениеТорговлейБухгалтерияКОРП.ЭтотУзел().ПолучитьОбъект();
УзелОбъект.Код = "001";
УзелОбъект.Записать();

Способ 2. Сброс счетчиков сообщений и повторная регистрация данных

После восстановления базы из архива исправления одних лишь кодов узлов часто бывает недостаточно. Поскольку в файле выгрузки содержатся устаревшие номера пакетов, при следующем сеансе обмена платформа может выдать ошибку: «Номер сообщения меньше или равен номеру ранее принятого». Разберем, как восстановить корректную передачу данных:

  1. Откроем в обеих конфигурациях обработку Регистрация изменений для обмена данными.
  2. Откроем форму параметров нужного узла обмена.
  3. Сбросим счетчики: установим значения полей Номер отправленного сообщения и Номер принятого сообщения равными 0.
  4. Поскольку в базе БП данные откатились до момента создания архивной копии, зарегистрируем в УТ к отправке все объекты (документы и справочники), созданные или измененные после даты снятия архива. Для этого в обработке регистрации изменений выберем нужные типы метаданных и нажмем команду регистрации с отбором по дате.

Способ 3. Пересоздание настройки обмена с нуля

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

  1. В базе УТ откроем справочник настроек обмена данными и удалим старую настройку синхронизации.
  2. Запустим штатный помощник создания нового обмена данными.
  3. Укажем вариант прямого подключения к информационной базе через COM-соединение, введем путь к информационной базе БП и учетные данные пользователя с полными правами.
  4. Позволим помощнику автоматически создать парные узлы в обеих базах: мастер настройки самостоятельно присвоит корректные взаимные коды и свяжет внутренние уникальные идентификаторы узлов, исключив человеческий фактор.
← На главную