При эксплуатации связки конфигураций Управление торговлей 10.3 и Бухгалтерия предприятия 2.0 (или при миграции на 3.0) часто возникает необходимость сменить способ обмена данными. Переход с «прямого подключения» (COM-соединение) на «обмен через файловый ресурс» (XML) кажется простой задачей, но на практике программисты сталкиваются с неочевидными ошибками в типовых правилах обмена. Одной из самых распространенных является ошибка в обработчике ПослеЗагрузкиОбъекта для регистра сведений ПрефиксыИнформационныхБаз.
В этой статье мы подробно разберем, почему возникает эта ошибка, как проанализировать структуру XML-пакета и какие шаги необходимо предпринять для успешного перехода на файловый обмен.
При использовании прямого подключения (COM) база-приемник и база-источник взаимодействуют в едином контексте. Многие проверки и инициализации параметров внутри правил обмена проходят «мягко», так как система имеет прямой доступ к метаданным обеих баз. Однако при переходе на файловый обмен (XML) механизм ОбменДаннымиXML становится более строгим.
Ошибка Значение не является значением объектного типа (Получить) указывает на то, что в коде обработчика происходит обращение к переменной (часто это ПараметрыОбъекта или глобальные параметры обмена), которая в данный момент не инициализирована или имеет значение Неопределено. Метод Получить() характерен для объектов типа Соответствие или Структура. Если объект пуст, выполнение кода прерывается.
Проанализируем ситуацию: в типовых правилах обмена для регистра ПрефиксыИнформационныхБаз прописан код, который пытается сопоставить префиксы для корректной нумерации документов. При первой выгрузке после смены настройки обмена система пытается синхронизировать служебные данные, и именно здесь происходит сбой.
Рассмотрим структуру XML-данных, которая вызывает падение загрузчика. Как правило, в файле обмена можно встретить следующий блок:
<НаборЗаписейРегистра Нпп="1948" Тип="РегистрСведенийНаборЗаписей.ПрефиксыИнформационныхБаз" ИмяПравила="ПрефиксыИнформационныхБаз" ПустойНабор="true">
<Отбор>
<ЗначениеПараметра Имя="Префикс" Тип="Строка">
<Значение>УТ</Значение>
</ЗначениеПараметра>
</Отбор>
<СтрокиНабораЗаписей/>
</НаборЗаписейРегистра>
Обратим внимание на атрибут ПустойНабор="true". Это означает, что система регистрации изменений в базе-источнике (УТ 10.3) зафиксировала необходимость очистки записей по данному префиксу в приемнике. Когда загрузчик в Бухгалтерии встречает такой блок, он запускает стандартный цикл обработки, включая выполнение кода в обработчике ПослеЗагрузкиОбъекта. Поскольку реальных строк данных в наборе нет (набор пустой), код обработчика, не имея проверок на пустое значение параметров, обращается к методам объекта, которого не существует.
Рассмотрим несколько способов устранения этой ошибки: от простых манипуляций с данными до правки правил обмена.
Самый быстрый и эффективный способ, не требующий изменения кода. Если ошибка возникает на служебном регистре ПрефиксыИнформационныхБаз, скорее всего, эти данные не являются критически важными для ежедневного обмена, так как префиксы настраиваются один раз при запуске системы.
Префиксы информационных баз.Выясним причину, по которой система пытается выгрузить «пустой набор». Часто это связано с тем, что при создании новой настройки обмена «через файловый ресурс» не были корректно заполнены коды узлов или префиксы баз.
Проверим следующие настройки:
Сервис — Настройка учета — Настройка параметров учета. Убедимся, что заполнен префикс информационной базы.Если ошибка сохраняется, нам необходимо точно определить, какая строка кода в правилах обмена вызывает сбой. Для этого выполним следующие действия:
ОбменДаннымиXML.ОбменДаннымиXML, в процедуре ВыполнитьДействиеПослеЗагрузкиОбъекта.ПараметрыОбъекта. Скорее всего, вы увидите, что попытка вызова метода .Получить() происходит там, где переменная имеет значение Неопределено.Если вам необходимо, чтобы этот регистр синхронизировался автоматически, придется внести изменения в правила обмена (xml-файл правил).
ПрефиксыИнформационныхБаз.ПослеЗагрузки.
Если ПараметрыОбъекта <> Неопределено Тогда
ЗначениеПараметра = ПараметрыОбъекта.Получить("ИмяНужногоПараметра");
// Дальнейшая логика обработки
КонецЕсли;
После внесения правок сохраним правила и обновим их в настройках обмена в обеих базах.
При смене типа обмена с COM на файл мы рекомендуем не просто менять настройки в существующем узле, а создать новую настройку. Рассмотрим правильный алгоритм:
Trade_Account.xml и Account_Trade.xml) из папки установки текущего релиза конфигурации. Помните, что правила из комплекта БП могут отличаться от правил из комплекта УТ. Для запуска обмена из БП лучше использовать правила, поставляемые с БП.Таким образом, мы проанализировали специфическую ошибку, возникающую при переходе на файловый обмен между 1С:УТ 10.3 и 1С:БП 2.0. Основная причина кроется в попытке обработки пустого набора данных в служебном регистре префиксов. Следуя приведенным выше инструкциям, вы сможете либо исключить эти данные из обмена, либо скорректировать правила для их корректной обработки.