Как исправить ошибку «Поле объекта не обнаружено» при выгрузке данных в 1С?

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

Приветствуем вас! Наверняка каждый специалист по 1С хотя бы раз сталкивался с ситуацией, когда при обмене данными между базами конфигурация выдает непредвиденные ошибки, прерывающие весь процесс интеграции. Сегодня мы подробно разберем одну из таких классических, но крайне неприятных проблем: ошибку получения значения свойства объекта при переносе документов через универсальный обмен.

Представим сценарий: вы пытаетесь выгрузить данные из одной базы в другую (абсолютно идентичную по конфигурации). При переносе справочников Контрагенты или Физические лица по отдельности всё проходит гладко и без ошибок. Однако стоит запустить выгрузку документов, как система выдает критический сбой в модуле обработки УниверсальныйОбменДаннымиXML.

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

Анализ технической причины ошибки

Для начала внимательно изучим лог ошибки, с которой сталкивается пользователь:


Ошибка при выгрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1619)}: Ошибка получения значения свойства объекта (по имени свойства источника)
    ПКО                    =  ФизическиеЛица  (Справочник: Физические лица)
    ПКС                    =  1  (ГруппаДоступаФизическогоЛица --> ГруппаДоступаФизическогоЛица)
    Объект                 =  Л В С  (Контрагенты)
    СвойствоПриемника      =  ГруппаДоступаФизическогоЛица  (СправочникСсылка.ГруппыДоступаФизическихЛиц)
    ОписаниеОшибки         =  Поле объекта не обнаружено (ГруппаДоступаФизическогоЛица)
    ПозицияМодуля          =  Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8219)
    КодСообщения           =  13

Давайте расшифруем то, что сообщает нам платформа:

  1. ПКО (Правило конвертации объектов), которое система пытается применить в данный момент — это ФизическиеЛица.
  2. ПКС (Правило конвертации свойства) пытается прочитать и перенести реквизит ГруппаДоступаФизическогоЛица.
  3. Объект-источник, который система передала в обработку по этому правилу — это элемент справочника Контрагенты с наименованием «Л В С».

Здесь и кроется ключевой конфликт логики КД 2.0 (Конвертации данных). Программа пытается обработать контрагента «Л В С» по правилам, предназначенным исключительно для физических лиц. Естественно, у справочника Контрагенты физически отсутствует реквизит ГруппаДоступаФизическогоЛица, из-за чего платформа 1С закономерно выбрасывает исключение: «Поле объекта не обнаружено».

Почему справочники выгружаются без ошибок, а документы — со сбоем?

При изолированной выгрузке справочников ПКО для контрагентов и ПКО для физлиц отрабатывают независимо, обрабатывая только предназначенные для них типы данных.

Однако при выгрузке документов запускается цепочка выгрузки связанных объектов по ссылкам. Ошибка возникает по одной из следующих причин:

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

Способ 1. Использование обработки «Выгрузка и загрузка данных XML» (для идентичных баз)

Если ваши информационные базы действительно абсолютно идентичны (совпадают версии конфигураций, релизы и структура метаданных), использовать универсальный обмен по правилам (через КД 2.0) нет никакой необходимости.

Рассмотрим, как выполнить перенос данных гораздо проще и надежнее:

  1. Откройте базу-источник и запустите стандартную обработку «Выгрузка загрузка данных XML» (ее можно найти на диске ИТС или в составе инструментов разработчика под именем ВыгрузкаЗагрузкаДанныхXML.epf).
  2. Данный инструмент не использует сложные правила конвертации. Он выгружает объекты «как есть», напрямую сопоставляя их по структуре и внутренним идентификаторам (GUID). При ее использовании подобные ошибки исключены физически.
  3. В окне обработки отметьте галочками только нужные документы, настройте при необходимости период и нажмите кнопку «Выгрузить данные».
  4. В базе-приемнике откройте эту же обработку, перейдите на вкладку «Загрузка данных» и укажите путь к полученному XML-файлу.

Способ 2. Локализация проблемного документа в базе-источнике

Если вам все же необходимо использовать именно универсальный обмен по правилам, нужно локализовать конкретный документ, в котором записан контрагент «Л В С» в нетипичном для него поле. Проанализируем, как это сделать:

  1. Воспользуйтесь стандартной обработкой «Поиск и замена значений» или типовым механизмом поиска ссылок на объекты в 1С. Найдите все документы, где фигурирует контрагент «Л В С».
  2. Обратите особое внимание на документы, в которых данный контрагент выбран в полях, потенциально связанных с физическими лицами (например, ПодотчетноеЛицо, Экспедитор, Ответственный, ФизическоеЛицо).
  3. Проверьте структуру данных в проблемном документе. Если вы обнаружите, что в поле, предназначенном для физического лица, записана ссылка на контрагента, исправьте это значение вручную через интерфейс или с помощью обработки «Групповое изменение реквизитов».

Способ 3. Исправление правил обмена в конфигурации «Конвертация данных 2.1»

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

Посмотрим на пример кода, который решает эту проблему. Откройте правила в конфигурации «Конвертация данных 2.1», найдите ПКО документа, на котором происходит сбой, и перейдите к ПКС (правилу конвертации свойства) нужного реквизита.

В обработчике события «Перед выгрузкой» этого ПКС пропишите явное программное определение нужного правила в зависимости от типа значения источника:


Если ТипЗнч(Значение) = Тип("СправочникСсылка.Контрагенты") Тогда
    ИмяПКО = "Контрагенты";
ИначеЕсли ТипЗнч(Значение) = Тип("СправочникСсылка.ФизическиеЛица") Тогда
    ИмяПКО = "ФизическиеЛица";
КонецЕсли;

Такой гибкий код заставит обработку динамически определять, по какому именно правилу нужно выгружать объект. Если значение является ссылкой на контрагента, применится ПКО Контрагенты. Если это физлицо — применится ПКО ФизическиеЛица. Ошибка будет полностью устранена.

Способ 4. Очистка жестко заданной связи ПКО в правилах обмена

Часто разработчики при настройке правил в графическом интерфейсе КД вручную связывают ПКС с конкретным ПКО. Если реквизит источника имеет тип Контрагенты, а в поле «Правило конвертации» для этого свойства ошибочно выбрано ПКО ФизическиеЛица, система всегда будет выдавать ошибку.

Разберем, как исправить это визуально в «Конвертации данных»:

  1. Перейдите в настройки ПКО вашего документа на вкладку «Конвертация свойств».
  2. Найдите строку с проблемным реквизитом.
  3. Очистите поле в колонке «Правило конвертации» (оно должно остаться пустым). В таком случае система при выгрузке определит подходящее ПКО автоматически на основании фактического типа значения в базе-источнике.
  4. Сохраните правила, выгрузите их в файл и проверьте обмен заново.

Применяя данные методы, мы можем быстро локализовать источник проблемы, очистить данные или скорректировать правила обмена, обеспечив стабильный и корректный перенос информации между базами 1С.

← На главную