Ошибка при переносе данных из УТ 10.3 в УНФ: Поле объекта не обнаружено (ВидДоговора) у Валюты

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

При переходе с устаревших конфигураций, таких как «1С:Управление торговлей 10.3» (УТ 10.3), на современные решения, например «1С:Управление нашей фирмой 3.0» (УНФ), часто возникают ошибки, связанные с качеством данных в исходной базе. Одной из распространенных проблем является ошибка выгрузки, когда механизм обмена пытается обработать объект, тип которого не соответствует ожидаемому правилами конвертации.

Рассмотрим подробно ситуацию, когда при выгрузке данных возникает ошибка: Ошибка получения значения свойства объекта... ПКО = ДоговорыКонтрагентов... Объект = руб. (Валюты)... Поле объекта не обнаружено (ВидДоговора). Мы проанализируем причины возникновения этой ошибки, разберем логику работы механизма конвертации данных и предложим пошаговые методы устранения проблемы.

Анализ текста ошибки и диагностика проблемы

Для начала давайте внимательно "прочитаем" сообщение об ошибке, которое выдает обработка УниверсальныйОбменДаннымиXML. В нем содержится вся необходимая информация для понимания сути проблемы.

Ключевые моменты лога ошибки:

  1. ПКО = ДоговорыКонтрагентов: Это означает, что в данный момент обработка пытается выгрузить объект, используя Правило Конвертации Объектов (ПКО), предназначенное для справочника "Договоры контрагентов".
  2. Объект = руб. (Валюты): Здесь кроется причина сбоя. Механизм обмена "держит в руках" элемент справочника "Валюты" (конкретно — рубль), но пытается работать с ним как с договором.
  3. СвойствоПриемника = ВидДоговора: Правило конвертации пытается найти у выгружаемого объекта реквизит ВидДоговора, чтобы передать его в базу-приемник.
  4. ОписаниеОшибки = Поле объекта не обнаружено (ВидДоговора): Закономерный итог. У справочника "Валюты" нет и не может быть реквизита "ВидДоговора". Платформа не находит поле и вызывает исключение.

Вывод: В вашей базе УТ 10.3 существует ссылка на объект (документ, справочник или регистр сведений), где в поле, предназначенном для хранения ссылки на Договор контрагента, ошибочно записана ссылка на Валюту. Это нарушение типизации данных, которое могло возникнуть вследствие программных сбоев, некорректных групповых обработок или прямых записей в базу данных в прошлом.

Способ 1: Поиск и исправление некорректных ссылок в режиме Предприятия

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

Выполним следующие действия в базе УТ 10.3:

  1. Откроем справочник Валюты.
  2. Найдем элемент, на который ругается обмен. В ошибке указано: Объект = руб..
  3. Выделим этот элемент в списке.
  4. Воспользуемся стандартной функцией платформы "Поиск ссылок на объект". В обычном интерфейсе УТ 10.3 это можно сделать через меню или кнопки на панели инструментов (обычно иконка со стрелочкой и лупой).
  5. Дождемся окончания поиска. Система выдаст список всех мест, где используется данная валюта.

Теперь нам предстоит аналитическая работа. Просмотрим список результатов поиска:

Действия по исправлению:

Откройте найденный проблемный документ или элемент справочника. Скорее всего, поле "Договор" будет выглядеть заполненным странным образом, либо платформа покажет там <Объект не найден> или текст представления валюты, который не соответствует контексту. Очистите это поле и выберите корректный договор контрагента. Сохраните изменения.

После исправления всех найденных несоответствий повторите выгрузку.

Способ 2: Тестирование и исправление информационной базы

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

Запустим Конфигуратор и выполним следующие шаги:

  1. Сделаем резервную копию базы данных (обязательно!).
  2. Перейдем в меню Администрирование -> Тестирование и исправление.
  3. Установим галочки:
    • Проверка логической целостности информационной базы.
    • Проверка ссылочной целостности информационной базы.
  4. В настройках "При наличии ссылок на несуществующие объекты" и "При частичной потере данных объектов" выберем вариант Очищать ссылки или Создавать объекты (лучше "Очищать", если мы уверены, что битые ссылки — это мусор).
  5. Запустим выполнение.

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

Способ 3: Модификация правил обмена (Для программистов)

В некоторых случаях (например, если база очень большая и ТиИ делать долго, или исправить данные невозможно) имеет смысл доработать сами правила обмена. Наша задача — научить правила игнорировать объекты неправильного типа перед их выгрузкой.

Для этого нам понадобится конфигурация "Конвертация данных 2.0" (КД 2.0) или прямая правка XML (что сложнее и рискованнее).

Рассмотрим алгоритм действий в "Конвертации данных":

  1. Загружаем правила обмена (файл XML, который используется для переноса) в конфигурацию КД 2.0.
  2. Находим Правило Конвертации Объектов (ПКО) ДоговорыКонтрагентов.
  3. Переходим к обработчикам событий этого правила. Нас интересует событие ПередВыгрузкой (BeforeUnload).
  4. В этом обработчике нам нужно добавить проверку типа источника. Если источник не является справочником "Договоры контрагентов", мы должны отказаться от его выгрузки.

Добавим следующий код в обработчик ПередВыгрузкой:


// Проверка типа источника.
// Если пришел не Договор (например, Валюта из-за битой ссылки), отказываемся от выгрузки.
Если ТипЗнч(Источник) <> Тип("СправочникСсылка.ДоговорыКонтрагентов") Тогда
    Отказ = Истина;
    // Можно добавить запись в лог для отладки
    // Сообщить("Обнаружен некорректный тип данных при выгрузке договора: " + Строка(Источник));
КонецЕсли;

После внесения изменений сохраняем правила в файл и используем этот обновленный файл при выгрузке из УТ 10.3.

Способ 4: Отладка процесса выгрузки

Если вы не можете найти объект визуально, можно воспользоваться отладчиком, чтобы "поймать" момент сбоя и точно узнать, какой документ ссылается на валюту как на договор.

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

Определив родительский объект (Владелец ссылки), вы сможете найти его в базе по номеру или коду и исправить реквизит, как описано в Способе 1.

Резюме

Ошибка Поле объекта не обнаружено (ВидДоговора) при выгрузке объекта руб. однозначно указывает на некорректные данные в базе-источнике (УТ 10.3). Наиболее надежным решением является поиск мест использования ссылки на валюту через "Поиск ссылок на объект" и ручное исправление неверно заполненных полей в документах. Использование "Тестирования и исправления" также рекомендуется как профилактическая мера перед любой миграцией данных.

← На главную