При настройке новой синхронизации данных между конфигурациями 1С, например, между «Управление торговлей» (УТ) и «Бухгалтерия предприятия» (БП), пользователи и разработчики часто сталкиваются с прерыванием процесса. Синхронизация может доходить до 100%, но на этапе завершения начальной выгрузки данных система выдает критическую ошибку: «Значение не является значением объектного типа (ДанныеВыгружены)». Давайте подробно разберем эту ситуацию, выясним причину сбоя и рассмотрим эффективные методы решения.
Проанализируем ситуацию с точки зрения программного кода. Указанная ошибка означает, что алгоритм обмена пытается обратиться к свойству ДанныеВыгружены внутри переменной (как правило, это структура Результат). Однако на момент вызова эта переменная не является объектом или структурой, а содержит значение Неопределено.
Обычно такой код выглядит примерно следующим образом:
// Пример проблемного участка кода в типовых модулях
Если Результат.ДанныеВыгружены Тогда
ЗафиксироватьУспешнуюВыгрузку();
КонецЕсли;
Почему переменная оказывается пустой? Это происходит, когда предшествующая процедура выгрузки завершается нестандартно или возвращает пустой результат из-за скрытой ошибки, но система не перехватывает это исключение корректно и пытается прочитать статус завершения. Встречается это в процедурах наподобие ПриЗавершенииВыгрузкиДанных.
Рассмотрим весьма распространенную причину, особенно если вы тестируете обмен на копиях баз данных. Часто разработчики разворачивают серверную копию рабочей базы и устанавливают в ее свойствах флаг блокировки регламентных заданий, чтобы копия не начала отправлять почту или обмениваться данными с живыми системами.
Процесс синхронизации данных в современных конфигурациях 1С активно использует фоновые и регламентные задания. Если они заблокированы, финальный этап может не отработать корректно. Посмотрим по шагам, как это исправить:
Проанализируем ситуацию, когда у вас используются базы с существенно отличающимися датами релиза (например, старая УТ 11.4 и актуальная БП 3.0). Синхронизация между современными системами работает через универсальный формат обмена EnterpriseData. Старая база может не поддерживать версию формата, которую по умолчанию предлагает новая база.
Разберем алгоритм настройки для баз с большой разницей в релизах:
Если ошибка сохраняется, и синхронизация валится в самом конце, нам потребуется локализовать проблему с помощью отладчика. Поскольку обмен выполняется в фоне, стандартная отладка клиента здесь не поможет.
Посмотрим, как правильно подключить отладку для поиска причины:
МенеджерОбменаЧерезУниверсальныйФормат (или аналогичный модуль с указанием версии формата, например МенеджерОбменаЧерезУниверсальныйФормат13).ПриЗавершенииВыгрузкиДанных или в функциях выгрузки объектов.Результат возвращается со значением Неопределено.Иногда системные сбои на финальных этапах фоновых обработок спровоцированы некорректно сохраненными пользовательскими настройками или повреждением данных. Выполните следующие сервисные действия:
Наконец, не забывайте проверять сервис публикации ошибок 1С. Поскольку проблема возникает внутри типовых модулей обмена, велика вероятность, что для вашего релиза (если вы не можете его обновить полностью) разработчики 1С уже выпустили официальный патч (расширение), исправляющий ошибку с обращением к ДанныеВыгружены.