Как исправить ошибку «Поле объекта не обнаружено (КаталогСбораИнформацииОбОбменах)» при обмене РИБ по расписанию

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

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

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

{ОбщийМодуль.ОбменДаннымиСервер.Модуль(4293)}: Поле объекта не обнаружено (КаталогСбораИнформацииОбОбменах)

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

Причины возникновения ошибки

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

  1. Интерактивный обмен: при запуске обмена пользователем вручную инициализация структуры параметров происходит в полном клиент-серверном контексте помощника синхронизации, где инициализируются все расширенные ключи настроек.
  2. Обмен по расписанию: фоновое регламентное задание формирует усеченный набор параметров через вызов функции СтруктураНастроекОбменаБазовая. В версиях БСП до 2.3.5.23 (ошибка 00-00107291) разработчики пропустили добавление ключа КаталогСбораИнформацииОбОбменах в базовую структуру.

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

Способ 1. Корректировка функции инициализации параметров (рекомендуемый)

Посмотрим на самое чистое программное решение, соответствующее официальному исправлению от разработчиков 1С. Для устранения ошибки в общем модуле ОбменДаннымиСервер найдем базовую функцию формирования параметров:

  1. Откроем конфигуратор и перейдем в общий модуль ОбменДаннымиСервер.
  2. Найдем функцию СтруктураНастроекОбменаБазовая.
  3. Добавим явную инициализацию свойства пустым значением:

Функция СтруктураНастроекОбменаБазовая() Экспорт
    
    СтруктураНастроекОбмена = Новый Структура;
    // ... прочие параметры структуры ...
    СтруктураНастроекОбмена.Вставить("КаталогСбораИнформацииОбОбменах", "");
    
    Возврат СтруктураНастроекОбмена;
    
КонецФункции

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

Способ 2. Проверка наличия свойства в месте вызова

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

Перейдем к процедуре СоздатьКопиюФайлаСообщенияОбмена общего модуля ОбменДаннымиСервер. Заменим исходный фрагмент:


Если НЕ ЗначениеЗаполнено(СтруктураНастроекОбмена.КаталогСбораИнформацииОбОбменах) Тогда 
    Возврат; 
КонецЕсли;

На безопасную конструкцию с предварительной проверкой существования ключа через метод Свойство():


Если СтруктураНастроекОбмена.Свойство("КаталогСбораИнформацииОбОбменах") Тогда 
    Если НЕ ЗначениеЗаполнено(СтруктураНастроекОбмена.КаталогСбораИнформацииОбОбменах) Тогда 
        Возврат; 
    КонецЕсли; 
Иначе 
    Возврат; 
КонецЕсли;

Способ 3. Исправление через расширение конфигурации без снятия с поддержки

Чтобы сохранить конфигурацию на полной типовой поддержке без включения возможности изменения, решим задачу с помощью расширения:

  1. Создадим новое расширение конфигурации в режиме совместимости основной базы.
  2. Добавим общий модуль ОбменДаннымиСервер в расширение.
  3. Перехватим функцию СтруктураНастроекОбменаБазовая с помощью аннотации &После:

&После("СтруктураНастроекОбменаБазовая")
Функция Расш_СтруктураНастроекОбменаБазовая(Результат)
    Если ТипЗнч(Результат) = Тип("Структура") Тогда
        Если НЕ Результат.Свойство("КаталогСбораИнформацииОбОбменах") Тогда
            Результат.Вставить("КаталогСбораИнформацииОбОбменах", "");
        КонецЕсли;
    КонецЕсли;
    Возврат Результат;
КонецФункции

Сопутствующие проблемы обмена РИБ в релизах 11.3 и их устранение

При восстановлении стабильной работы обменов в конфигурациях линейки 11.3 важно учитывать несколько критических моментов, приводящих к потере движений и нарушению целостности данных:

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