Как исправить ошибку «Поле объекта не обнаружено (КодВидаНоменклатурнойСпецификации)» при синхронизации УТ 11 и БП 3.0?

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

Синхронизация данных между конфигурациями 1С:Управление торговлей 11 и 1С:Бухгалтерия предприятия 3.0 — это сложный процесс, основанный на использовании универсального формата обмена данными (EnterpriseData). К сожалению, в некоторых релизах, таких как УТ 11.4.11.104, пользователи сталкиваются с критической ошибкой, которая полностью блокирует выгрузку данных. В этой статье мы подробно разберем причины возникновения этой ошибки и изучим несколько способов ее решения: от быстрого исправления в коде до использования официальных патчей.

Анализ причины ошибки

Давайте проанализируем ситуацию. Ошибка возникает на стороне информационной базы-источника (в нашем случае это УТ 11) в момент формирования пакета данных для отправки. Текст ошибки четко указывает на проблему: Поле объекта не обнаружено (КодВидаНоменклатурнойСпецификации). Если мы изучим стек вызова, то увидим, что сбой происходит в общем модуле МенеджерОбменаЧерезУниверсальныйФормат в процедуре, отвечающей за отправку справочника Номенклатура.

Выясним причину. В данном релизе разработчики допустили опечатку в программном коде. В метаданных конфигурации существует реквизит КодВидаНоменклатурнойКлассификации, который был добавлен для интеграции с Национальным каталогом и системой маркировки «Честный знак». Однако в модуле обмена программисты ошибочно обратились к свойству КодВидаНоменклатурнойСпецификации. Такого поля в справочнике Номенклатура не существует, что и вызывает экстренное завершение процесса синхронизации.

Способ 1: Исправление кода в конфигураторе

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

  1. Откроем конфигуратор 1С:Управление торговлей.
  2. Найдем общий модуль МенеджерОбменаЧерезУниверсальныйФормат.
  3. Перейдем к процедуре ПКО_Справочник_Номенклатура_Отправка_ПриОтправкеДанных. Обычно это очень объемный модуль, поэтому воспользуемся глобальным поиском (Ctrl+Shift+F) по строке "КодВидаНоменклатурнойСпецификации".
  4. Проанализируем проблемный участок кода. В релизе 11.4.11.104 он выглядит примерно так:

// Ошибочный фрагмент кода
Если ВерсияФорматаЧислом(КомпонентыОбмена.ВерсияФорматаОбмена) >= ВерсияФорматаЧислом("1.5") Тогда
    ДанныеXDTO.Вставить("КодВидаНоменклатурнойСпецификации", ДанныеИБ.КодВидаНоменклатурнойСпецификации);
КонецЕсли;
  1. Заменим ошибочное обращение на правильное. Нам нужно изменить Спецификации на Классификации. Исправленный код должен выглядеть следующим образом:

// Исправленный фрагмент кода
Если ВерсияФорматаЧислом(КомпонентыОбмена.ВерсияФорматаОбмена) >= ВерсияФорматаЧислом("1.5") Тогда
    ДанныеXDTO.Вставить("КодВидаНоменклатурнойСпецификации", ДанныеИБ.КодВидаНоменклатурнойКлассификации);
КонецЕсли;

Важное примечание: Обратите внимание, что в методе Вставить первый параметр (имя свойства в формате XDTO) остается прежним — "КодВидаНоменклатурнойСпецификации", так как именно такое имя ожидает принимающая сторона в XML-пакете. Ошибка заключается именно во втором параметре — обращении к свойству ДанныеИБ (данные информационной базы).

Способ 2: Использование расширения конфигурации

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

  1. Создадим новое расширение в конфигураторе (Меню "Конфигурация" -> "Расширения конфигурации").
  2. Добавим в расширение общий модуль МенеджерОбменаЧерезУниверсальныйФормат.
  3. Перенесем в расширение процедуру ПКО_Справочник_Номенклатура_Отправка_ПриОтправкеДанных, используя аннотацию &Вместо.
  4. Внутри расширения скопируем весь текст оригинальной процедуры, но внесем в него те самые правки, которые мы обсудили в первом способе.

Использование расширения позволяет сохранить возможность автоматического обновления типовой конфигурации в будущем, при этом эффективно решая проблему "здесь и сейчас".

Способ 3: Официальные исправления (Патчи) и обновление

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

  1. Перейдем в раздел Администрирование — Обслуживание — Обновление программы.
  2. Проверим раздел Установленные исправления (патчи).
  3. Если патч отсутствует, его можно скачать вручную с портала техподдержки 1С и установить через форму управления исправлениями.

Также стоит отметить, что в последующих релизах (начиная с 11.4.11.106) эта ошибка была исправлена на уровне кода конфигурации. Обновление до актуального релиза — самый надежный способ избавиться от подобных багов.

Действия после исправления: регистрация изменений

Иногда даже после внесения правок в код синхронизация продолжает выдавать ошибку на тех же самых объектах. Это происходит из-за того, что система пытается выгрузить ранее подготовленные данные из кэша или повторно обработать зарегистрированные изменения. Чтобы гарантированно завершить обмен, проделаем следующие шаги:

Во-первых, проверим состав отправляемых данных. Перейдем в настройки синхронизации и откроем окно Состав отправляемых данных. Найдем справочник Номенклатура. Если там зарегистрированы те самые позиции, на которых спотыкался обмен (например, "Губка для мытья посуды"), попробуем снять их с регистрации и зарегистрировать заново. Это заставит менеджер обмена повторно выполнить процедуру ПриОтправкеДанных уже с использованием нашего исправленного кода.

Во-вторых, убедимся, что версия формата обмена в настройках синхронизации соответствует актуальной (например, 1.7 или 1.8). Иногда помогает переключение версии формата на одну итерацию назад и обратно — это инициирует обновление кэша правил обмена.

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

← На главную