При работе с распределенными информационными базами (РИБ) в конфигурациях на базе 1С:Управление торговлей 11, ERP или Комплексная автоматизация 2 пользователи часто сталкиваются с критической остановкой обмена. Ошибка возникает в подчиненном узле при чтении файла сообщения и сопровождается следующим текстом:
{ОбщийМодуль.УниверсальныеМеханизмыПартийИСебестоимости.Модуль(8059)}: Поле объекта не обнаружено (Дата)
В этой статье мы подробно разберем, почему возникает эта ситуация, как локализовать проблемный объект и какие шаги предпринять для восстановления корректной синхронизации данных. Рассмотрим ситуацию совместно, шаг за шагом анализируя механизмы платформы и программного кода.
Для начала проанализируем место возникновения ошибки. Проблема локализована в общем модуле УниверсальныеМеханизмыПартийИСебестоимости. Этот модуль отвечает за инициализацию параметров для проведения документов по регистрам себестоимости. Ошибка происходит в процедуре ЗаполнитьПараметрыИнициализации, когда система пытается определить период совершения операции.
Рассмотрим фрагмент кода, на котором происходит сбой:
Если ОбщегоНазначенияУТКлиентСервер.ЕстьРеквизитОбъекта(Реквизиты, "Период") Тогда
Период = Реквизиты.Период;
Иначе
Период = Реквизиты.Дата;
КонецЕсли;
Проблема заключается в том, что в переменную Реквизиты попадает объект (или структура), у которого отсутствует и поле Период, и поле Дата. Это происходит в момент десериализации (чтения) данных из XML-файла обмена в подчиненном узле. Основная причина — наличие в плане обмена так называемых «битых ссылок» (объектов типа <Объект не найден>). Когда система пытается записать такой «пустой» объект, срабатывают обработчики ПередЗаписью, которые обращаются к модулю себестоимости, а тот, в свою очередь, не может найти дату у несуществующего документа.
Одним из наиболее вероятных мест сосредоточения проблемных записей является регистр сведений РеестрДокументов. Этот регистр используется в УТ 11 для оптимизации работы динамических списков и некоторых расчетов. Если в нем содержатся записи, где в поле Объект указана битая ссылка, обмен будет прерываться.
Рассмотрим порядок действий:
РеестрДокументов через «Все функции» (или «Функции для технического специалиста»).<Объект не найден...> в колонке «Объект».Если очистка регистра не помогла, значит, «битая ссылка» зарегистрирована непосредственно в плане обмена и передается из главной базы. Это часто случается после некорректного удаления объектов (например, через непосредственное удаление в коде без контроля ссылок) или после проведения свертки информационной базы.
Разберем алгоритм очистки регистрации:
Иногда визуально найти битую ссылку невозможно, так как она может находиться глубоко в структуре метаданных. В этом случае поможет стандартный механизм тестирования и исправления.
Проанализируем важные настройки ТиИ:
Запустим информационную базу в режиме Конфигуратора и перейдем в меню «Администрирование — Тестирование и исправление». При настройке выберем следующие пункты:
Важно выполнить эту процедуру как в головной базе (чтобы прекратить отправку мусорных данных), так и в периферийной.
Если автоматические средства не помогают, выясним, на каком конкретно объекте «спотыкается» 1С. Для этого проанализируем сам файл обмена Message_XXX_YYY.xml.
Рассмотрим методику:
<v8:ValueStorage> или конкретное имя документа. Скопируем его Ref (GUID).Также полезно использовать Технологический журнал. Настроим сбор событий EXCP (исключительные ситуации). В логах журнала будет зафиксирован момент обращения к реквизиту Дата, а выше по стеку вызовов можно будет увидеть, какой именно тип объекта обрабатывался в этот момент.
В некоторых случаях, особенно после масштабной свертки базы или перехода между релизами (как упоминалось в Сообщении №6), количество битых ссылок может быть критическим. Если ручная очистка не приносит результата, рекомендуем следующий радикальный, но действенный метод:
Проблема «Поле объекта не обнаружено (Дата)» — это типичный симптом нарушения целостности данных в РИБ. Чтобы избежать её в будущем, придерживайтесь следующих правил:
УниверсальныеМеханизмыПартийИСебестоимости также могут приводить к непредсказуемым ошибкам при записи данных.Мы проанализировали основные причины и способы устранения ошибки. В большинстве случаев достаточно очистки регистра РеестрДокументов и удаления битых ссылок из регистрации изменений.