При переходе с устаревших конфигураций, таких как «1С:Управление торговлей 10.3» (УТ 10.3), на современные решения, например «1С:Управление нашей фирмой 3.0» (УНФ), часто возникают ошибки, связанные с качеством данных в исходной базе. Одной из распространенных проблем является ошибка выгрузки, когда механизм обмена пытается обработать объект, тип которого не соответствует ожидаемому правилами конвертации.
Рассмотрим подробно ситуацию, когда при выгрузке данных возникает ошибка: Ошибка получения значения свойства объекта... ПКО = ДоговорыКонтрагентов... Объект = руб. (Валюты)... Поле объекта не обнаружено (ВидДоговора). Мы проанализируем причины возникновения этой ошибки, разберем логику работы механизма конвертации данных и предложим пошаговые методы устранения проблемы.
Для начала давайте внимательно "прочитаем" сообщение об ошибке, которое выдает обработка УниверсальныйОбменДаннымиXML. В нем содержится вся необходимая информация для понимания сути проблемы.
Ключевые моменты лога ошибки:
ВидДоговора, чтобы передать его в базу-приемник.Вывод: В вашей базе УТ 10.3 существует ссылка на объект (документ, справочник или регистр сведений), где в поле, предназначенном для хранения ссылки на Договор контрагента, ошибочно записана ссылка на Валюту. Это нарушение типизации данных, которое могло возникнуть вследствие программных сбоев, некорректных групповых обработок или прямых записей в базу данных в прошлом.
Самый правильный метод решения — найти "битую" ссылку в исходной базе и исправить данные. Если мы просто заглушим ошибку в правилах обмена, некорректные данные могут переехать в новую базу, что вызовет проблемы в будущем.
Выполним следующие действия в базе УТ 10.3:
Объект = руб..Теперь нам предстоит аналитическая работа. Просмотрим список результатов поиска:
Договор, ДоговорКонтрагента, Сделка или в табличной части, где ожидается договор — это и есть источник проблемы.Действия по исправлению:
Откройте найденный проблемный документ или элемент справочника. Скорее всего, поле "Договор" будет выглядеть заполненным странным образом, либо платформа покажет там <Объект не найден> или текст представления валюты, который не соответствует контексту. Очистите это поле и выберите корректный договор контрагента. Сохраните изменения.
После исправления всех найденных несоответствий повторите выгрузку.
Если поиск ссылок не дал очевидных результатов или объектов слишком много, стоит воспользоваться штатным механизмом проверки целостности базы данных. Этот инструмент специально разработан для устранения структурных ошибок и нарушений логической целостности.
Запустим Конфигуратор и выполним следующие шаги:
После завершения процедуры платформа предоставит отчет. Если были найдены и исправлены объекты, где тип значения не соответствовал метаданным, проблема с выгрузкой должна уйти.
В некоторых случаях (например, если база очень большая и ТиИ делать долго, или исправить данные невозможно) имеет смысл доработать сами правила обмена. Наша задача — научить правила игнорировать объекты неправильного типа перед их выгрузкой.
Для этого нам понадобится конфигурация "Конвертация данных 2.0" (КД 2.0) или прямая правка XML (что сложнее и рискованнее).
Рассмотрим алгоритм действий в "Конвертации данных":
ДоговорыКонтрагентов.Добавим следующий код в обработчик ПередВыгрузкой:
// Проверка типа источника.
// Если пришел не Договор (например, Валюта из-за битой ссылки), отказываемся от выгрузки.
Если ТипЗнч(Источник) <> Тип("СправочникСсылка.ДоговорыКонтрагентов") Тогда
Отказ = Истина;
// Можно добавить запись в лог для отладки
// Сообщить("Обнаружен некорректный тип данных при выгрузке договора: " + Строка(Источник));
КонецЕсли;
После внесения изменений сохраняем правила в файл и используем этот обновленный файл при выгрузке из УТ 10.3.
Если вы не можете найти объект визуально, можно воспользоваться отладчиком, чтобы "поймать" момент сбоя и точно узнать, какой документ ссылается на валюту как на договор.
УниверсальныйОбменДаннымиXML.1694 или 8284, зависит от версии обработки). Перейдите к этой строке. Скорее всего, это будет метод ПолучитьЗначениеСвойства или аналогичный.ВыгрузитьПоПравилу, где в качестве параметра будет передан объект-родитель (тот документ или справочник, который "тянет" за собой эту ошибочную валюту).Определив родительский объект (Владелец ссылки), вы сможете найти его в базе по номеру или коду и исправить реквизит, как описано в Способе 1.
Ошибка Поле объекта не обнаружено (ВидДоговора) при выгрузке объекта руб. однозначно указывает на некорректные данные в базе-источнике (УТ 10.3). Наиболее надежным решением является поиск мест использования ссылки на валюту через "Поиск ссылок на объект" и ручное исправление неверно заполненных полей в документах. Использование "Тестирования и исправления" также рекомендуется как профилактическая мера перед любой миграцией данных.