Временные файлы 1С 8.3: где лежат, как создать из кода и когда чистить
Содержание
Временный файл в 1С получают двумя путями. Из кода — функцией ПолучитьИмяВременногоФайла("xml"): она возвращает полный путь в каталоге временных файлов, а сам файл создаёте вы. С диска — в системной папке %TEMP% пользователя (файлы вида v8_XXXX.tmp) и в кэше %APPDATA%\1C\1cv8 и %LOCALAPPDATA%\1C\1cv8.
Частое заблуждение — искать «временный файл» в каталоге информационной базы. Там лежит только 1Cv8tmp.1CD файловой базы, а основная масса временных данных живёт в профиле пользователя на клиенте и в профиле службы на сервере. Всё описанное относится к платформе 8.3 в целом и не зависит от конфигурации: БП, ЗУП и УТ работают с временными файлами одинаково.
Где 1С хранит временные файлы и кэш на диске
У платформы три вида временных данных. Их путают, поэтому сначала разделим:
- 📁 Кэш конфигурации — копия метаданных и пользовательских настроек на клиенте. Ускоряет запуск. Разложен по папкам с GUID базы.
- 🗂 Временные файлы — то, что платформа и код конфигурации создают «на минуту»: распакованные вложения, выгрузки, печатные формы перед открытием.
- 🖥 Сеансовые данные сервера — служебные файлы кластера в каталоге
srvinfo.
Таблица путей
| Что | Windows | Linux |
|---|---|---|
| Временные файлы клиента | %TEMP% (обычно C:\Users\<имя>\AppData\Local\Temp) | /tmp |
| Кэш конфигурации (перемещаемый профиль) | %APPDATA%\1C\1cv8\<GUID базы> | ~/.1cv8/1C/1cv8/<GUID базы> |
| Кэш конфигурации (локальный) | %LOCALAPPDATA%\1C\1cv8\<GUID базы> | там же, в ~/.1cv8 |
| Список баз | %APPDATA%\1C\1CEStart\ibases.v8i | ~/.1C/1cestart/ibases.v8i |
| Временные файлы сервера | %TEMP% пользователя службы, например C:\Users\USR1CV8\AppData\Local\Temp | /tmp или $TMPDIR пользователя usr1cv8 |
| Данные кластера и сеансов | C:\Program Files\1cv8\srvinfo\reg_1541 | /home/usr1cv8/.1cv8/1C/1cv8/reg_1541 |
| Временная БД файловой базы | 1Cv8tmp.1CD рядом с 1Cv8.1CD | так же |
Каталог srvinfo задаётся при установке сервера и может лежать на другом диске. Точный путь виден в параметрах запуска службы «Агент сервера 1С:Предприятия»: ключ -d в строке запуска ragent.exe.
Как открыть эти папки быстро
Не нужно включать показ скрытых файлов. Нажмите Win + R и введите путь с переменной:
%TEMP%— временные файлы текущего пользователя;%APPDATA%\1C\1cv8— перемещаемый кэш;%LOCALAPPDATA%\1C\1cv8— локальный кэш.
Проводник раскроет переменную сам. На Linux те же каталоги открывают командой ls -la ~/.1cv8/1C/1cv8, а размер кэша смотрят через du -sh ~/.1cv8. Для сервера под Linux команды выполняют от имени usr1cv8, например sudo -u usr1cv8 du -sh /home/usr1cv8/.1cv8.
Как понять, какая папка с GUID относится к нужной базе
Откройте ibases.v8i в Блокноте. У каждой базы есть строка ID= — это и есть имя папки в кэше. Пример:
[Бухгалтерия ООО Ромашка]
Connect=Srvr="srv-1c";Ref="buh_romashka";
ID=6f3a1c2e-9b4d-4e1a-8c7f-2d5b0a9e1f33
Папка %APPDATA%\1C\1cv8\6f3a1c2e-9b4d-4e1a-8c7f-2d5b0a9e1f33 — кэш именно этой базы. Остальные трогать не нужно.
Как получить временный файл 1С программно
В языке 1С есть две функции глобального контекста:
КаталогВременныхФайлов()— путь к каталогу временных файлов того компьютера, где выполняется код;ПолучитьИмяВременногоФайла(Расширение)— уникальное имя файла в этом каталоге.
Функция только придумывает имя. Файл на диске появится, когда вы что-то в него запишете. Удалять его тоже вам — платформа сама за кодом не убирает.
Пример: выгрузить табличный документ во временный файл
&НаСервере
Функция СформироватьФайлНаСервере()
ТабДок = Новый ТабличныйДокумент;
// ... заполнение табличного документа ...
ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX);
Данные = Новый ДвоичныеДанные(ИмяФайла);
УдалитьФайлы(ИмяФайла);
Возврат ПоместитьВоВременноеХранилище(Данные, УникальныйИдентификатор);
КонецФункции
Порядок такой: записали файл → прочитали в ДвоичныеДанные → сразу удалили с диска → передали данные клиенту через временное хранилище. На сервере файл не задерживается ни на секунду дольше нужного.
Код с &НаСервере создаёт файл на сервере 1С, а не на компьютере пользователя. Искать его в %TEMP% своего ПК бесполезно — смотрите Temp пользователя службы на сервере.
Временный каталог вместо файла
Если нужно распаковать ZIP или собрать несколько файлов, создайте подкаталог:
Каталог = ПолучитьИмяВременногоФайла("");
СоздатьКаталог(Каталог);
// ... работа с файлами внутри ...
УдалитьФайлы(Каталог);
УдалитьФайлы с путём к каталогу удаляет его вместе с содержимым. В типовых конфигурациях на БСП есть общий модуль ФайловаяСистема с готовыми обёртками для временных файлов и каталогов — если пишете доработку типовой, удобнее пользоваться ими.
Как поймать временный файл отладчиком
Поставьте точку останова сразу после записи файла и до УдалитьФайлы. В табло отладчика вычислите переменную ИмяФайла — получите полный путь. Пока выполнение стоит на точке, файл лежит на диске, его можно скопировать и открыть.
Временное хранилище: файл между клиентом и сервером
Временное хранилище — не папка на диске, а механизм платформы для передачи данных между клиентом и сервером. Работа с ним строится на трёх методах:
| Метод | Что делает |
|---|---|
ПоместитьВоВременноеХранилище(Данные, Идентификатор) | кладёт значение и возвращает адрес-строку |
ПолучитьИзВременногоХранилища(Адрес) | возвращает значение по адресу |
УдалитьИзВременногоХранилища(Адрес) | освобождает место заранее |
Вторым параметром передавайте УникальныйИдентификатор формы. Тогда данные удалятся сами при закрытии формы. Без привязки к форме большие файлы дольше висят в памяти сервера.
Отдать файл пользователю
На клиенте адрес из хранилища превращается в файл на диске пользователя:
&НаКлиенте
Процедура Выгрузить(Команда)
Адрес = СформироватьФайлНаСервере();
ПолучитьФайл(Адрес, "Отчет.xlsx", Истина);
КонецПроцедуры
Последний параметр Истина открывает диалог сохранения. В новых релизах платформы синхронные вызовы с диалогами запрещены режимом совместимости — тогда используйте асинхронный вариант с префиксом Начать... или ...Асинх.
Принять файл от пользователя
Обратная задача — НачатьПомещениеФайла или ПоместитьФайл: файл с диска клиента уходит во временное хранилище, а сервер достаёт его оттуда через ПолучитьИзВременногоХранилища и пишет в свой временный файл функцией ДвоичныеДанные.Записать(ИмяФайла).
Временные данные для диагностики ошибок
Когда 1С падает или работает медленно, полезная информация часто лежит именно во временных и служебных файлах.
Журнал регистрации
- Файловая база: каталог
1Cv8Logвнутри папки базы. - Клиент-серверная:
srvinfo\reg_1541\<GUID базы>\1Cv8Log.
Файл 1Cv8.lgd — новый формат (SQLite), набор .lgp — старый последовательный. Смотрят их через Администрирование → Журнал регистрации в самой базе, а копию папки можно отправить разработчику.
Технологический журнал и дампы
Техжурнал включают файлом logcfg.xml в каталоге conf платформы (например, C:\Program Files\1cv8\conf). Минимальная настройка для сбора дампов при падениях:
<config xmlns="http://v8.1c.ru/v8/tech-log">
<dump create="true" location="C:\v8dumps" type="3"/>
<log location="C:\v8logs" history="24">
<event><eq property="name" value="EXCP"/></event>
<property name="all"/>
</log>
</config>
Параметр history — сколько часов хранить логи. Без него каталог растёт бесконечно.
Отключайте подробный техжурнал сразу после диагностики: на нагруженном сервере он за сутки занимает десятки гигабайт.
Дампы клиента
Тонкий клиент при аварийном завершении пишет дамп в каталог dumps внутри %APPDATA%\1C\1cv8. Если там пусто, проверьте %TEMP%. Дамп и текст из окна «Отчёт об ошибке» — главное, что запросит поддержка.
Что смотреть в %TEMP% при сбое
- 🔍 Сотни файлов
v8_*.tmpс одной датой — код не удаляет временные файлы, утечка в обработке. - 🔍 Файл по имени из сообщения об ошибке остался, но занят — его держит антивирус или другой процесс.
- 🔍 Папка пустая, а ошибка про запись — нет прав или переполнен диск.
Очистка кэша и временных файлов 1С
Чистят по нарастающей: сначала самое безопасное.
| Способ | Когда помогает | Риск |
|---|---|---|
Запуск с /ClearCache | глюки форм после обновления, «старый» интерфейс | нет |
| Удаление папки базы по GUID | /ClearCache не помог | сбросятся локальные настройки клиента |
Очистка %TEMP% | диск забит, ошибки записи | нет, если 1С закрыта |
| Очистка сеансовых данных сервера | ошибки на всех клиентах сразу | обрываются сеансы всех пользователей |
Способ 1. Параметр /ClearCache
- В окне запуска выделите базу и нажмите
Изменить. - Дойдите до последней страницы мастера.
- В поле «Дополнительные параметры запуска» впишите
/ClearCache. - Запустите базу один раз, затем параметр удалите — иначе кэш будет сбрасываться при каждом входе и запуск станет медленнее.
Способ 2. Удаление папок кэша вручную
- Закройте все сеансы 1С на этом компьютере.
- Найдите GUID базы в
ibases.v8i. - Удалите одноимённые папки в
%APPDATA%\1C\1cv8и%LOCALAPPDATA%\1C\1cv8.
Если нужно почистить кэш
всех баз разом — удалите все папки с GUID, но не трогайте файлы .pfl и ibases.v8i: в них настройки и список баз.
Способ 3. Сеансовые данные на сервере
- Предупредите пользователей: при остановке службы оборвутся все сеансы, несохранённые документы пропадут. Делайте это вечером или в выходной.
- Остановите службу «Агент сервера 1С:Предприятия».
- В
srvinfo\reg_1541удалите папки, имя которых начинается сsnccntx. Файлы.lstи папки с GUID баз не трогайте — там реестр кластера и журналы регистрации. - Запустите службу.
Перед удалением чего-либо в srvinfo скопируйте каталог целиком. Ошибочно удалённый 1CV8Clst.lst выкинет из кластера все базы.
Тонкий клиент и веб-клиент: где оказывается файл
Тонкий клиент
Код &НаКлиенте работает на компьютере пользователя. КаталогВременныхФайлов() вернёт его %TEMP%. Код &НаСервере — на сервере 1С. Поэтому обработка, которая «создала файл, а его нет», почти всегда создала его на другой машине.
На терминальном сервере у каждого пользователя свой %TEMP% и свой кэш. При перемещаемых профилях папка AppData\Roaming\1C\1cv8 раздувает профиль и замедляет вход. Решение на стороне Windows — исключить её из синхронизации профиля групповой политикой.
Веб-клиент
У браузера нет прямого доступа к файловой системе. Отсюда правила:
- 🌐
ПолучитьИмяВременногоФайлана клиенте в веб-клиенте недоступна — временные файлы создаются только на сервере. - 🌐 Файл пользователю отдают через временное хранилище и
ПолучитьФайл— браузер скачивает его в свою папку загрузок. - 🌐 Для работы с локальными файлами нужно расширение работы с файлами. Устанавливают его методом
НачатьУстановкуРасширенияРаботыСФайлами, а проверяют асинхронно, подключено ли оно. - 🌐 Временные файлы публикации ложатся в Temp пользователя, от которого работает веб-сервер (IIS или Apache).
Частые проблемы с временными файлами 1С
%TEMP% или файл занят. Проверьте права пользователя (для серверного кода — пользователя службы USR1CV8) на каталог Temp и добавьте его в исключения антивируса.%TEMP% при закрытой 1С и поищите обработку, которая не удаляет временные файлы. Перенесите Temp службы на другой диск через переменные среды пользователя USR1CV8./ClearCache, при неудаче удалите папку с GUID базы.snccntx в srvinfo\reg_1541 при остановленной службе.Частые ошибки разработчиков
- ❌ Собирать путь вручную:
"C:\Temp\" + Имя. На сервере под Linux или у другого пользователя такого пути нет. Берите путь только изПолучитьИмяВременногоФайла. - ❌ Не удалять файл после чтения. Через месяц на сервере — сотни тысяч
v8_*.tmp. - ❌ Удалять файл до того, как его прочитали в
ДвоичныеДанные, или пока он открыт вЧтениеТекста— получите ошибку доступа. Сначала закройте поток. - ❌ Класть в хранилище гигабайтный файл без идентификатора формы — он висит в памяти рабочего процесса.
Частые вопросы
Можно ли удалить всё из папки %TEMP%, пока 1С запущена?
Почему кэш 1С занимает несколько гигабайт?
Где взять GUID базы, если её нет в списке запуска?
ibases.v8i, поэтому без записи в списке баз и кэша для неё нет.Меняется ли каталог временных файлов, если сменить переменную TEMP?
Удаляет ли платформа временные файлы сама при выходе?
ПолучитьИмяВременногоФайла, остаются, пока их не удалит код.