← На главную
В процессе активной разработки и сопровождения конфигураций «1С:Предприятие 8.3» разработчики нередко сталкиваются с аномальным поведением среды разработки: в общем модуле или модуле объекта исчезают недавно написанные процедуры, текст модуля откатывается к предыдущей редакции, но при этом функционал продолжает выполняться в пользовательском режиме. При попытке трассировки отладчик перескакивает строки, точки останова не срабатывают, а пошаговое выполнение попадает в невидимый «фантомный» код. Разберем детально, почему возникает эта проблема и как вернуть платформу в стабильное рабочее состояние.
Причины рассинхронизации кода и исполняемого байт-кода
Проанализируем механику работы платформы при возникновении подобного поведения:
- Последствия динамического обновления базы данных: При многократном применении изменений «на лету» без монопольного захвата базы таблицы метаданных
Config и ConfigSave в СУБД начинают хранить несколько версий одних и тех же объектов. Если внутренняя цепочка версий нарушается, Конфигуратор считывает устаревшую текстовую структуру, тогда как рабочий процесс сервера rphost выполняет ранее скомпилированный байт-код из оперативной памяти.
- Повреждение серверного и клиентского кэша: Локальный кэш пользователя сохраняет старые схемы форм и модулей. Одновременно на стороне сервера в каталоге кластера накапливаются кэшированные контексты соединений, что приводит к расхождению данных между клиентом и сервером.
- Несовпадение хэш-сумм при отладке: Модуль отладки платформы сопоставляет исполняемые инструкции с текстом в Конфигураторе по контрольным суммам. Если исходный код в окне разработки не совпадает с кодом, исполняемым процессом
rphost, точка останова игнорируется, а пошаговая трассировка по клавише F10 выполняется вслепую.
Способ 1. Полная очистка локального клиентского кэша
Разберем по шагам, как корректно очистить кэш на рабочем месте разработчика:
- Закроем все запущенные сеансы «1С:Предприятия» и Конфигуратора.
- Перейдем в каталоги временных файлов текущего пользователя операционной системы:
%LocalAppData%\1C\1cv8
%AppData%\1C\1cv8
- Удалим все вложенные папки с длинными буквенно-цифровыми идентификаторами (GUID), например:
1a2b3c4d-5e6f.... Базовый файл со списком информационных баз ibases.v8i удалять не нужно.
- Для автоматической очистки кэша управляемых форм при каждом старте тонкого клиента добавим в строку дополнительных параметров запуска параметр:
/ClearCache
Важно: Данный параметр очищает только кэш управляемых форм и клиентских модулей, но не затрагивает серверные временные файлы и кэш метаданных.
Способ 2. Очистка кэша на стороне сервера «1С:Предприятия»
Если локальная очистка не помогла, выполним сброс серверных контекстов:
- Остановим службу сервера «1С:Предприятия» через консоль служб (
services.msc).
- Откроем каталог данных кластера серверов (по умолчанию:
C:\Program Files\1cv8\srvinfo\ или каталог соответствующей версии платформы).
- Найдем в папке кластера временные файлы скомпилированных контекстов вида
snccntx* и удалим их. Критически важно: не удаляйте файл 1CV8Reg.lst, так как в нем хранится описание кластера и зарегистрированных баз данных.
- Запустим службу сервера «1С:Предприятия».
Способ 3. Принудительная перезапись метаданных в СУБД
Чтобы заставить платформу полностью пересобрать внутреннюю структуру конфигурации и очистить фантомные записи в таблицах СУБД, выполним монопольное сохранение:
- Завершим все активные пользовательские сеансы и фоновые задания.
- Откроем базу в режиме «Конфигуратор».
- Внесем любое незначительное изменение в проблемный общий модуль (например, добавим символ пробела или комментарий).
- Выполним полное обновление конфигурации базы данных (нажатием клавиши F7). При монопольном доступе платформа перезапишет строки в таблице
Config с актуальными контрольными суммами.
Способ 4. Тестирование, исправление и выгрузка/загрузка базы данных
Если рассинхронизация сохраняется, рассмотрим комплексные меры по восстановлению целостности базы данных:
- Тестирование и исправление: В Конфигураторе перейдем в меню «Администрирование» → «Тестирование и исправление...». Установим флаги
Проверка логической целостности и Реструктуризация таблиц информационной базы, после чего запустим процесс.
- Пересоздание базы через .dt: Выполним выгрузку информационной базы в файл через меню «Администрирование» → «Выгрузить информационную базу...». Затем создадим новую пустую базу данных на сервере СУБД и загрузим полученный файл. Этот процесс полностью пересоздает структуру таблиц и гарантированно удаляет битые хвосты предыдущих динамических обновлений.
- Сброс кэша хранилища: Если разработка ведется с использованием группового хранилища, отключимся от хранилища конфигурации и подключимся повторно, выбрав создание нового локального файла кэша хранилища (
.1cv8ddb).
Рекомендации по безопасной разработке и обновлениям
Чтобы избежать подобных сбоев в дальнейшем, рекомендуется соблюдать правила эксплуатации платформы:
- Минимизировать динамические обновления: Динамическое обновление допустимо только для критических горячих правок. После каждого такого обновления обязательно планируйте регламентный перезапуск рабочих процессов сервера или ночное монопольное обновление.
- Использовать расширения конфигурации: Для оперативного внесения изменений в период внедрения выносите доработки в расширения (Configuration Extensions). Обновление расширений не повреждает структуру базовых таблиц конфигурации.
- Настроить автоматический перезапуск рабочих процессов: В свойствах кластера серверов задайте интервал перезапуска рабочих процессов (например, каждые 10800 секунд / 3 часа) или включите перезапуск процессов при превышении допустимого объема памяти, что предотвратит накопление битых кэшированных контекстов.