Почему объект регистрируется к обмену, но не загружается в базу-приемник в Конвертации Данных 2?

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

При настройке синхронизации данных между конфигурациями 1С (особенно на базе идентичных систем, таких как УПП) разработчики часто сталкиваются с коварной ситуацией: нужный объект (например, справочник Подразделения) успешно регистрируется на узле плана обмена, регламентное задание выполняется без ошибок, журнал регистрации чист, но в базе-получателе объект так и не появляется.

В этой статье мы подробно разберем, почему возникает такое поведение системы, как устроен этот механизм "невидимого" отсекания данных на стороне Конвертации данных 2 (КД 2.1), и по шагам пройдем весь путь диагностики — от структуры XML-файла до отладки обработчиков в приемнике.

Понимание проблемы: почему нет ошибок в журнале регистрации?

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

Для того чтобы разобраться в причинах, нам необходимо последовательно исключить проблемы на каждом из этапов жизненного цикла обмена: Регистрация → Выгрузка в XML → Поиск в приемнике → Запись объекта.

Рассмотрим по шагам, как локализовать и устранить эту проблему.

Шаг 1. Анализ XML-файла выгрузки

Первое правило при поиске проблем обмена — никогда не верить на слово признаку "Объект зарегистрирован к обмену". Наличие регистрации на узле плана обмена гарантирует лишь то, что объект будет выбран системой для обработки. Но то, как именно он выгрузится и выгрузится ли вообще, полностью зависит от правил конвертации.

Давайте выполним выгрузку данных вручную через обработку УниверсальныйОбменДаннымиXML в локальный файл на диске и откроем его в текстовом редакторе (например, Notepad++). Найдем в нем узел нашего справочника Подразделения. Здесь возможны два сценария:

Сценарий А: Объект выгружается "Только по ссылке"

В файле выгрузки вы обнаруживаете только ссылку на подразделение внутри какого-либо другого объекта (например, документа), но отдельного полноценного узла с реквизитами подразделения в файле нет. Выглядит это примерно так:


<Ссылка Правило="Подразделения">
    <Свойство Имя="{УникальныйИдентификатор}" Тип="Строка">
        <Значение>f3d1b82d-8b21-11eb-8113-00155d013f02</Значение>
    </Свойство>
</Ссылка>

Если в базе-приемнике объекта с таким УИД (UUID) нет, а в ПКО для подразделений установлена настройка "Не создавать новый объект, если он не найден" или "При переносе по ссылке не создавать объект", то приемник проигнорирует эту запись. Объект не будет создан.

Решение: Убедитесь, что для справочника подразделений создано и активно ПВД (Правило выгрузки данных). Без него объект не может быть выгружен как самостоятельная сущность, а будет мигрировать только как аналитика в составе других документов и справочников. Также проверьте настройки ПКС (Правила конвертации свойств), через которые выгружается это подразделение — там не должен стоять флаг "Выгружать только по ссылке".

Сценарий Б: Объект выгружается полностью

В XML-файле присутствует полноценный блок объекта с заполненными реквизитами (Код, Наименование и т.д.):


<Объект Правило="Подразделения" Тип="СправочникСсылка.Подразделения" РежимЗагрузки="Авто">
    <Свойство Имя="Код" Тип="Строка">
        <Значение>00001</Значение>
    </Свойство>
    <Свойство Имя="Наименование" Тип="Строка">
        <Значение>Отдел продаж</Значение>
    </Свойство>
</Объект>

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

Шаг 2. Проверка настроек ПКО (Правила конвертации объектов)

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

Шаг 3. Анализ полей поиска и алгоритмов сопоставления

Когда объект загружается, система должна понять: существует ли уже такое подразделение в приемнике или нужно создать новое. По умолчанию поиск идет по уникальному идентификатору (УИД). Однако часто разработчики переопределяют этот механизм в обработчиках событий ПКО.

Давайте обратим внимание на вкладку "Поля поиска" в ПКО или на обработчик ПоляПоиска. В нашей теме упоминался закомментированный ранее алгоритм, динамически сопоставляющий реквизиты объекта через параметры:


РеквизитыОбъекта = Объект.Метаданные.Реквизиты;
Если ПараметрыОбъекта <> Неопределено Тогда
    Для Каждого СтруктураРеквизита Из ПараметрыОбъекта Цикл
        ИмяРеквизита = СтруктураРеквизита.Ключ;
        Если РеквизитыОбъекта.Найти(ИмяРеквизита) <> Неопределено Тогда
            Объект[ИмяРеквизита] = СтруктураРеквизита.Значение;
        КонецЕсли;
    КонецЦикла;
КонецЕсли;

Если логика поиска настроена некорректно, может произойти ошибочное сопоставление. Например, новое подразделение с кодом "00005" при поиске ошибочно сопоставится с уже существующим элементом (например, имеющим пустое наименование или неверный код), перезапишет его параметры, и визуально покажется, что новое подразделение не создалось.

Рекомендация: Всегда проверяйте, по каким полям идет поиск (Код, Наименование, Родитель) и не отключен ли поиск по УИД, если конфигурации источника и приемника абсолютно идентичны.

Шаг 4. Поиск скрытого отказа в обработчиках событий

В КД 2.1 существует масса точек расширения, где разработчик может написать свой код на языке 1С. Эти обработчики могут находиться как на уровне ПКО (ПриЗагрузке, ПослеЗагрузки), так и на глобальном уровне самих правил конвертации.

Если в коде любого из этих обработчиков срабатывает условие, устанавливающее переменную:

Отказ = Истина;

то загрузка текущего объекта прекращается. При этом никаких сообщений об ошибках в Журнал регистрации базы-приемника не выводится, так как это штатный интерактивный отказ, предусмотренный логикой правил конвертации.

Внимательно просмотрите все обработчики событий в ПКО для справочника подразделений. Обратите внимание на наличие значков "шестеренки" или "зеленого листа" в Конвертации Данных — они указывают на то, что в событии написан программный код.

Шаг 5. Как запустить отладку загрузки по шагам

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

  1. В базе конфигурации "Конвертация данных" откройте ваши правила обмена.
  2. Перейдите в меню Сервис → Настройка отладки обработчиков.
  3. В появившемся окне настроек выберите шаг "Настройка отладки загрузки" и нажмите кнопку "Сформировать модуль отладки". Будет создан текстовый файл или внешняя обработка, содержащая весь программный код ваших обработчиков.
  4. Сохраните этот модуль на диск.
  5. В базе-приемнике откройте обработку УниверсальныйОбменДаннымиXML, перейдите на вкладку "Дополнительные настройки".
  6. Установите флаг "Режим отладки обработчиков загрузки" и укажите путь к сформированному файлу отладки.
  7. Откройте Конфигуратор базы-приемника. Найдите в модуле отладки процедуру, отвечающую за загрузку подразделений (например, перед записью или при загрузке), и установите точку останова (F9).
  8. Запустите процесс загрузки XML-файла.

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

Шаг 6. Проверка влияния режима обмена (ОбменДанными.Загрузка)

По умолчанию при загрузке данных через XML-обмен все объекты записываются со специальным признаком:

Объект.ОбменДанными.Загрузка = Истина;

Этот признак сообщает платформе, что объект переносится "как есть", и отключает стандартные прикладные проверки в модуле объекта (например, проверки на заполненность реквизитов, уникальность кодов, подписки на события).

Однако в некоторых кастомных конфигурациях УПП разработчики могут создавать подписки на события перед записью справочников, которые жестко выполняют проверки, не проверяя значение свойства ОбменДанными.Загрузка. В этом случае подписка может молча отменить запись (установить Отказ = Истина в параметрах события платформы).

Как проверить этот вариант?

В обработке УниверсальныйОбменДаннымиXML на стороне базы-приемника перейдите на вкладку "Дополнительные настройки" и временно снимите флаг "Загружать данные в режиме обмена (ОбменДанными.Загрузка = Истина)". Запустите загрузку.

Если проблема крылась в платформенных проверках или подписках на события конфигурации приемника, процесс загрузки прервется, но на этот раз система выдаст на экран подробное и понятное сообщение об ошибке (например: Не заполнено обязательное поле "Организация" или Код справочника не уникален). Это позволит вам сразу же устранить прикладную причину сбоя.

Применяя эти последовательные шаги диагностики, вы гарантированно найдете причину, по которой справочник Подразделения не появляется в базе-приемнике, и сможете скорректировать правила конвертации для корректной работы обмена.

← На главную