Работа с хранилищем конфигурации в 1С:Предприятие 8.3 — это стандарт де-факто для коллективной разработки. Однако многие разработчики сталкиваются с пугающим эффектом «фантомных изменений», когда после успешного помещения объекта в хранилище и обновления базы данных в конфигурации внезапно всплывает старый код. При этом сравнение конфигураций может не показывать различий, что создает иллюзию корректности системы, хотя логика работы программы нарушена.
В данной статье мы подробно разберем, почему возникают такие сбои, как правильно очищать кэш, и какие настройки платформы помогут избежать потери данных при работе с хранилищем.
Первое, на что стоит обратить внимание при возникновении «флешбеков» старого кода — это использование механизма динамического обновления (так называемое «обновление демоном»). Рассмотрим подробнее, что происходит внутри системы в этот момент.
Когда мы выполняем динамическое обновление, платформа не блокирует работу пользователей и вносит изменения в таблицу Config, создавая новые версии скомпилированных модулей. Однако из-за особенностей кэширования на стороне сервера и клиента, сеансы пользователей могут продолжать использовать старые версии объектов. В некоторых случаях возникает критический рассинхрон между таблицами Config и ConfigSave. Это приводит к тому, что конфигуратор «видит» одну версию кода, а исполняющая среда (рантайм) — другую.
Рекомендация: Если вы столкнулись с необъяснимым поведением кода, первым делом выполните «честное» обновление конфигурации базы данных с монопольным доступом. В самых тяжелых случаях, когда база «легла» после динамического обновления, может потребоваться очистка таблицы ConfigSave на уровне SQL, но делать это следует только при наличии актуальной резервной копии.
Если динамическое обновление не использовалось, а старый код все равно возвращается, виной всему может быть локальный кэш разработчика. Хранилище 1С имеет собственный механизм кэширования для ускорения операций сравнения и захвата объектов.
Разберем по шагам, как выполнить глубокую очистку:
Конфигурация — Хранилище конфигурации — Администрирование. В открывшемся окне выберем пункт «Очистить кэш». Это действие удалит временные данные, которые платформа хранит для связи локальной копии с базой хранилища.%AppData%\1C\1cv8 и %LocalAppData%\1C\1cv8. Проанализируем структуру: удаление папок с длинными буквенно-цифровыми именами (GUID базы) принудительно заставит платформу пересчитать контрольные суммы модулей при следующем запуске.v8info, которая находится внутри каталога кэша конкретной информационной базы. Если удаление обычного кэша не помогло, удаление содержимого v8info является обязательным шагом.Проанализируем стабильность различных версий платформы. Опытным путем установлено, что ветки 8.3.13 и 8.3.14 имели специфические баги, связанные с работой хранилища и обычных форм:
1cv8.exe при попытке выполнить сравнение/объединение, если окно хранилища оставалось открытым.Вывод: Если ваша работа связана с интенсивным использованием хранилища, рассмотрите возможность перехода на более стабильные релизы (например, ветки 8.3.18 и выше), где механизмы проверки целостности данных были существенно доработаны.
Иногда проблема уходит глубже — на уровень сервера приложений 1С. Даже если база данных обновлена, сервер может хранить скомпилированный «старый» код в папке сеансовых данных. Рассмотрим процесс исправления этой ситуации:
Выясним, где находятся данные сервера. Обычно это папка srvinfo. Внутри рабочих процессов могут скапливаться временные файлы в каталоге snacc. При некорректном завершении работы рабочего процесса rphost, эти файлы могут блокироваться или не обновляться. Полная остановка службы 1C:Enterprise 8.3 Server Agent и последующая очистка содержимого папок с кэшем сервера (за исключением файлов лицензий и журналов регистрации) гарантированно решает проблему исполнения «призрачного» кода.
Рассмотрим радикальный, но эффективный метод, если хранилище продолжает отдавать старые версии объектов, несмотря на все чистки кэша. Этот метод позволяет полностью перестроить индексную таблицу конфигурации:
.cf через меню Конфигурация — Сохранить конфигурацию в файл.Конфигурация — Загрузить конфигурацию из файла..cf файла, платформа увидит все различия как новые изменения. Поместим эти объекты в хранилище скопом.Этот процесс принудительно перезаписывает тела модулей в файле хранилища 1cv8ddb.1cd, устраняя возможные логические повреждения структуры данных.
Чтобы минимизировать риск возникновения подобных «глюков» в будущем, придерживайтесь следующих правил:
Администрирование — Сократить историю, оставляя, например, последние 100–200 версий.Соблюдение этих простых инструкций и понимание механизмов кэширования 1С позволит вам сделать процесс коллективной разработки стабильным и предсказуемым.