При использовании механизма «Конвертация данных 2.0» (КД 2.0) для настройки обмена между базами 1С специалисты часто сталкиваются с неприятной ошибкой во время загрузки данных: «Поле объекта не обнаружено {ИмяПредопределенногоЭлемента}». Эта проблема кажется мистической, так как в метаданных конфигурации-приемника действительно нет реквизита с таким странным названием в фигурных скобках. Разберем детально, почему это происходит и как это исправить.
Проанализируем ситуацию с точки зрения развития платформы 1С:Предприятие. Начиная с версии 8.3.3, разработчики фирмы «1С» изменили внутренний механизм работы с предопределенными данными. В современных версиях платформы появилось свойство ИмяПредопределенныхДанных. Однако при выгрузке данных через XML с использованием правил, созданных в КД 2.0, это системное поле может записываться в файл в специфическом формате — {ИмяПредопределенногоЭлемента}.
Когда обработка Универсальный обмен данными в формате XML (обычно это V8Exchan82.epf) считывает файл загрузки, она пытается программно заполнить свойства создаваемого или обновляемого объекта. Если версия обработки устарела или база-приемник работает в режиме совместимости со старыми версиями платформы (например, 8.2), код обработки воспринимает {ИмяПредопределенногоЭлемента} как обычный реквизит объекта. Поскольку такого реквизита в справочнике или плане видов характеристик нет, система выбрасывает исключение.
Рассмотрим основные способы решения этой проблемы — от простых организационных мер до программной правки кода.
Самая частая причина ошибки — использование встроенной в старую конфигурацию обработки или использование древней версии V8Exchan82.epf. Выясним, где взять актуальный инструмент. Актуальные версии обработки обмена всегда поставляются вместе с конфигурацией «Конвертация данных».
.../1cv8/tmplts/1c/Conversion/[НомерВерсии]/).V8Exchan82.epf.В современных версиях этой обработки разработчики «1С» уже предусмотрели проверку на наличие системных полей в фигурных скобках. Код загрузки в них обернут в блок Попытка...Исключение или содержит явную проверку на имя поля, что предотвращает аварийную остановку процесса.
Если обновление обработки не помогло или вы ограничены в выборе инструментария, проанализируем настройки самих правил обмена. Часто «Мастер создания правил» автоматически подтягивает технические свойства, которые не должны передаваться как обычные реквизиты.
Выполним следующие шаги в конфигурации «Конвертация данных»:
ИмяПредопределенныхДанных или системное свойство, отвечающее за предопределенность.После внесения изменений обязательно сохраните правила и перевыгрузите их в файл XML для использования в обработке обмена.
В некоторых случаях, когда базы сильно кастомизированы или работают на специфических релизах платформы, помогает «быстрый фикс» самой обработки загрузки. Разберем, какой код нужно добавить, чтобы игнорировать злополучное поле.
Откроем обработку Универсальный обмен данными в формате XML в конфигураторе и найдем процедуру, отвечающую за установку значений реквизитов (обычно это УстановитьЗначениеРеквизитаОбъекта или аналогичный фрагмент в коде загрузки). Нам нужно добавить проверку имени реквизита перед его записью.
Пример программного кода для вставки:
// В месте, где происходит обход считанных из XML свойств
Для Каждого Свойство Из СвойстваОбъекта Цикл
ИмяРеквизита = Свойство.Имя;
// Добавляем проверку на системное поле в фигурных скобках
Если ИмяРеквизита = "{ИмяПредопределенногоЭлемента}" Тогда
Продолжить; // Просто пропускаем это поле
КонецЕсли;
// Далее идет штатный код установки значения
Попытка
Объект[ИмяРеквизита] = Свойство.Значение;
Исключение
// Логирование ошибки или тихий пропуск
КонецПопытки;
КонецЦикла;
Такая правка позволяет обработке игнорировать техническую метку платформы, не пытаясь записать ее в несуществующее поле метаданных.
Иногда корень проблемы кроется в том, что правила в КД 2.0 были созданы на основе старого «образа» метаданных (Description.xml). Если одна из баз была обновлена на платформу 8.3, а описание метаданных в КД осталось от версии 8.2, возникнет диссонанс в понимании структуры предопределенных элементов.
Рекомендуем выполнить следующие действия:
MD82Exp.epf (из поставки последней КД).Важный момент: Если ваша база-приемник работает в режиме совместимости с платформой 8.2.13 или ниже, она физически не поддерживает свойство ИмяПредопределенныхДанных программно через объектную модель. В этом случае использование актуальной обработки обмена из Решения №1 является критически обязательным, так как именно она умеет корректно обходить ограничения режима совместимости.
Подведем итог: ошибка {ИмяПредопределенногоЭлемента} — это «привет» от механизмов платформы 8.3, пытающихся работать по новым правилам в старой среде КД 2.0. Используя комбинацию обновления инструментов обмена и чистки правил от лишних системных свойств, вы сможете стабильно передавать данные без прерывания процесса загрузки.