При обновлении конфигураций на базе Библиотеки стандартных подсистем (в частности, 1С:Управление торговлей 11.3) многие сталкиваются с ситуацией, когда регламентная синхронизация распределенной информационной базы (РИБ) полностью прекращает работать. При этом ручной интерактивный обмен через интерфейс выполняется без ошибок, а выполнение регламентного задания в фоновом режиме завершается аварийно.
В журнале регистрации и системных сообщениях фиксируется ошибка следующего вида:
{ОбщийМодуль.ОбменДаннымиСервер.Модуль(4293)}: Поле объекта не обнаружено (КаталогСбораИнформацииОбОбменах)
Разберем детально механизм возникновения данного сбоя, выясним, почему поведение системы различается при интерактивном и фоновом запуске, а также рассмотрим все возможные пути исправления проблемы.
Проанализируем контекст выполнения процедур обмена данными. Свойство КаталогСбораИнформацииОбОбменах предназначено для сохранения служебных копий и дампов файлов обмена при диагностике ошибок синхронизации. Разница между сценариями запуска заключается в следующем:
СтруктураНастроекОбменаБазовая. В версиях БСП до 2.3.5.23 (ошибка 00-00107291) разработчики пропустили добавление ключа КаталогСбораИнформацииОбОбменах в базовую структуру.Когда фоновый процесс доходит до вызова процедуры сохранения файла сообщения, происходит прямое обращение к отсутствующему свойству структуры через точку, что немедленно вызывает исключительную ситуацию.
Посмотрим на самое чистое программное решение, соответствующее официальному исправлению от разработчиков 1С. Для устранения ошибки в общем модуле ОбменДаннымиСервер найдем базовую функцию формирования параметров:
ОбменДаннымиСервер.СтруктураНастроекОбменаБазовая.
Функция СтруктураНастроекОбменаБазовая() Экспорт
СтруктураНастроекОбмена = Новый Структура;
// ... прочие параметры структуры ...
СтруктураНастроекОбмена.Вставить("КаталогСбораИнформацииОбОбменах", "");
Возврат СтруктураНастроекОбмена;
КонецФункции
После добавления данной строки регламентное задание синхронизации будет получать корректно сформированную структуру с объявленным полем, и обращение к нему перестанет вызывать исключение.
Если требуется точечно обезопасить саму процедуру создания копии файла сообщения от неполных структур параметров, изменим алгоритм в месте падения.
Перейдем к процедуре СоздатьКопиюФайлаСообщенияОбмена общего модуля ОбменДаннымиСервер. Заменим исходный фрагмент:
Если НЕ ЗначениеЗаполнено(СтруктураНастроекОбмена.КаталогСбораИнформацииОбОбменах) Тогда
Возврат;
КонецЕсли;
На безопасную конструкцию с предварительной проверкой существования ключа через метод Свойство():
Если СтруктураНастроекОбмена.Свойство("КаталогСбораИнформацииОбОбменах") Тогда
Если НЕ ЗначениеЗаполнено(СтруктураНастроекОбмена.КаталогСбораИнформацииОбОбменах) Тогда
Возврат;
КонецЕсли;
Иначе
Возврат;
КонецЕсли;
Чтобы сохранить конфигурацию на полной типовой поддержке без включения возможности изменения, решим задачу с помощью расширения:
ОбменДаннымиСервер в расширение.СтруктураНастроекОбменаБазовая с помощью аннотации &После:
&После("СтруктураНастроекОбменаБазовая")
Функция Расш_СтруктураНастроекОбменаБазовая(Результат)
Если ТипЗнч(Результат) = Тип("Структура") Тогда
Если НЕ Результат.Свойство("КаталогСбораИнформацииОбОбменах") Тогда
Результат.Вставить("КаталогСбораИнформацииОбОбменах", "");
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
При восстановлении стабильной работы обменов в конфигурациях линейки 11.3 важно учитывать несколько критических моментов, приводящих к потере движений и нарушению целостности данных:
Кассовая смена, то при загрузке и последующем перепроведении Отчета о розничных продажах в узле, где нет кассовых смен, очищаются движения по регистрам (например, Товары на складах и взаиморасчеты по эквайрингу). Необходимо убедиться, что кассовые смены включены в состав плана обмена РИБ, либо исключить динамическое перепроведение документов при загрузке.ПланыОбмена.УдалитьРегистрациюИзменений(Узел).