Временные данные 1С:Предприятия — механизм платформы, папки на диске и чистка

· 9 мин

Содержание

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

Ниже оба смысла разведены. Для программиста — как работает механизм. Для администратора — где лежат временные файлы в Windows и Linux, что из них можно удалять, когда и как это автоматизировать.

Как устроены временные данные платформы

В 1С:Предприятии 8.3 есть три разных сущности, которые часто называют одним словом.

ЧтоГде живётКто очищает
Временное хранилище (механизм платформы)Память сеанса, на сервере — в рабочем процессе rphostПлатформа: при закрытии формы или окончании сеанса
Временные файлыКаталог %TEMP% пользователя или службыЧастично платформа, остальное — администратор
Кэш клиента и сервераПрофиль пользователя, каталог кластераПлатформа при перезапуске, вручную — администратор

Временное хранилище в коде

Разработчик работает с ним тремя методами глобального контекста:

  • 📥 ПоместитьВоВременноеХранилище(Данные, Адрес) — кладёт значение и возвращает строку-адрес;
  • 📤 ПолучитьИзВременногоХранилища(Адрес) — читает значение по адресу;
  • 🗑 УдалитьИзВременногоХранилища(Адрес) — освобождает место досрочно.

Второй параметр при помещении определяет срок жизни. Если передать уникальный идентификатор формы, данные удалятся при её закрытии. Если передать пустое значение или не передавать ничего, данные проживут до конца сеанса.

// На сервере: сформировали отчёт и отдали клиенту адрес
&НаСервере
Функция ПодготовитьФайл(ИдентификаторФормы)
    ДвоичныеДанные = Новый ДвоичныеДанные(ПутьКФайлу);
    Возврат ПоместитьВоВременноеХранилище(ДвоичныеДанные, ИдентификаторФормы);
КонецФункции

Если код в цикле кладёт в хранилище крупные файлы и привязывает их к сеансу, память рабочего процесса растёт до выхода пользователя. Вызывайте УдалитьИзВременногоХранилища сразу, как значение больше не нужно.

Проверить, что строка вообще является адресом хранилища, позволяет функция ЭтоАдресВременногоХранилища(). Если данные уже удалены, чтение по адресу вернёт Неопределено — это частая причина ошибок «значение не является объектом» в обработчиках, которые срабатывают после закрытия формы.

Где лежат временные файлы 1С в Windows

На рабочем месте платформа использует два места: системный каталог временных файлов и профиль пользователя.

Временные файлы. Платформа берёт системный %TEMP% текущего пользователя. Обычно это C:\Users\<имя>\AppData\Local\Temp. Файлы 1С узнаются по префиксу v8_ и расширению .tmp. Из кода путь возвращает функция КаталогВременныхФайлов().

Кэш клиента. Две папки с подкаталогами, у которых имена в виде GUID:

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

Список баз хранится отдельно, в %APPDATA%\1C\1CEStart\ibases.v8i. Этот файл при чистке кэша не трогайте, иначе пользователь откроет пустой список баз.

На сервере 1С. Рабочие процессы rphost пишут временные файлы в %TEMP% учётной записи, под которой запущена служба агента (часто это USR1CV8). Отдельно лежит каталог кластера. Для установки по умолчанию на 64-битной платформе это C:\Program Files\1cv8\srvinfo\reg_1541\. Внутри — файлы реестра кластера, журналы регистрации баз и папки snccntx… с сеансовыми данными и кэшем.

Каталог srvinfo хранит реестр кластера (1CV8Clst.lst). Удалять из него можно только папки snccntx… и только при остановленной службе. Всё остальное не трогайте.

Временные файлы и кэш 1С в Linux

В Linux логика та же, меняются пути.

ЧтоПуть по умолчанию
Временные файлы клиента/tmp или каталог из переменной TMPDIR
Кэш и настройки клиента~/.1cv8/1C/1cv8/
Список баз клиента~/.1C/1cestart/ibases.v8i
Каталог кластера сервера/home/usr1cv8/.1cv8/1C/1cv8/reg_1541/
Временные файлы рабочих процессов/tmp пользователя usr1cv8

Две особенности, которых нет в Windows:

  • 🐧 /tmp на многих дистрибутивах смонтирован как tmpfs, то есть лежит в оперативной памяти. Крупная выгрузка или формирование тяжёлого отчёта может съесть RAM сервера быстрее, чем диск.
  • 🔒 Права. Службу запускает usr1cv8. Если каталог временных файлов создал root или другой пользователь, рабочий процесс не сможет туда писать, и это выльется в ошибку доступа при открытии отчёта или загрузке файла.

Свободное место и владельца каталога проверяют так:

df -h /tmp /home/usr1cv8
ls -ld /tmp /home/usr1cv8/.1cv8
du -sh /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/snccntx*

Если TMPDIR нужно перенести на отдельный диск, задайте его в unit-файле службы srv1cv8 через строку Environment=TMPDIR=/data/1c-temp, затем выполните systemctl daemon-reload и перезапустите службу в нерабочее время.

Что регулирует консоль кластера

Отдельной настройки «размер временного хранилища» в консоли нет. Временные данные сеансов живут в памяти рабочих процессов, поэтому управляют ими через параметры рабочего сервера и процессов. Открывается это в консоли администрирования серверов: Кластеры → <кластер> → Рабочие серверы → <сервер> → Свойства.

Что смотреть в первую очередь:

  1. Допустимый объём памяти рабочих процессов. Когда суммарная память rphost превышает порог дольше заданного интервала, кластер перезапускает процесс. Сеансы перетекают на новый процесс, данные во временных хранилищах при этом теряются.
  2. Интервал превышения допустимого объёма памяти. Слишком короткий интервал даёт частые перезапуски на пике нагрузки.
  3. Безопасный расход памяти за один вызов. Если один серверный вызов съел больше, его выполнение прерывается. Это защищает от кода, который кладёт в хранилище целую выгрузку базы.

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

Те же параметры доступны из командной строки через утилиту rac. Список кластеров выводит rac cluster list, сеансы — rac session list --cluster=<id>. Полный набор ключей для изменения параметров смотрите в справке rac help: он зависит от версии платформы.

Как очистить временные файлы и кэш 1С

Порядок — от безопасного к радикальному. Начинайте с первого пункта и переходите дальше, только если проблема осталась.

Сначала короткая шпаргалка, что можно удалять и когда.

ОбъектУдалять можно?Условие
Файлы v8_*.tmp в %TEMP%ДаСтарше суток; занятые система не отдаст
GUID-папки в %APPDATA%\1C\1cv8 и %LOCALAPPDATA%\1C\1cv8Да1С у пользователя закрыта
Файл ibases.v8iНетЭто список баз пользователя
Папки snccntx… в каталоге кластераДаСлужба агента остановлена
Файлы .lst и GUID-каталоги баз в reg_1541НетРеестр кластера и журналы регистрации

Первое, что стоит сделать, — оценить объём. В PowerShell размер временных файлов 1С текущего пользователя показывает команда:

Get-ChildItem $env:TEMP -Filter 'v8_*' -Recurse -ErrorAction SilentlyContinue | Measure-Object Length -Sum

Если там сотни мегабайт, начните с чистки %TEMP%. Если файлов мало, а проблема в странном поведении форм, — со сброса кэша.

Способ 1. Ключ /ClearCache

Самый мягкий вариант для одного пользователя. Добавьте в строку запуска базы в окне выбора ИБ (кнопка Изменить → последний шаг, поле «Дополнительные параметры запуска») ключ /ClearCache. Либо запустите из командной строки:

"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /ClearCache

Платформа сбросит кэш этой базы при входе. После успешного запуска ключ уберите, иначе каждый вход будет медленным.

Способ 2. Ручная чистка профиля пользователя

  1. Закройте все окна 1С у пользователя.
  2. Откройте %APPDATA%\1C\1cv8\ и удалите подпапки с именами вида GUID.
  3. То же самое — в %LOCALAPPDATA%\1C\1cv8\.
  4. Откройте %TEMP% и удалите файлы v8_*.tmp. Занятые файлы система не даст удалить — пропустите их.

Пользовательские настройки форм и отчётов в клиент-серверной базе хранятся в самой базе, поэтому их чистка профиля не сотрёт.

Способ 3. Сеансовые данные на сервере

Остановка службы агента обрывает все сеансы всех баз кластера. Делайте это только в согласованное окно, предупредив пользователей.

  1. Убедитесь, что пользователи вышли (rac session list или список сеансов в консоли).
  2. Остановите службу «Агент сервера 1С:Предприятия 8.3».
  3. Удалите папки snccntx… внутри srvinfo\reg_1541\. Сами каталоги баз (с GUID-именами) и файлы .lst не трогайте.
  4. Очистите %TEMP% учётной записи службы.
  5. Запустите службу и проверьте вход в базу.

Автоматическая чистка по расписанию

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

Windows. Скрипт удаляет временные файлы 1С старше 7 дней. Запускайте его от имени пользователя или службы, чей %TEMP% чистите, ночью:

@echo off
rem Временные файлы платформы старше 7 дней
forfiles /p "%TEMP%" /m v8_*.tmp /d -7 /c "cmd /c del /q @path" 2>nul

Добавьте задачу в «Планировщик заданий Windows» с триггером «Ежедневно» в 3:00 и условием «Выполнять, только если компьютер простаивает».

Linux. Для /tmp достаточно правила systemd-tmpfiles или строки в cron пользователя usr1cv8:

# crontab -u usr1cv8 -e
0 3 * * * find /tmp -maxdepth 1 -user usr1cv8 -name 'v8_*' -mtime +7 -delete

Срок в 7 дней выбран с запасом: живой сеанс не держит один временный файл неделю. Удаление занятого файла в Linux не ломает процесс, но место освободится только после его закрытия.

Кэш профилей (%APPDATA%, %LOCALAPPDATA%) по расписанию не чистите. Платформа после этого скачивает конфигурацию заново, и первый вход утром тормозит у всех сразу.

Ошибки и переполнение: как найти причину

Большинство проблем с временными файлами проявляется одним из четырёх способов. Выберите свой симптом.

Диагностика: выберите симптом

Чтобы понять, кто именно забивает диск, в Windows удобно отсортировать %TEMP% по дате изменения. Если свежие файлы v8_* появляются пачками в одно и то же время, ищите регламентное задание или обработку, которая запускается по расписанию и не удаляет за собой выгрузки.

В Linux то же самое делает команда:

find /tmp -user usr1cv8 -name 'v8_*' -newermt '-1 hour' -printf '%TT %s %p\n' | sort

Если в коде есть ПолучитьИмяВременногоФайла(), после работы с файлом обязательно вызывайте УдалитьФайлы(). Платформа сама удаляет только те временные файлы, которые создала для себя, а не файлы, созданные кодом конфигурации или обработки.

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

Сколько данных можно положить во временное хранилище?
Жёсткого лимита в байтах нет. Ограничивает память рабочего процесса и параметр «Безопасный расход памяти за один вызов» в свойствах рабочего сервера.
Сохранится ли содержимое хранилища после перезапуска сервера 1С?
Нет. Временное хранилище не пишет данные в базу. После перезапуска процесса или службы адреса становятся недействительными.
Можно ли удалить всю папку 1cv8 в профиле пользователя?
Можно, если 1С закрыта. Платформа создаст её заново и скачает кэш. Файл со списком баз ibases.v8i лежит в другой папке, 1CEStart, его не удаляйте.
Почему в файловой базе тоже копятся временные файлы?
В файловом режиме серверная часть работает внутри клиентского процесса. Поэтому всё, что на сервере ушло бы в %TEMP% службы, уходит в %TEMP% пользователя.
Нужно ли чистить временные файлы перед обновлением конфигурации?
Не обязательно. Но если после обновления у пользователей странные ошибки форм, сброс кэша ключом /ClearCache обычно их снимает.