При работе в команде через хранилище конфигурации разработчики часто сталкиваются с парадоксальной ситуацией: объект успешно получен из хранилища, мы открываем модуль и видим обновленный код (например, значение реквизита изменилось с 2 на 3), однако при запуске системы 1С:Предприятие продолжает вести себя так, будто изменения не вносились. Более того, кнопка "Обновить конфигурацию базы данных" (синий цилиндр или клавиша F7) остается неактивной. Проанализируем, почему так происходит, и как правильно синхронизировать состояние системы.
Для начала разберем фундаментальный принцип работы платформы «1С:Предприятие 8». В каждой информационной базе фактически сосуществуют две конфигурации:
Обычно после получения объектов из хранилища платформа видит различия и активирует иконку «синего цилиндра». Если этого не произошло, значит, произошел технический сбой в механизме сравнения версий. Платформа «считает», что обе конфигурации идентичны, хотя текст модуля в основной конфигурации уже обновился.
Если вы столкнулись с тем, что код изменился, а кнопка F7 неактивна, первым делом попробуем заставить конфигуратор «увидеть» изменения. Разберем по шагам, как это сделать:
Ctrl + S).После этой простой манипуляции флаг модифицированности конфигурации должен обновиться, и кнопка обновления конфигурации БД станет активной. Нажмем ее и дождемся принятия изменений.
Бывают ситуации, когда даже после успешного обновления конфигурации БД (нажатия F7) код продолжает работать некорректно. В этом случае виноват кэш. Платформа 1С активно использует кэширование скомпилированных модулей для ускорения работы. Выделим основные виды кэша, которые могут мешать:
Рассмотрим несколько способов очистки кэша, от самых простых до радикальных. Проанализируем ситуацию и выберем подходящий:
Способ 1. Параметр запуска /ClearCache
Этот способ самый безопасный и быстрый. Его следует использовать в настройках запуска конкретной информационной базы в списке стартера 1С. В поле «Дополнительные параметры запуска» пропишем команду:
/ClearCache
Этот ключ заставляет систему очистить кэш клиентских запросов и метаданных именно для текущего сеанса. Это часто помогает, если проблема локальна.
Способ 2. Удаление базы из списка
Если /ClearCache не помог, воспользуемся проверенным методом «перерегистрации» базы. Посмотрим, как это работает:
При удалении базы из списка 1С не удаляет саму БД, но стирает все временные папки, связанные с её внутренним идентификатором (GUID). При новом добавлении будет создан чистый кэш.
Способ 3. Ручная очистка папок
Для полной уверенности можно вручную очистить содержимое папок, где 1С хранит временные данные. Обычно они располагаются по следующим путям (вместо "User" будет ваше имя пользователя):
%AppData%\Local\1C\1Cv8\%AppData%\Roaming\1C\1Cv8\Внутри этих папок находятся подпапки с длинными именами из букв и цифр (GUID-ы баз). Можно смело удалять все содержимое этих папок, когда 1С закрыта. При следующем запуске платформа пересоберет необходимые данные.
Рассмотрим ситуацию, которую часто называют «демоническим обновлением». Это когда изменения применяются без выгона пользователей. В этот момент в базе создается «хвост» из старых версий метаданных. Если вы получили изменения из хранилища в базу, которая до этого многократно обновлялась динамически, может возникнуть серьезный рассинхрон.
Выясним причину, почему это опасно: система может хранить несколько версий одного и того же модуля для разных подключенных пользователей. Чтобы гарантированно исправить это, рекомендуется:
F7).Чтобы окончательно убедиться, что проблема именно в кэше или обновлении, а не в логике кода, воспользуемся отладчиком. Проанализируем ситуацию по шагам:
F5).Shift + F9 (Вычислить выражение).Если в окне конфигуратора вы видите Реквизит = 3, а отладчик в «Табло» показывает, что значение равно 2, значит, исполняется старый скомпилированный код. Это 100% признак того, что нужно чистить серверный кэш или перезапускать службу 1C:Enterprise 8 Server (в случае клиент-серверного варианта).
Работа с хранилищем требует дисциплины. Чтобы избежать подобных «фантомных» изменений, старайтесь: