Очистка кэша 1С через батник, код и перезапуск сервера

· 9 мин

Содержание

Чтобы очистить кэш 1С без мышки и Проводника, закройте все клиенты и удалите папки кэша скриптом: rmdir /s /q "%LOCALAPPDATA%\1C\1cv8" и rmdir /s /q "%APPDATA%\1C\1cv8". На следующем запуске платформа заново скачает конфигурацию с сервера и пересоберёт временные файлы. Это и есть программная очистка: один батник вместо ручного обхода папок у каждого пользователя.

Когда клиентов десятки, ручная чистка не вариант. Ниже — рабочие способы почистить кэш кодом, из командной строки, на стороне сервера 1С и централизованно через групповые политики. Для каждого скажу, что именно удаляется и чем это грозит сеансам.

Где лежит кэш 1С и что он вообще хранит

Кэш 1С — это локальная копия конфигурации и служебные временные файлы, которые платформа держит на диске, чтобы не тянуть всё заново с сервера при каждом входе. Отсюда и глюки: конфигурацию на сервере обновили, а клиент показывает старые формы и отчёты, потому что взял их из своего кэша.

Со временем кэш разрастается: каждое обновление конфигурации добавляет новую порцию скомпилированных форм и модулей, а старые не всегда вычищаются. У активно работающей базы папка кэша легко набирает сотни мегабайт. На дисках SSD небольшого объёма это заметно.

Хранится кэш по двум адресам каждого пользователя Windows:

  • 📁 %LOCALAPPDATA%\1C\1cv8\ — основной кэш: скомпилированные формы, модули, временные файлы.
  • 📁 %APPDATA%\1C\1cv8\ — часть служебных данных подключения.

Внутри каждая база лежит в отдельной подпапке с длинным именем из шестнадцатеричных символов (хэш строки подключения). Чтобы сбросить кэш одной базы, удаляют её подпапку. Чтобы сбросить всё — удаляют папку 1cv8 целиком.

Список баз в окне запуска при этом не пропадёт. Он хранится отдельно — в %APPDATA%\1C\1CEStart\ibases.v8i, и папку 1cv8 не трогает.

Какой кэш нужно чистить?

Батник для очистки клиентского кэша

Самый ходовой способ программной очистки — командный файл .bat. Он закрывает клиентов и удаляет кэш одним двойным кликом:

@echo off
rem Закрыть все клиенты 1С (несохранённые данные пропадут!)
taskkill /f /im 1cv8.exe 2>nul
taskkill /f /im 1cv8c.exe 2>nul

rem Удалить кэш текущего пользователя
rmdir /s /q "%LOCALAPPDATA%\1C\1cv8"
rmdir /s /q "%APPDATA%\1C\1cv8"

echo Кэш 1С очищен.
pause

Что здесь происходит по шагам:

  1. taskkill принудительно завершает процессы толстого (1cv8.exe) и тонкого (1cv8c.exe) клиента. Без этого файлы кэша заблокированы и не удалятся.
  2. rmdir /s /q рекурсивно и без лишних вопросов сносит обе папки кэша.
  3. При следующем запуске 1С создаст их заново и заново закэширует конфигурацию.

taskkill /f обрывает работу без сохранения. Перед запуском батника предупредите пользователя, чтобы он закрыл документы — всё несохранённое в открытых формах будет потеряно.

Если нужно почистить кэш только одной базы, а не всех, удаляйте не всю папку 1cv8, а конкретную подпапку с хэшем. Узнать её можно, отсортировав подпапки по дате изменения: активная база «подсвечивается» свежим временем после запуска.

Тем, кто предпочитает PowerShell, тот же результат даёт короткий скрипт .ps1:

Get-Process 1cv8, 1cv8c -ErrorAction SilentlyContinue | Stop-Process -Force
Remove-Item "$env:LOCALAPPDATA\1C\1cv8" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item "$env:APPDATA\1C\1cv8" -Recurse -Force -ErrorAction SilentlyContinue

Логика та же: завершить процессы клиента, затем снести обе папки кэша. Ключ -ErrorAction SilentlyContinue нужен, чтобы скрипт не падал, когда папки уже нет или процесс не запущен.

Для платформы 8.2 кэш лежал в папках 1cv82 вместо 1cv8. Если на машине остались и старая, и новая версии, в батник добавляют строки удаления обеих папок — иначе хвост от 8.2 так и будет занимать место.

Очистка из командной строки и планировщика

Тот же батник не обязательно запускать руками. Из командной строки его можно вызвать разово, а через Планировщик заданий Windows — по расписанию или по событию.

Разовый вызов из cmd или PowerShell — просто путь к файлу:

C:\scripts\clear-1c-cache.bat

Чтобы почистить кэш и сразу запустить базу , допишите в конец батника строку запуска клиента через 1cv8.exe с нужными параметрами подключения (ключ /S для серверной базы или /F для файловой). Конкретные ключи запуска смотрите в документации по платформе — набор зависит от версии и способа подключения.

Отдельного документированного ключа platform-клиента «почистить кэш и выйти» в 1С 8.3 нет: надёжный программный путь — именно удаление папок скриптом, а не волшебный параметр запуска. Если встретите в чужих инструкциях недокументированные флаги 1cv8, проверяйте их на тестовой машине, а не на рабочей.

Через Планировщик заданий (Пуск → Планировщик заданий → Создать задачу) батник вешают, например, на событие входа пользователя или на ночное время. Так кэш обновляется сам, без обращений в поддержку.

Сброс кэша средствами встроенного языка 1С

Полностью снести платформенный кэш из работающего сеанса нельзя: файлы заняты самим процессом 1С. Но часть кэшей встроенный язык сбрасывает на лету.

Главный инструмент — глобальная функция повторного использования значений:

ОбновитьПовторноИспользуемыеЗначения();

Она сбрасывает кэш «повторно используемых значений» — результатов функций общих модулей с повторным использованием возврата (на время сеанса или вызова). Именно из-за этого кэша после смены настроек в справочнике программа иногда продолжает «видеть» старое значение. Вызов функции заставляет её пересчитаться.

Временные файлы, которые ваш код сам создавал, удаляются штатно:

УдалитьФайлы(КаталогВременныхФайлов(), "*.tmp");

Для глубокой очистки (снос папок кэша платформы) из 1С запускают внешний батник через ЗапуститьПриложение — но сработает он корректно только после закрытия самого клиента. Поэтому в быту программную чистку кэша делают скриптом ОС, а не кодом 1С.

В клиент-серверной базе у ОбновитьПовторноИспользуемыеЗначения() есть серверная сторона: если повторно используемое значение рассчитывается с повторным использованием «на время сеанса», вызов сбрасывает его и на сервере для текущего сеанса. Это удобно, когда администратор поменял настройку в регистре сведений, а код продолжает отдавать прежний результат из кэша.

Что встроенный язык НЕ делает: он не перекомпилирует формы и модули из свежей конфигурации вместо закэшированных. Для этого клиент нужно перезапустить с чистым кэшем. Поэтому код годится для сброса логических кэшей данных, а не для лечения «старого интерфейса после обновления» — там работает только очистка папок.

Очистка кэша на сервере 1С:Предприятие

В клиент-серверном варианте, кроме клиентского, есть серверный кэш. Он лежит в каталоге srvinfo (путь задаётся параметром -d службы агента, по умолчанию внутри папки установки сервера) и хранит данные сеансов, временные файлы и серверную копию конфигурации.

Чистый и безопасный способ сбросить серверный кэш — перезапуск службы агента сервера:

  1. Остановите службу 1C:Enterprise 8.3 Server Agent (в оснастке services.msc).
  2. Запустите её снова.

При старте менеджер и рабочие процессы (rmngr, rphost) пересобирают свои кэши. Отдельно лазить в файлы srvinfo в большинстве случаев не нужно.

Более щадящий вариант — не трогать всю службу, а перезапустить только рабочий процесс кластера. В консоли администрирования серверов откройте ветку кластера, раздел с рабочими процессами и перезапустите нужный rphost. Серверный кэш этого процесса пересоберётся, а рабочие процессы других баз останутся живы. Сеансы, привязанные к перезапущенному процессу, всё равно прервутся, поэтому правило про нерабочее время действует и здесь.

Серверная копия конфигурации в кэше обновляется сама, когда вы применяете обновление к базе в Конфигураторе. Если после обновления на сервере всё равно живёт старое поведение, обычно помогает не чистка файлов, а именно перезапуск рабочих процессов или службы — он заставляет сервер перечитать конфигурацию заново.

Перезапуск службы рвёт все активные сеансы пользователей и останавливает регламентные задания по всем базам кластера. Делайте это строго в нерабочее время и предупредив пользователей.

Если дошло до ручного удаления файлов в srvinfo (например, после сбоя), работайте только при остановленной службе и сделав копию каталога. Удаляйте служебные файлы данных сеансов внутри папки конкретной информационной базы, но не трогайте папки reg_<порт> и каталоги кластера целиком — потеряете регистрацию кластера и список баз. Пересоздавать кластер «для чистоты» не нужно.

Отдельного пункта меню «очистить кэш» в консоли администрирования серверов нет: управление идёт через остановку и запуск службы и рабочих процессов.

Массовая очистка кэша через групповые политики

Когда клиентов десятки и сотни, обходить машины бессмысленно. В доменной сети тот же батник раздают через групповую политику как сценарий входа.

Порядок настройки в редакторе управления групповыми политиками (gpmc.msc):

  1. Создайте или откройте объект GPO, привязанный к нужному подразделению с пользователями.
  2. Перейдите в Конфигурация пользователя → Политики → Конфигурация Windows → Сценарии (вход/выход из системы) → Вход в систему.
  3. Добавьте батник очистки кэша и положите его в сетевую папку, доступную всем на чтение.
  4. Обновите политику на клиентах командой gpupdate /force или дождитесь планового применения.

Теперь кэш будет чиститься при каждом входе пользователя в систему — проблема «старых форм после обновления» снимается централизованно.

Чистить кэш при КАЖДОМ входе не всегда нужно: первый запуск 1С после этого медленнее, потому что конфигурация кэшируется заново. Если обновления редки, разумнее держать батник в сетевой папке и запускать его точечно, когда реально обновили конфигурацию.

Через групповые политики можно раздать не только сценарий входа, но и запланированное задание (Конфигурация компьютера → Настройка → Параметры панели управления → Назначенные задания) — так очистка отвяжется от момента входа.

Частые ошибки при очистке кэша 1С

Чаще всего кэш «не чистится» или чистка выходит боком по одним и тем же причинам.

  • 🔴 Удаляют кэш при запущенной 1С. Файлы заблокированы процессом — папка удаляется частично, а база потом стартует с битым кэшем и ошибками. Сначала закройте все клиенты (taskkill в батнике делает это сам).
  • 🔴 Путают кэш с базой. Очистка кэша НИКОГДА не удаляет учётные данные. Документы, справочники, проводки лежат в базе (1Cv8.1CD или СУБД), а не в кэше. Бояться за данные не нужно.
  • 🔴 Перезапускают службу сервера в рабочее время. Обрываются сеансы всех баз кластера, слетают регламентные задания. Только в окно обслуживания.
  • 🔴 Сносят лишние папки на сервере. Удаление каталогов кластера в srvinfo ломает регистрацию и список баз. Трогают только служебные файлы внутри папки конкретной базы и только при остановленной службе.
  • 🔴 Ждут, что код 1С снесёт платформенный кэш. ОбновитьПовторноИспользуемыеЗначения() сбрасывает только кэш повторно используемых значений, а не скомпилированные формы. Для полного сброса нужен перезапуск клиента с чистыми папками.

Отдельно про настройки: при удалении кэша могут сброситься локальные настройки открытия форм и позиции окон на этой машине. Сами пользовательские настройки, которые хранятся в базе (отборы списков, варианты отчётов), остаются на месте.

Частые вопросы

Пропадут ли данные или список баз при очистке кэша?
Нет. Учётные данные лежат в базе, список баз — в отдельном файле ibases.v8i в папке 1CEStart. Папки кэша 1cv8 их не содержат, удаление безопасно для данных.
Как часто нужно чистить кэш?
По необходимости, а не по графику. Поводы: после обновления конфигурации видны старые формы и отчёты, клиент тормозит без причины, сыплются непонятные ошибки формата потока или компиляции. На здоровой базе чистить кэш незачем.
Нужно ли чистить кэш на сервере, если база файловая?
Нет, серверного кэша у файловой базы нет. Чистят только клиентский кэш на машинах пользователей плюс временные файлы рядом с самим файлом 1Cv8.1CD.
Почему после обновления конфигурации «слетают» формы — это кэш?
Как правило, да: клиент показывает старую форму из кэша, пока тот не обновился. Помогает очистка клиентского кэша. Если не помогло — проверьте, что обновление реально применено к базе в Конфигураторе.
Можно ли очистить кэш, не закрывая 1С?
Полностью — нет, рабочие файлы заблокированы процессом. Из сеанса доступен только частичный сброс через ОбновитьПовторноИспользуемыеЗначения(). Для полной очистки клиент придётся перезапустить.