Почему при онлайн-обмене между УПП и ERP объекты по ссылке не выгружаются или не загружаются в базу-приемник?

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

При настройке обмена данными между «1С:Управление производственным предприятием» (УПП) и «1С:ERP Управление предприятием» (ERP) специалисты часто сталкиваются с ситуацией, когда основные объекты (например, Заказы клиентов) переносятся корректно, а связанные с ними справочники (например, Договоры или Соглашения) либо не выгружаются вовсе, либо не создаются в базе-приемнике. Это приводит к нарушению целостности данных и возникновению критических ошибок при попытке открыть документы в ERP. Рассмотрим подробно причины этой проблемы и способы её решения.

Анализ механизма выгрузки по ссылке в планах обмена

Разберем базовый принцип работы онлайн-обмена. Когда мы используем планы обмена и механизмы «Конвертации данных 2.1», выгрузке подлежат только те объекты, которые явно зарегистрированы на узле обмена. Проанализируем типичную ошибку: программист устанавливает в правилах конвертации свойств (ПКС) признак ВыгрузитьОбъект = Истина, ожидая, что система принудительно выгрузит объект, на который ссылается реквизит. Однако в режиме обмена через планы обмена эта настройка часто игнорируется платформой.

Выясним причину: при обмене через планы обмена система оптимизирует поток данных. Если объект-ссылка не зарегистрирован к выгрузке, в XML-файл попадает только его уникальный идентификатор (УИД) и информация для поиска. Если в базе-приемнике объект с таким УИД отсутствует, ссылка останется «битой».

Проблема флага ПродолжитьПоиск в XML-файле выгрузки

Одной из самых неочевидных причин, по которой объект присутствует в файле выгрузки, но не загружается в ERP, является использование механизма поиска. Рассмотрим ситуацию, когда УИД объектов в УПП и ERP не совпадают (например, база ERP наполнялась частично вручную или из других источников).

Проанализируем поведение системы при наличии атрибута ПродолжитьПоиск="true" в узле объекта. Если этот флаг установлен в правилах обмена (ПКО), загрузчик в ERP действует по следующему алгоритму:

  1. Пытается найти объект по УИД.
  2. Если по УИД объект не найден, система переходит к поиску по полям (например, по ИНН/КПП для контрагента или по номеру/дате для договора).
  3. Критический момент: если в файле переданы только поля поиска, но не переданы все обязательные реквизиты для создания нового объекта, и при этом поиск не дал результатов, система может просто проигнорировать создание объекта, чтобы не плодить «пустышки» с незаполненными данными.

Как показала практика, удаление признака ПродолжитьПоиск="true" заставляет систему создать новый объект на основании имеющихся в файле данных, если по УИД совпадений не найдено. Это актуально в случаях, когда синхронизация по идентификаторам невозможна.

Ошибка преобразования значения к типу Булево в ERP

Рассмотрим последствия некорректной загрузки ссылочных объектов. Часто при открытии загруженного документа (например, Заказа клиента) в ERP возникает ошибка:


{ОбщийМодуль.ВзаиморасчетыКлиентСервер.Модуль(336)}: ИначеЕсли ЗаданГрафикИсполнения И (ЭтоЗаказ ИЛИ ЭтапыОплаты = Неопределено)
Преобразование значения к типу Булево не может быть выполнено

Проанализируем ситуацию: эта ошибка возникает из-за того, что объект (Заказ) ссылается на Договор, который либо не загрузился, либо загрузился некорректно. В программном коде ERP при чтении данных из битой ссылки реквизиты договора возвращают Null или Неопределено. Когда логика формы ожидает получить Истина или Ложь (например, свойство «Использовать договоры»), а получает пустое значение, происходит аварийное завершение работы.

Решение проблемы через принудительную регистрацию и выгрузку

Чтобы «вылечить» обмен и гарантировать наличие всех объектов по ссылке, рекомендуется применить следующие шаги:

  1. Принудительная выгрузка в обработчиках: В правилах конвертации свойств (ПКС) в обработчике «Перед выгрузкой» можно прописать код, который будет принудительно вызывать выгрузку объекта-ссылки по конкретному правилу, игнорируя регистрацию на узле.
  2. Использование режима записи: Убедимся, что при загрузке в ERP используется режим Объект.ОбменДанными.Загрузка = Истина. Это позволит записать объект, даже если в нем не заполнены некоторые реквизиты, которые проверяются бизнес-логикой при обычном интерактивном сохранении.
  3. Проверка регистра соответствий: Посмотрим на состояние регистра сведений СоответствияОбъектовИнформационныхБаз в ERP. Если там зафиксирована связь УИД из УПП с пустой ссылкой в ERP, система будет считать, что объект «уже загружен», и не создаст его повторно. В таком случае записи в регистре по проблемным объектам нужно очистить.

Пример настройки правил конвертации

Разберем, как можно модифицировать правила, чтобы объект гарантированно уходил в файл. Вместо простой галочки «Выгружать объект по ссылке», в обработчике «Перед выгрузкой» свойства (например, «Договор») можно использовать следующий подход:


// В обработчике ПКС "Договор" (Перед выгрузкой)
Если ЗначениеЗаполнено(Источник.Договор) Тогда
    ВыгрузитьПоПравилу(Источник.Договор, , , , "ДоговорыКонтрагентов");
КонецЕсли;

Этот метод заставляет систему поместить полное тело объекта в XML-пакет, независимо от того, зарегистрирован ли он в плане обмена. На стороне приемника (ERP) это обеспечит наличие всех данных для создания полноценного элемента справочника.

Итоги и рекомендации

Подводя итог, отметим, что для успешного онлайн-обмена между УПП и ERP необходимо:

← На главную