Как правильно сменить обмен через подключение на обмен через файловый ресурс в связке УТ 10.3 и БП 2.0 и исправить ошибку ПослеЗагрузкиОбъекта

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

При эксплуатации связки конфигураций Управление торговлей 10.3 и Бухгалтерия предприятия 2.0 (или при миграции на 3.0) часто возникает необходимость сменить способ обмена данными. Переход с «прямого подключения» (COM-соединение) на «обмен через файловый ресурс» (XML) кажется простой задачей, но на практике программисты сталкиваются с неочевидными ошибками в типовых правилах обмена. Одной из самых распространенных является ошибка в обработчике ПослеЗагрузкиОбъекта для регистра сведений ПрефиксыИнформационныхБаз.

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

Разберем причину возникновения ошибки

При использовании прямого подключения (COM) база-приемник и база-источник взаимодействуют в едином контексте. Многие проверки и инициализации параметров внутри правил обмена проходят «мягко», так как система имеет прямой доступ к метаданным обеих баз. Однако при переходе на файловый обмен (XML) механизм ОбменДаннымиXML становится более строгим.

Ошибка Значение не является значением объектного типа (Получить) указывает на то, что в коде обработчика происходит обращение к переменной (часто это ПараметрыОбъекта или глобальные параметры обмена), которая в данный момент не инициализирована или имеет значение Неопределено. Метод Получить() характерен для объектов типа Соответствие или Структура. Если объект пуст, выполнение кода прерывается.

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

Анализ проблемного фрагмента XML

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


<НаборЗаписейРегистра Нпп="1948" Тип="РегистрСведенийНаборЗаписей.ПрефиксыИнформационныхБаз" ИмяПравила="ПрефиксыИнформационныхБаз" ПустойНабор="true">
    <Отбор>
        <ЗначениеПараметра Имя="Префикс" Тип="Строка">
            <Значение>УТ</Значение>
        </ЗначениеПараметра>
    </Отбор>
    <СтрокиНабораЗаписей/>
</НаборЗаписейРегистра>

Обратим внимание на атрибут ПустойНабор="true". Это означает, что система регистрации изменений в базе-источнике (УТ 10.3) зафиксировала необходимость очистки записей по данному префиксу в приемнике. Когда загрузчик в Бухгалтерии встречает такой блок, он запускает стандартный цикл обработки, включая выполнение кода в обработчике ПослеЗагрузкиОбъекта. Поскольку реальных строк данных в наборе нет (набор пустой), код обработчика, не имея проверок на пустое значение параметров, обращается к методам объекта, которого не существует.

Пошаговая инструкция по решению проблемы

Рассмотрим несколько способов устранения этой ошибки: от простых манипуляций с данными до правки правил обмена.

Способ 1. Очистка регистрации изменений

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

  1. Откроем в базе Управление торговлей 10.3 обработку «Регистрация изменений для обмена данными».
  2. Найдем в списке объектов регистр сведений Префиксы информационных баз.
  3. Проанализируем наличие зарегистрированных изменений. Если там висят записи, которые вы не планировали передавать, просто удалим их из регистрации (нажмем «Снять регистрацию»).
  4. Повторим процедуру выгрузки. Поскольку данных по этому регистру в файле больше не будет, загрузка в БП 2.0 пройдет успешно.

Способ 2. Проверка и заполнение префиксов в константах

Выясним причину, по которой система пытается выгрузить «пустой набор». Часто это связано с тем, что при создании новой настройки обмена «через файловый ресурс» не были корректно заполнены коды узлов или префиксы баз.

Проверим следующие настройки:

Способ 3. Использование отладки для поиска строки кода

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

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

Способ 4. Корректировка правил обмена в «Конвертации данных»

Если вам необходимо, чтобы этот регистр синхронизировался автоматически, придется внести изменения в правила обмена (xml-файл правил).

  1. Загрузим правила в конфигурацию Конвертация данных 2.1.
  2. Найдем ПКО (Правило конвертации объектов) для регистра ПрефиксыИнформационныхБаз.
  3. Перейдем в обработчик события ПослеЗагрузки.
  4. Добавим проверку на существование объекта или параметров. Пример безопасного кода может выглядеть так:

Если ПараметрыОбъекта <> Неопределено Тогда
    ЗначениеПараметра = ПараметрыОбъекта.Получить("ИмяНужногоПараметра");
    // Дальнейшая логика обработки
КонецЕсли;

После внесения правок сохраним правила и обновим их в настройках обмена в обеих базах.

Рекомендации по настройке «с нуля»

При смене типа обмена с COM на файл мы рекомендуем не просто менять настройки в существующем узле, а создать новую настройку. Рассмотрим правильный алгоритм:

  1. Создание новых узлов: В обеих базах создайте новые элементы в плане обмена. Присвойте им понятные коды (например, "Т1" и "Б1").
  2. Загрузка актуальных правил: Всегда берите файлы правил (Trade_Account.xml и Account_Trade.xml) из папки установки текущего релиза конфигурации. Помните, что правила из комплекта БП могут отличаться от правил из комплекта УТ. Для запуска обмена из БП лучше использовать правила, поставляемые с БП.
  3. Первичная выгрузка: Сначала выполните выгрузку из БП, чтобы передать техническую информацию о префиксах, а затем загрузку и встречную выгрузку из УТ.

Таким образом, мы проанализировали специфическую ошибку, возникающую при переходе на файловый обмен между 1С:УТ 10.3 и 1С:БП 2.0. Основная причина кроется в попытке обработки пустого набора данных в служебном регистре префиксов. Следуя приведенным выше инструкциям, вы сможете либо исключить эти данные из обмена, либо скорректировать правила для их корректной обработки.

← На главную