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

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

При настройке обмена данными между конфигурациями 1С (например, при переносе остатков из «Управление торговлей 10.3» в «Розницу») разработчики часто используют конфигурацию «Конвертация данных 2.1» (КД 2.1). Это мощный инструмент, но начинающие специалисты часто сталкиваются со сложными для понимания ошибками выгрузки. В этой статье мы подробно разберем, как локализовать и устранить популярную ошибку Поле объекта не обнаружено в обработчиках событий КД 2.1.

Анализируем текст ошибки

Когда выгрузка данных завершается аварийно, встроенная обработка УниверсальныйОбменДаннымиXML выдает подробный лог. Давайте внимательно изучим его структуру, чтобы понять, где именно произошел сбой:


Ошибка в обработчике события ПередВыгрузкой (свойства)
    ПКО                    =  Кассы  (Справочник: Кассы)
    ПКС                    =  4  (--> Магазин)
    Объект                 =  Касса Касса1  (Кассы)
    СвойствоПриемника      =  Магазин  (СправочникСсылка.Магазины)
    Обработчик             =  ПередВыгрузкойСвойства
    ОписаниеОшибки         =  Поле объекта не обнаружено (Магазин)
    ПозицияМодуля          =  (1)
    КодСообщения           =  55

Разберем эти параметры по шагам:

Шаг 1. Локализуем ПКС в Конвертации данных 2.1

Для того чтобы исправить ошибку, нам необходимо найти и открыть правила обмена в КД 2.1. Выполним следующие действия: для быстрого поиска нужных элементов в конвертации подойдёт обработка для обозрения и поиска правил конвертации свойств.

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

Внутри обработчика мы обнаруживаем следующую строчку кода:

Значение = Параметры.Магазин;

Теперь причина ошибки становится понятна. Программа пытается передать в выгружаемый реквизит значение из глобальной структуры Параметры по ключу Магазин. Однако на момент выгрузки в этой структуре отсутствует свойство с таким именем.

Почему возникает эта ошибка?

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

Шаг 2. Исправляем правила обмена в КД 2.1

Выяснив причину, мы можем применить два основных способа решения проблемы.

Вариант А. Настройка параметра в КД 2.1

Если логика обмена подразумевает, что пользователь должен самостоятельно указывать магазин при выгрузке данных, нам необходимо корректно зарегистрировать этот параметр в правилах:

  1. В КД 2.1 откроем на редактирование саму настройку правил обмена (самый верхний уровень иерархии).
  2. Перейдем на вкладку «Параметры».
  3. Добавим новый параметр с идентификатором Магазин.
  4. Зададим для него понятное наименование (например, «Магазин для выгрузки остатков») и укажем тип данных (например, СправочникСсылка.Магазины).
  5. Обязательно установим флаг «Редактировать в диалоге». Это позволит выводить поле выбора на форму обработки выгрузки.
  6. Сохраним измененные правила обмена и выгрузим их в XML-файл.
  7. При выгрузке данных в обработке УниверсальныйОбменДаннымиXML обязательно перейдем на вкладку «Параметры» и заполним созданное нами поле нужным магазином.

Вариант Б. Написание безопасного кода в ПКС

Для предотвращения критических остановок выгрузки, если параметр по какой-то причине не был передан, перепишем код в событии Перед выгрузкой свойства Магазин. Нам нужно добавить проверку существования ключа в структуре:


// Проверяем наличие ключа в структуре параметров и его заполненность
Если Параметры.Свойство("Магазин") И ЗначениеЗаполнено(Параметры.Магазин) Тогда
    Значение = Параметры.Магазин;
Иначе
    // Если параметр отсутствует или пуст, отменяем выгрузку этого свойства
    Отказ = Истина;
КонецЕсли;

Такой подход гарантирует, что выгрузка не прервется ошибкой. Если параметр не задан, свойство просто не запишется в XML-файл (или запишется пустым в зависимости от флагов ПКС), а выгрузка остальных данных продолжится в штатном режиме.

Шаг 3. Как отлаживать подобные ошибки в КД 2.1

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

  1. Создание модуля отладки в КД 2.1:

    В базе КД откроем форму настройки правил обмена и нажмем кнопку «Выгрузить правила». На вкладке «Параметры выгрузки кода» (или «Отладка») нажмем кнопку «Сформировать модуль отладки». Система сгенерирует программный код всех наших обработчиков событий и скопирует его в буфер обмена.

  2. Создание внешней обработки отладки:

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

  3. Подключение отладки в режиме Предприятия:

    Запустим базу источника под отладчиком из Конфигуратора. Откроем обработку УниверсальныйОбменДаннымиXML, перейдем на вкладку «Отладка обработчиков». Переведем переключатель в режим работы с внешней обработкой отладки и укажем путь к нашему файлу DebugExchange.epf.

  4. Установка точки останова и анализ переменных:

    В Конфигураторе базы источника откроем модуль созданной обработки DebugExchange.epf. Найдем процедуру, имя которой соответствует нашему событию (в комментариях будет указано ПКО Кассы и ПКС Магазин). Установим на строчке кода точку останова (клавишей F9). Запустим процесс выгрузки в режиме предприятия. Программа автоматически остановится на точке отладки, и мы сможем через табло (сочетание клавиш Shift+F9) посмотреть содержимое переменной Параметры, выяснить, почему нужное свойство отсутствует, и оперативно исправить алгоритмы обмена.

← На главную