Как правильно удалить кэш пользователя 1С с помощью батника или PowerShell?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Каждый администратор или разработчик 1С рано или поздно сталкивается с загадочными ошибками: формы отображаются некорректно, возникают сообщения о «неверном формате хранилища данных» или программа просто закрывается без объяснения причин. В 90% случаев виновником является локальный кэш конфигурации. В этой статье мы подробно разберем, как автоматизировать процесс его очистки, почему стандартные команды могут не срабатывать и какие инструменты лучше всего использовать для решения этой задачи.

Почему стандартный параметр ClearCache не всегда помогает?

Рассмотрим сначала встроенные механизмы. Многие пытаются использовать дополнительный параметр запуска /ClearCache. Однако важно понимать его ограничения. Проанализируем ситуацию: данный флаг предназначен в основном для тонкого клиента и очищает только кэш запросов между клиентом и сервером. Он не удаляет локальный кэш метаданных (форм, модулей, структуры конфигурации), который чаще всего и является источником проблем. Именно поэтому мы приходим к необходимости ручного или программного удаления папок кэша.

Разбор типичной ошибки при использовании BAT-файлов

Посмотрим на классическую попытку удаления через батник, которая часто заканчивается неудачей. Автор темы пытался использовать команду:

rmdir "%AppData%\1C\1Cv82\????????-????-????-????-????????????" /S /Q

Выясним причину, почему это не работает. Команда rmdir (или rd) в операционной системе Windows принципиально не поддерживает использование подстановочных знаков (масок * или ?) для имен каталогов. Она умеет удалять только конкретную папку по её полному имени. Чтобы обойти это ограничение, нам потребуется использовать цикл.

Способ №1: Правильный BAT-файл с использованием циклов

Для того чтобы скрипт смог «увидеть» папки с GUID-именами и удалить их, мы воспользуемся циклом FOR. Разберем по шагам, как должен выглядеть надежный батник. Прежде всего, добавим команду принудительного завершения процессов 1С, так как если файлы заняты программой, удалить их не получится.


@echo off
rem Завершаем работу всех процессов 1С
taskkill /F /IM 1cv8*

rem Удаляем папки кэша из LocalAppData (основной кэш метаданных)
FOR /D %%i in ("%LOCALAPPDATA%\1C\1Cv8\????????-????-????-????-????????????") do rd /s /q "%%i"
FOR /D %%i in ("%LOCALAPPDATA%\1C\1Cv82\????????-????-????-????-????????????") do rd /s /q "%%i"

rem Удаляем папки кэша из AppData (настройки пользователя, если это необходимо)
FOR /D %%i in ("%AppData%\1C\1Cv8\????????-????-????-????-????????????") do rd /s /q "%%i"
FOR /D %%i in ("%AppData%\1C\1Cv82\????????-????-????-????-????????????") do rd /s /q "%%i"

pause

В этом примере конструкция FOR /D ищет только директории, соответствующие маске GUID (32 символа и дефисы). Это гарантирует, что скрипт не удалит ничего лишнего, например, файл ibases.v8i, в котором хранится ваш список баз.

Способ №2: Современный подход через PowerShell

PowerShell предлагает гораздо более гибкие и мощные инструменты для работы с файловой системой. Рассмотрим скрипт, который проверяет имя папки на соответствие формату GUID и удаляет её. Этот метод считается наиболее «профессиональным» среди системных администраторов.


# Очистка кэша в локальных данных
Get-ChildItem "$env:LOCALAPPDATA\1C\1Cv8\*" | Where-Object {$_.Name -as [guid]} | Remove-Item -Force -Recurse

# Очистка кэша в роуминге (настройки пользователя)
Get-ChildItem "$env:APPDATA\1C\1Cv8\*" | Where-Object {$_.Name -as [guid]} | Remove-Item -Force -Recurse

Проанализируем, как это работает: Get-ChildItem получает список всех объектов в папке 1С, а оператор -as [guid] пытается привести имя каждой папки к типу глобального идентификатора. Если имя папки не является GUID-ом (например, папка Conf), проверка вернет false и папка останется нетронутой.

Очистка кэша на удаленных компьютерах

Если вы администрируете сеть, вам может потребоваться почистить кэш удаленно. В таком случае PowerShell становится незаменимым. Посмотрим на пример команды для очистки кэша всех пользователей на конкретном компьютере по его IP или имени:


# Пример для удаления кэша всех пользователей на удаленном ПК
Get-ChildItem "\\192.168.1.100\c$\Users\*\AppData\Local\1C\1Cv8\*" | Where-Object {$_.Name -as [guid]} | Remove-Item -Force -Recurse

Важный момент: при использовании путей типа \Users\* скрипт переберет профили всех пользователей, заходивших на этот компьютер. Это очень удобно для быстрой «реанимации» рабочего места без необходимости заходить под каждой учетной записью.

Разница между Local и Roaming: что именно удалять?

Давайте разберем структуру хранения данных 1С, чтобы понимать последствия наших действий:

  1. Local (%LocalAppData%): Здесь хранится «тяжелый» кэш: скомпилированные модули, конфигурация, образы форм. Удаление этой папки безопасно — 1С просто перекачает эти данные с сервера при следующем запуске. Именно здесь обычно кроются причины ошибок «Неверный формат хранилища».
  2. Roaming (%AppData%): В этой папке хранятся персональные настройки: история выбора в полях, положение окон, настройки отчетов, выбранные принтеры. Если вы удалите GUID-папки здесь, пользователь увидит интерфейс «по умолчанию», все его персональные настройки панелей сбросятся.

Рекомендация: Начинайте очистку только с папки Local. В 90% случаев этого достаточно. Трогайте Roaming только в том случае, если очистка локальных данных не помогла.

Как почистить кэш только для одной конкретной базы?

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

  1. Откроем файл %AppData%\1C\1CEStart\ibases.v8i любым текстовым редактором.
  2. Найдем блок с нужной нам базой (по названию).
  3. Скопируем значение параметра ID.
  4. Удалим в папках Local и Roaming только ту директорию, имя которой совпадает с этим ID.

Этот метод позволяет точечно решать проблему, не затрагивая работу пользователя с другими базами.

Дополнительные советы

Проанализируем еще одну ситуацию: если скрипты не помогают, обратите внимание на системную папку %TEMP%. Платформа 1С активно использует временные файлы Windows при печати и обмене данными. Очистка этой папки командой del /s /q %temp%\* часто помогает при странных ошибках печати.

Также помните, что если очистка локального кэша не принесла результатов, проблема может быть в серверном кэше. Для его очистки требуется остановка службы 1C:Enterprise Server и удаление содержимого папки snccntx в каталоге srvinfo на сервере. Однако это уже задача для администратора сервера приложений.

Используя предложенные выше скрипты, вы сможете существенно сократить время на обслуживание рабочих мест пользователей и быстро устранять типовые ошибки платформы 1С.

← На главную