В работе с распределенными информационными базами (РИБ) часто возникают ситуации, когда обмен данными проходит «успешно» по отчетам системы, но на стороне приемника документы не появляются. В данной статье мы разберем случай, когда после динамического обновления конфигурации часть данных перестает попадать в очередь обмена, и выясним, как вернуть систему в рабочее состояние.
Основная проблема, с которой сталкиваются разработчики после динамического обновления — это рассинхронизация скомпилированного кода в кэше сервера и клиентских машин. Если в момент обмена возникла ошибка, вызванная «битым» кодом или некорректной логикой обработки транзакций, механизм регистрации изменений может дать сбой.
Рассмотрим ключевые факторы, которые могли привести к «отвалу» регистрации:
srvinfo) могут содержать старые версии кода, что приводит к конфликтам при выполнении ПодписокНаСобытия, отвечающих за запись в ПланыОбмена.Первым делом проанализируем код, отвечающий за запись документов. Если в конфигурации присутствуют сложные процедуры, вызывающие цепочки подписок, убедитесь, что структура обработки исключений не «съедает» ошибки. Рассмотрим пример того, как некорректная транзакция может привести к сбою:
Процедура ВыполнитьДействие()
НачатьТранзакцию();
Попытка
// Сложная логика с вызовом процедур
ЗаписатьДокумент();
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
// В некоторых случаях ошибка здесь не логируется должным образом
КонецПопытки;
КонецПроцедуры
Если уровень вложенности транзакций превышает допустимые нормы, платформа может перестать контролировать корректную запись в таблицу регистрации. Всегда проверяйте, попадает ли объект в план обмена через обработку КонсольКода или штатный отчет по регистрации изменений.
Если программный код проверен и ошибок в логике не обнаружено, приступаем к радикальному методу решения — очистке кэша. Динамическое обновление часто оставляет «мусор» в рабочих процессах rphost. Чтобы гарантированно исправить ситуацию, выполните следующие действия:
srvinfo, относящиеся к конкретной базе).AppData\Local\1C\1Cv8.Чтобы понять, где именно прерывается регистрация, воспользуйтесь отладчиком. Установите точку останова в подписках на события ПриЗаписи для документа. Попробуйте записать документ под пользователем, у которого наблюдается проблема, и под тем, у которого все работает. Если на проблемном рабочем месте код подписки не вызывается или вызывает исключение, которое не отображается в ЖурналеРегистрации, значит, проблема в серверном окружении или правах.
Если проблема сохраняется только на конкретных кассах, попробуйте пересоздать профиль пользователя Windows. Иногда поврежденный профиль блокирует доступ к временным файлам, необходимым платформе для корректной работы обменов.
Мы выяснили, что в сложных распределенных системах причиной «молчаливого» сбоя регистрации является конфликт кэшированных данных после динамических обновлений. Рекомендуем избегать динамического обновления для изменений, затрагивающих планы обмена и подписки на события. Если проблема возникла, комплексная очистка сервера и клиентских кэшей — наиболее эффективный способ вернуть систему в стабильное состояние.