Что делать, если при синхронизации ERP 2 и Бухгалтерии 3.0 загружается 0 объектов при наличии данных в файле

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

Синхронизация данных между 1С:ERP Управление предприятием 2 и 1С:Бухгалтерия предприятия 3.0 на базе Enterprise Data (Универсальный формат) — процесс сложный, и иногда возникают ситуации, когда файл выгрузки сформирован корректно, содержит все необходимые документы, но при загрузке в базу-приемник система сообщает: «Загрузка выполнена успешно. Получено объектов: 0». При этом окно сопоставления данных не появляется, хотя должно. Разберем по шагам, как диагностировать и устранить эту проблему.

Проверка номеров сообщений и очистка регистров

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

Для решения этой проблемы проанализируем состояние узлов обмена и связанных регистров. Нам необходимо выполнить следующие действия:

  1. Откроем план обмена СинхронизацияДанныхЧерезУниверсальныйФормат.
  2. Найдем нужный узел и проверим поля «Номер принятого сообщения» и «Номер отправленного сообщения». Попробуем временно обнулить их в обеих базах (источнике и приемнике).
  3. Проанализируем записи в специализированных регистрах сведений, которые хранят состояние обмена. Часто «зависшие» или некорректные записи блокируют процесс загрузки. Очистим записи для нашего узла в следующих регистрах:
    • РегистрСведений.СообщенияОбменаДанными
    • РегистрСведений.ОбщиеНастройкиУзловИнформационныхБаз

Диагностика через отладку и временные таблицы сопоставления

Если очистка регистров не помогла, необходимо углубиться в программный код. В механизмах БСП (Библиотеки стандартных подсистем) для анализа входящих данных используется временная таблица СообщенияДляСопоставленияДанных. Проанализируем запрос, который система выполняет в общем модуле ОбменДаннымиСервер в функции ПолученоСообщениеСДаннымиДляСопоставления:


ВЫБРАТЬ
    СообщенияДляСопоставленияДанных.ПолученоСообщениеДляСопоставленияДанных КАК ПолученоСообщениеДляСопоставленияДанных
ИЗ
    #ТаблицаПланаОбмена КАК ТаблицаПланаОбмена
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ СообщенияДляСопоставленияДанных КАК СообщенияДляСопоставленияДанных
    ПО (СообщенияДляСопоставленияДанных.УзелИнформационнойБазы = ТаблицаПланаОбмена.Ссылка)
ГДЕ
    ТаблицаПланаОбмена.Ссылка = &УзелОбмена

Важно понимать: СообщенияДляСопоставленияДанных — это временная таблица, создаваемая в памяти в момент выполнения фонового задания по загрузке. Если вы пытаетесь выполнить этот запрос в консоли запросов вручную, вы получите ошибку, так как таблицы не существует вне контекста выполнения обмена.

Если этот запрос не возвращает строк, значит, система парсинга XML (XDTO-транслятор) не нашла в файле объектов, которые требуют интерактивного сопоставления. Это происходит в двух случаях:

  1. Все объекты из файла уже имеют сопоставленные уникальные идентификаторы (GUID) в базе-приемнике.
  2. Версия формата Enterprise Data в файле выше, чем та, которую понимает база-приемник после обновления.

Отладка фоновых заданий загрузки

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

  1. Запустим конфигурацию 1С:Предприятие в режиме отладки.
  2. В меню «Отладка» -> «Подключение» убедимся, что установлены флаги для автоматического подключения к фоновым заданиям.
  3. Если база серверная, проверим, что на сервере 1С разрешена отладка (параметр -debug в строке запуска службы).
  4. Для платформы 8.3.16 и выше рекомендуется использовать отладку по протоколу HTTP, так как она более стабильно работает с фоновыми процессами.

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


РезультатАнализа = ПолучитьИзВременногоХранилища(РезультатВыполненияФоновогоЗадания.АдресРезультата);

Если РезультатАнализа.Свойство("ТекстОшибки") Тогда
    ОшибкаРасхожденияВерсийПриПолученииДанных = РезультатАнализа;
ИначеЕсли РезультатАнализа.Отказ Тогда
    ВызватьИсключение РезультатАнализа.СообщениеОбОшибке;
КонецЕсли;

В этом случае необходимо поставить точку останова перед вызовом исключения и внимательно изучить структуру РезультатАнализа. Если свойство СообщениеОбОшибке пустое, обратитесь к Журналу регистрации. Отфильтруйте события по категории «Обмен данными». Там часто фиксируются предупреждения о несоответствии пространства имен XDTO или ошибки парсинга конкретных узлов XML.

Проверка версий формата Enterprise Data

После обновления платформы или конфигурации (в нашем случае 1С:ERP) система может начать выгружать данные в более новой версии формата (например, 1.15 вместо 1.14). Если база 1С:Бухгалтерия еще не была обновлена до соответствующего релиза, она не сможет распознать объекты в «новом» XML-контейнере.

Выясним причину, проверив настройки в обеих базах:

Идентификация узлов при пересоздании настроек

Если вы удаляли и создавали настройки синхронизации заново, помните: система сопоставляет данные не по наименованию узла, а по его внутреннему Уникальному Идентификатору (UUID). Если вы используете старый файл обмена, сформированный для старой настройки, новая настройка «не узнает» его.

Проанализируем ситуацию: ERP выгружает заголовок файла с UUID «Узла А», а в Бухгалтерии теперь живет «Узел Б». При загрузке Бухгалтерия увидит, что данные предназначены не для текущего узла, и просто проигнорирует их, выдав результат «0 объектов». В этом случае необходимо заново инициировать выгрузку из ERP, чтобы сформировался файл с актуальными идентификаторами узлов.

← На главную