Синхронизация данных между 1С:ERP Управление предприятием 2 и 1С:Бухгалтерия предприятия 3.0 на базе Enterprise Data (Универсальный формат) — процесс сложный, и иногда возникают ситуации, когда файл выгрузки сформирован корректно, содержит все необходимые документы, но при загрузке в базу-приемник система сообщает: «Загрузка выполнена успешно. Получено объектов: 0». При этом окно сопоставления данных не появляется, хотя должно. Разберем по шагам, как диагностировать и устранить эту проблему.
Одной из самых распространенных причин игнорирования данных при загрузке является несоответствие номеров сообщений. Если номер входящего сообщения меньше или равен номеру последнего принятого сообщения, зафиксированного в узле плана обмена, система может решить, что эти данные уже были обработаны ранее.
Для решения этой проблемы проанализируем состояние узлов обмена и связанных регистров. Нам необходимо выполнить следующие действия:
СинхронизацияДанныхЧерезУниверсальныйФормат.РегистрСведений.СообщенияОбменаДаннымиРегистрСведений.ОбщиеНастройкиУзловИнформационныхБазЕсли очистка регистров не помогла, необходимо углубиться в программный код. В механизмах БСП (Библиотеки стандартных подсистем) для анализа входящих данных используется временная таблица СообщенияДляСопоставленияДанных. Проанализируем запрос, который система выполняет в общем модуле ОбменДаннымиСервер в функции ПолученоСообщениеСДаннымиДляСопоставления:
ВЫБРАТЬ
СообщенияДляСопоставленияДанных.ПолученоСообщениеДляСопоставленияДанных КАК ПолученоСообщениеДляСопоставленияДанных
ИЗ
#ТаблицаПланаОбмена КАК ТаблицаПланаОбмена
ВНУТРЕННЕЕ СОЕДИНЕНИЕ СообщенияДляСопоставленияДанных КАК СообщенияДляСопоставленияДанных
ПО (СообщенияДляСопоставленияДанных.УзелИнформационнойБазы = ТаблицаПланаОбмена.Ссылка)
ГДЕ
ТаблицаПланаОбмена.Ссылка = &УзелОбмена
Важно понимать: СообщенияДляСопоставленияДанных — это временная таблица, создаваемая в памяти в момент выполнения фонового задания по загрузке. Если вы пытаетесь выполнить этот запрос в консоли запросов вручную, вы получите ошибку, так как таблицы не существует вне контекста выполнения обмена.
Если этот запрос не возвращает строк, значит, система парсинга XML (XDTO-транслятор) не нашла в файле объектов, которые требуют интерактивного сопоставления. Это происходит в двух случаях:
В современных конфигурациях загрузка данных почти всегда выполняется в фоновом задании. Это затрудняет поиск ошибок, так как стандартная точка останова может не сработать. Чтобы «поймать» ошибку при загрузке, выполним следующие настройки:
-debug в строке запуска службы).Рассмотрим ситуацию, когда при анализе результата фонового задания возникает исключение, но описание ошибки пустое:
РезультатАнализа = ПолучитьИзВременногоХранилища(РезультатВыполненияФоновогоЗадания.АдресРезультата);
Если РезультатАнализа.Свойство("ТекстОшибки") Тогда
ОшибкаРасхожденияВерсийПриПолученииДанных = РезультатАнализа;
ИначеЕсли РезультатАнализа.Отказ Тогда
ВызватьИсключение РезультатАнализа.СообщениеОбОшибке;
КонецЕсли;
В этом случае необходимо поставить точку останова перед вызовом исключения и внимательно изучить структуру РезультатАнализа. Если свойство СообщениеОбОшибке пустое, обратитесь к Журналу регистрации. Отфильтруйте события по категории «Обмен данными». Там часто фиксируются предупреждения о несоответствии пространства имен XDTO или ошибки парсинга конкретных узлов XML.
После обновления платформы или конфигурации (в нашем случае 1С:ERP) система может начать выгружать данные в более новой версии формата (например, 1.15 вместо 1.14). Если база 1С:Бухгалтерия еще не была обновлена до соответствующего релиза, она не сможет распознать объекты в «новом» XML-контейнере.
Выясним причину, проверив настройки в обеих базах:
Если вы удаляли и создавали настройки синхронизации заново, помните: система сопоставляет данные не по наименованию узла, а по его внутреннему Уникальному Идентификатору (UUID). Если вы используете старый файл обмена, сформированный для старой настройки, новая настройка «не узнает» его.
Проанализируем ситуацию: ERP выгружает заголовок файла с UUID «Узла А», а в Бухгалтерии теперь живет «Узел Б». При загрузке Бухгалтерия увидит, что данные предназначены не для текущего узла, и просто проигнорирует их, выдав результат «0 объектов». В этом случае необходимо заново инициировать выгрузку из ERP, чтобы сформировался файл с актуальными идентификаторами узлов.