Как исправить ошибку «Поле объекта не обнаружено (Дата)» при обмене РИБ в 1С:Управлении торговлей 11?

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

При работе с распределенными информационными базами (РИБ) в конфигурациях на базе 1С:Управление торговлей 11, ERP или Комплексная автоматизация 2 пользователи часто сталкиваются с критической остановкой обмена. Ошибка возникает в подчиненном узле при чтении файла сообщения и сопровождается следующим текстом:

{ОбщийМодуль.УниверсальныеМеханизмыПартийИСебестоимости.Модуль(8059)}: Поле объекта не обнаружено (Дата)

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

Выясняем причину: почему подсистема себестоимости ищет дату?

Для начала проанализируем место возникновения ошибки. Проблема локализована в общем модуле УниверсальныеМеханизмыПартийИСебестоимости. Этот модуль отвечает за инициализацию параметров для проведения документов по регистрам себестоимости. Ошибка происходит в процедуре ЗаполнитьПараметрыИнициализации, когда система пытается определить период совершения операции.

Рассмотрим фрагмент кода, на котором происходит сбой:


Если ОбщегоНазначенияУТКлиентСервер.ЕстьРеквизитОбъекта(Реквизиты, "Период") Тогда
    Период = Реквизиты.Период;
Иначе
    Период = Реквизиты.Дата;
КонецЕсли;

Проблема заключается в том, что в переменную Реквизиты попадает объект (или структура), у которого отсутствует и поле Период, и поле Дата. Это происходит в момент десериализации (чтения) данных из XML-файла обмена в подчиненном узле. Основная причина — наличие в плане обмена так называемых «битых ссылок» (объектов типа <Объект не найден>). Когда система пытается записать такой «пустой» объект, срабатывают обработчики ПередЗаписью, которые обращаются к модулю себестоимости, а тот, в свою очередь, не может найти дату у несуществующего документа.

Решение 1: Очистка регистра сведений «Реестр документов»

Одним из наиболее вероятных мест сосредоточения проблемных записей является регистр сведений РеестрДокументов. Этот регистр используется в УТ 11 для оптимизации работы динамических списков и некоторых расчетов. Если в нем содержатся записи, где в поле Объект указана битая ссылка, обмен будет прерываться.

Рассмотрим порядок действий:

  1. Откроем в подчиненном узле (где возникает ошибка) регистр сведений РеестрДокументов через «Все функции» (или «Функции для технического специалиста»).
  2. Проанализируем записи на наличие пустых ссылок или записей с текстом <Объект не найден...> в колонке «Объект».
  3. Удалим такие записи вручную или воспользуемся специальной обработкой для очистки регистра.
  4. Повторим попытку загрузки сообщения обмена.

Решение 2: Работа с регистрацией изменений в плане обмена

Если очистка регистра не помогла, значит, «битая ссылка» зарегистрирована непосредственно в плане обмена и передается из главной базы. Это часто случается после некорректного удаления объектов (например, через непосредственное удаление в коде без контроля ссылок) или после проведения свертки информационной базы.

Разберем алгоритм очистки регистрации:

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

Решение 3: Тестирование и исправление (ТиИ)

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

Проанализируем важные настройки ТиИ:

Запустим информационную базу в режиме Конфигуратора и перейдем в меню «Администрирование — Тестирование и исправление». При настройке выберем следующие пункты:

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

Решение 4: Глубокий поиск объекта через Технологический журнал или XML

Если автоматические средства не помогают, выясним, на каком конкретно объекте «спотыкается» 1С. Для этого проанализируем сам файл обмена Message_XXX_YYY.xml.

Рассмотрим методику:

  1. Попробуем открыть файл обмена текстовым редактором (лучше использовать Notepad++ или аналогичные, способные работать с большими XML).
  2. Перейдем в самый конец файла. Обычно ошибка возникает на последнем или предпоследнем объекте, который система успела начать считывать перед аварией.
  3. Найдем тег типа <v8:ValueStorage> или конкретное имя документа. Скопируем его Ref (GUID).
  4. В базе данных через поиск по уникальному идентификатору (с помощью консоли запросов или специальных обработок) найдем этот объект. Если объект не находится — значит, мы нашли ту самую битую ссылку, регистрацию которой нужно удалить в источнике.

Также полезно использовать Технологический журнал. Настроим сбор событий EXCP (исключительные ситуации). В логах журнала будет зафиксирован момент обращения к реквизиту Дата, а выше по стеку вызовов можно будет увидеть, какой именно тип объекта обрабатывался в этот момент.

Решение 5: Пересоздание синхронизации (крайняя мера)

В некоторых случаях, особенно после масштабной свертки базы или перехода между релизами (как упоминалось в Сообщении №6), количество битых ссылок может быть критическим. Если ручная очистка не приносит результата, рекомендуем следующий радикальный, но действенный метод:

  1. Удалим настройку синхронизации в обоих узлах.
  2. Выполним ТиИ обеих баз.
  3. Создадим новую настройку обмена «с нуля» с новыми префиксами.
  4. Произведем начальную выгрузку данных. Это позволит системе сформировать «чистые» таблицы регистрации изменений, не содержащие хвостов от старых версий документов.

Резюме и рекомендации

Проблема «Поле объекта не обнаружено (Дата)» — это типичный симптом нарушения целостности данных в РИБ. Чтобы избежать её в будущем, придерживайтесь следующих правил:

Мы проанализировали основные причины и способы устранения ошибки. В большинстве случаев достаточно очистки регистра РеестрДокументов и удаления битых ссылок из регистрации изменений.

← На главную