Почему при синхронизации ЗУП 3 и УПП возникает ошибка «Поле объекта не обнаружено (Ссылка)» и как ее исправить?

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

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

В журнале регистрации фиксируется критическая ошибка следующего вида:


Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(17338)}: Ошибка при отправке данных: 
{Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(4351)}: Ошибка в обработчике события ПередВыгрузкойОбъекта
    ПКО          =  ОтражениеЗарплатыВРеглУчете  (Документ: Отражение зарплаты в бухучете)
    Объект       =  Отражение зарплаты в бухучете ПГЗК-000010 от 31.10.2018 (Документ объект)
    Обработчик   =  ПередВыгрузкойОбъекта
    ОписаниеОшибки =  Поле объекта не обнаружено (Ссылка)
    ПозицияМодуля  =  Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(11939)

Проанализируем ситуацию, выясним глубинную причину этой проблемы и рассмотрим подробные варианты ее решения.

В чем разница между универсальным обменом и синхронизацией БСП?

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

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

Анализ причин сбоя при выгрузке перечислений

Посмотрим на строку кода в обработчике «Перед выгрузкой» документа ОтражениеЗарплатыВБухучете, которая вызывает сбой:


ВыгрузитьПоПравилу(Выб.ВидНачисленияОплатыТрудаДляНУ, , , , "ВидыНачисленийОплатыТрудаПоСт255НК");

Здесь переменная Выб.ВидНачисленияОплатыТрудаДляНУ хранит значение перечисления, которое должно быть выгружено по определенному правилу конвертации объектов (ПКО). Ошибка возникает по двум ключевым причинам:


Варианты решения проблемы

Рассмотрим несколько способов исправления этой ошибки в правилах обмена (через конфигурацию «Конвертация данных 2.1» или путем прямого редактирования XML-файла правил).

Способ 1. Добавление проверки заполненности значения (Быстрый и надежный способ)

Самый простой и эффективный метод решения проблемы — гарантировать, что в функцию выгрузки никогда не попадет пустое или неопределенное значение. Для этого добавим проверку с использованием системной функции ЗначениеЗаполнено().

Изменим исходный код в обработчике «Перед выгрузкой» документа следующим образом:


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

Как это работает: теперь, если строка табличной части документа не содержит заполненного вида начисления по статье 255 НК РФ, функция выгрузки для этой строки просто пропускается. Движок БСП не получает пустое значение и синхронизация проходит без ошибок.

Способ 2. Корректировка настроек ПКО в «Конвертации данных 2.1»

Если ошибка возникает даже при заполненных значениях, необходимо проанализировать настройки самого правила конвертации объектов ВидыНачисленийОплатыТрудаПоСт255НК:

  1. Откроем правила обмена в конфигурации «Конвертация данных 2.1».
  2. Перейдем в список ПКО (Правила конвертации объектов) и найдем правило с идентификатором ВидыНачисленийОплатыТрудаПоСт255НК.
  3. Проверим поле «Тип источника». В нем должно быть строго указано конкретное перечисление источника: ПеречислениеСсылка.ВидыНачисленийОплатыТрудаДляНУ.
  4. Если это поле оставлено пустым (например, для реализации универсального сопоставления), БСП-обработчик онлайн-обмена по умолчанию начинает трактовать передаваемый объект как обычный ссылочный тип (справочник или документ) и пытается принудительно прочитать его уникальный идентификатор через обращение к Ссылка. Явное указание типа источника-перечисления решает эту проблему на уровне метаданных.

Способ 3. Перенос логики на уровень ПКС (Архитектурно правильный подход)

Программный вызов функции ВыгрузитьПоПравилу() в обработчиках событий документов для выгрузки перечислений часто становится источником проблем при обновлении конфигураций. Платформа 1С динамически меняет состав метаданных, что приводит к неработоспособности жестко закодированных скриптов.

Более правильным решением будет перенос сопоставления на уровень ПКС (Правил конвертации свойств) табличной части документа:

  1. Перейдем в ПКО документа ОтражениеЗарплатыВРеглУчете.
  2. В табличной части найдем свойство (колонку), отвечающую за вид начисления для налогового учета.
  3. Для этого свойства создадим правило конвертации свойств (ПКС) и укажем в поле «Правило конвертации (ПКО)» наше правило для перечисления: ВидыНачисленийОплатыТрудаПоСт255НК.
  4. Удалим весь программный код ручной выгрузки этого реквизита из обработчика «Перед выгрузкой» документа.

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

После внесения изменений в правила обмена не забудьте сохранить их, загрузить обновленный XML-файл правил в настройки синхронизации данных ЗУП 3 и выполнить тестовую отправку данных.

← На главную