Мы часто сталкиваемся с ситуацией, когда скорость внесения изменений в конфигурацию является приоритетом. Динамическое обновление («демоническое», как его часто называют в профессиональной среде) позволяет не выгонять пользователей из базы. Однако этот механизм таит в себе множество подводных камней. Рассмотрим проблему, с которой столкнулся автор темы: база обновляется динамически, все работает штатно, но в какой-то момент один конкретный пользователь перестает получать обновленную конфигурацию. Чистка локального кэша не помогает. Давайте разберем эту ситуацию детально, проанализируем механизмы работы платформы и найдем пути решения.
Прежде чем переходить к лечению, мы должны понять природу заболевания. Когда мы выполняем динамическое обновление, платформа не заменяет основную конфигурацию сразу. Вместо этого происходят следующие процессы:
ConfigSave.Params устанавливается флаг (запись), сигнализирующий о наличии обновления.Проблема автора заключается в том, что цепочка разрывается именно для одного пользователя. Это может происходить на трех уровнях: клиентском, серверном (кластер 1С) и уровне базы данных (SQL). Рассмотрим каждый из них и методы исправления.
Самая частая причина, по которой пользователь «видит» старую конфигурацию, даже если перезашел в программу на своем компьютере, — это зависший сеанс на сервере 1С. Давайте разберем, как это работает.
В архитектуре «клиент-сервер» за выполнение кода отвечает рабочий процесс rphost. Иногда при некорректном завершении работы (сбой сети, «убитый» процесс 1cv8c.exe) сеанс в кластере серверов остается в статусе «Активен» или «Спящий». Этот сеанс удерживает контекст старой конфигурации.
Когда пользователь запускает 1С снова, платформа может попытаться использовать механизм Session Reuse (повторное использование сеанса) или просто не может корректно обновить контекст из-за блокировок старого сеанса.
Что нам нужно сделать:
После этого попросим пользователя зайти в базу заново. В 90% случаев это решает проблему, так как создается абсолютно новый сеанс, который принудительно считывает актуальную версию метаданных из ConfigSave.
В теме справедливо заметили: «Кэш есть клиентский, а есть серверный». Если чистка папок Local и Roaming на компьютере пользователя не помогла, проблема может быть в кэше на стороне сервера приложений.
Сервер 1С кэширует скомпилированные модули и структуру метаданных для ускорения работы. При интенсивном динамическом обновлении механизм инвалидации (сброса) этого кэша может дать сбой. В результате сервер продолжает «отдавать» конкретному сеансу старый байт-код.
Как правильно очистить серверный кэш:
Самый надежный способ, предложенный в обсуждении, — перезапуск службы агента сервера. Давайте сделаем это пошагово:
rphost, для гарантии иногда требуется очистка временных файлов кластера (папка srvinfo), но делать это нужно с осторожностью, чтобы не удалить журнал регистрации или настройки кластера. Обычно достаточно простого перезапуска службы.Если возможности перезагрузить сервер нет, можно попробовать перезапустить конкретный рабочий процесс rphost, который обслуживает проблемный сеанс, но это требует более глубоких навыков администрирования.
Это наиболее коварная ситуация. Как мы упоминали, динамическое обновление работает через таблицу ConfigSave. Основная конфигурация хранится в Config.
Бывают случаи (сбои сети, ошибки SQL), когда для конкретного пользователя запись в системной таблице Params «залипает». Платформа считает, что пользователь уже обновился, или, наоборот, не может считать флаг обновления. В итоге пользователь работает с гибридом: часть метаданных берется из основной версии, часть пытается подтянуться из динамической.
Решение проблемы:
Единственный стопроцентный способ «вылечить» базу в таком состоянии — это заставить платформу объединить Config и ConfigSave. Для этого нам необходимо:
В этот момент содержимое ConfigSave корректно переносится в Config, таблицы очищаются от временных данных динамического обновления, и все пользователи начинают работать с единой версией метаданных.
Иногда проблема не в том, что конфигурация старая, а в том, что сохраненные настройки пользователя конфликтуют с новой конфигурацией. Например, мы удалили колонку из табличной части документа, а в настройках формы пользователя эта колонка сохранена как видимая. При открытии формы платформа может вести себя непредсказуемо, вплоть до отображения старой версии формы из кэша настроек.
Если вход под другим пользователем работает нормально, попробуем очистить настройки проблемного пользователя:
Это заставит платформу сформировать интерфейс заново на основе актуальных метаданных.
Автор упомянул: «В папках локал и роаминг?». Это важный момент. Если вы работаете в терминальной среде (RDP) с перемещаемыми профилями (Roaming Profiles), простого удаления папки может быть недостаточно. Windows может восстанавливать старую версию папки AppData\Roaming\1C\1cv8\... из центрального хранилища профиля при входе пользователя в систему.
Мы должны убедиться, что кэш удален окончательно. Пути, которые нужно чистить:
%USERPROFILE%\AppData\Local\1C\1cv8\%USERPROFILE%\AppData\Roaming\1C\1cv8\Внутри этих папок нас интересуют каталоги с длинными именами (UUID), соответствующие нашей базе. Если вы не уверены, какой именно каталог относится к базе, можно удалить все содержимое (это сбросит список баз в стартере, но гарантированно очистит кэш).
Подводя итог обсуждения коллективного разума, выделим алгоритм действий при возникновении «странностей» с динамическим обновлением:
Как верно отметили в теме: «не делать динамическое обновление» — это лучший совет для стабильности системы. Если же без него не обойтись, будьте готовы к регулярному обслуживанию (перезагрузкам) сервера для профилактики подобных «фантомных» ошибок.