При настройке обмена данными между конфигурациями 1С (например, при переносе остатков из «Управление торговлей 10.3» в «Розницу») разработчики часто используют конфигурацию «Конвертация данных 2.1» (КД 2.1). Это мощный инструмент, но начинающие специалисты часто сталкиваются со сложными для понимания ошибками выгрузки. В этой статье мы подробно разберем, как локализовать и устранить популярную ошибку Поле объекта не обнаружено в обработчиках событий КД 2.1.
Когда выгрузка данных завершается аварийно, встроенная обработка УниверсальныйОбменДаннымиXML выдает подробный лог. Давайте внимательно изучим его структуру, чтобы понять, где именно произошел сбой:
Ошибка в обработчике события ПередВыгрузкой (свойства)
ПКО = Кассы (Справочник: Кассы)
ПКС = 4 (--> Магазин)
Объект = Касса Касса1 (Кассы)
СвойствоПриемника = Магазин (СправочникСсылка.Магазины)
Обработчик = ПередВыгрузкойСвойства
ОписаниеОшибки = Поле объекта не обнаружено (Магазин)
ПозицияМодуля = (1)
КодСообщения = 55
Разберем эти параметры по шагам:
Кассы.Магазин.Касса Касса1.ПередВыгрузкойСвойства (выполняется непосредственно перед выгрузкой значения реквизита в XML).Магазин, но этот объект или структура его не содержит.Для того чтобы исправить ошибку, нам необходимо найти и открыть правила обмена в КД 2.1. Выполним следующие действия: для быстрого поиска нужных элементов в конвертации подойдёт обработка для обозрения и поиска правил конвертации свойств.
Кассы и откроем его двойным кликом.Магазин (это и есть ПКС под номером 4). Откроем его настройки.Перед выгрузкой.Внутри обработчика мы обнаруживаем следующую строчку кода:
Значение = Параметры.Магазин;
Теперь причина ошибки становится понятна. Программа пытается передать в выгружаемый реквизит значение из глобальной структуры Параметры по ключу Магазин. Однако на момент выгрузки в этой структуре отсутствует свойство с таким именем.
В КД 2.1 объект Параметры — это структура, хранящая глобальные настройки всей конвертации. Ошибка Поле объекта не обнаружено (Магазин) означает, что ключ Магазин не был инициализирован. Это может происходить по трем причинам:
Магазин вообще не заведен в правилах обмена (на вкладке «Параметры» всей конвертации).УниверсальныйОбменДаннымиXML.Выяснив причину, мы можем применить два основных способа решения проблемы.
Если логика обмена подразумевает, что пользователь должен самостоятельно указывать магазин при выгрузке данных, нам необходимо корректно зарегистрировать этот параметр в правилах:
Магазин.СправочникСсылка.Магазины).УниверсальныйОбменДаннымиXML обязательно перейдем на вкладку «Параметры» и заполним созданное нами поле нужным магазином.Для предотвращения критических остановок выгрузки, если параметр по какой-то причине не был передан, перепишем код в событии Перед выгрузкой свойства Магазин. Нам нужно добавить проверку существования ключа в структуре:
// Проверяем наличие ключа в структуре параметров и его заполненность
Если Параметры.Свойство("Магазин") И ЗначениеЗаполнено(Параметры.Магазин) Тогда
Значение = Параметры.Магазин;
Иначе
// Если параметр отсутствует или пуст, отменяем выгрузку этого свойства
Отказ = Истина;
КонецЕсли;
Такой подход гарантирует, что выгрузка не прервется ошибкой. Если параметр не задан, свойство просто не запишется в XML-файл (или запишется пустым в зависимости от флагов ПКС), а выгрузка остальных данных продолжится в штатном режиме.
Если ошибка более сложная и простым анализом кода обработчика ее решить не удается, воспользуемся встроенным механизмом генерации модуля отладки КД 2.1. Разберем этот процесс подробно по шагам: для упрощения процесса отладки также подойдёт обработка универсального обмена с поддержкой отладки правил КД 2.0.
В базе КД откроем форму настройки правил обмена и нажмем кнопку «Выгрузить правила». На вкладке «Параметры выгрузки кода» (или «Отладка») нажмем кнопку «Сформировать модуль отладки». Система сгенерирует программный код всех наших обработчиков событий и скопирует его в буфер обмена.
Откроем Конфигуратор нашей информационной базы источника (откуда выгружаем данные). Создадим новую внешнюю обработку и назовем ее, например, DebugExchange.epf. Откроем модуль этой обработки и вставим туда весь скопированный ранее код модуля отладки. Сохраним файл обработки на диск.
Запустим базу источника под отладчиком из Конфигуратора. Откроем обработку УниверсальныйОбменДаннымиXML, перейдем на вкладку «Отладка обработчиков». Переведем переключатель в режим работы с внешней обработкой отладки и укажем путь к нашему файлу DebugExchange.epf.
В Конфигураторе базы источника откроем модуль созданной обработки DebugExchange.epf. Найдем процедуру, имя которой соответствует нашему событию (в комментариях будет указано ПКО Кассы и ПКС Магазин). Установим на строчке кода точку останова (клавишей F9). Запустим процесс выгрузки в режиме предприятия. Программа автоматически остановится на точке отладки, и мы сможем через табло (сочетание клавиш Shift+F9) посмотреть содержимое переменной Параметры, выяснить, почему нужное свойство отсутствует, и оперативно исправить алгоритмы обмена.