Временные файлы 1С 8.3: где лежат, как создать из кода и когда чистить

· 9 мин

Содержание

Временный файл в 1С получают двумя путями. Из кода — функцией ПолучитьИмяВременногоФайла("xml"): она возвращает полный путь в каталоге временных файлов, а сам файл создаёте вы. С диска — в системной папке %TEMP% пользователя (файлы вида v8_XXXX.tmp) и в кэше %APPDATA%\1C\1cv8 и %LOCALAPPDATA%\1C\1cv8.

Частое заблуждение — искать «временный файл» в каталоге информационной базы. Там лежит только 1Cv8tmp.1CD файловой базы, а основная масса временных данных живёт в профиле пользователя на клиенте и в профиле службы на сервере. Всё описанное относится к платформе 8.3 в целом и не зависит от конфигурации: БП, ЗУП и УТ работают с временными файлами одинаково.

Где 1С хранит временные файлы и кэш на диске

У платформы три вида временных данных. Их путают, поэтому сначала разделим:

  • 📁 Кэш конфигурации — копия метаданных и пользовательских настроек на клиенте. Ускоряет запуск. Разложен по папкам с GUID базы.
  • 🗂 Временные файлы — то, что платформа и код конфигурации создают «на минуту»: распакованные вложения, выгрузки, печатные формы перед открытием.
  • 🖥 Сеансовые данные сервера — служебные файлы кластера в каталоге srvinfo.

Таблица путей

ЧтоWindowsLinux
Временные файлы клиента%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

  1. В окне запуска выделите базу и нажмите Изменить.
  2. Дойдите до последней страницы мастера.
  3. В поле «Дополнительные параметры запуска» впишите /ClearCache.
  4. Запустите базу один раз, затем параметр удалите — иначе кэш будет сбрасываться при каждом входе и запуск станет медленнее.

Способ 2. Удаление папок кэша вручную

  1. Закройте все сеансы 1С на этом компьютере.
  2. Найдите GUID базы в ibases.v8i.
  3. Удалите одноимённые папки в %APPDATA%\1C\1cv8 и %LOCALAPPDATA%\1C\1cv8.

Если нужно почистить кэш всех баз разом — удалите все папки с GUID, но не трогайте файлы .pfl и ibases.v8i: в них настройки и список баз.

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

  1. Предупредите пользователей: при остановке службы оборвутся все сеансы, несохранённые документы пропадут. Делайте это вечером или в выходной.
  2. Остановите службу «Агент сервера 1С:Предприятия».
  3. В srvinfo\reg_1541 удалите папки, имя которых начинается с snccntx. Файлы .lst и папки с GUID баз не трогайте — там реестр кластера и журналы регистрации.
  4. Запустите службу.

Перед удалением чего-либо в srvinfo скопируйте каталог целиком. Ошибочно удалённый 1CV8Clst.lst выкинет из кластера все базы.

Тонкий клиент и веб-клиент: где оказывается файл

Тонкий клиент

Код &НаКлиенте работает на компьютере пользователя. КаталогВременныхФайлов() вернёт его %TEMP%. Код &НаСервере — на сервере 1С. Поэтому обработка, которая «создала файл, а его нет», почти всегда создала его на другой машине.

На терминальном сервере у каждого пользователя свой %TEMP% и свой кэш. При перемещаемых профилях папка AppData\Roaming\1C\1cv8 раздувает профиль и замедляет вход. Решение на стороне Windows — исключить её из синхронизации профиля групповой политикой.

Веб-клиент

У браузера нет прямого доступа к файловой системе. Отсюда правила:

  • 🌐 ПолучитьИмяВременногоФайла на клиенте в веб-клиенте недоступна — временные файлы создаются только на сервере.
  • 🌐 Файл пользователю отдают через временное хранилище и ПолучитьФайл — браузер скачивает его в свою папку загрузок.
  • 🌐 Для работы с локальными файлами нужно расширение работы с файлами. Устанавливают его методом НачатьУстановкуРасширенияРаботыСФайлами, а проверяют асинхронно, подключено ли оно.
  • 🌐 Временные файлы публикации ложатся в Temp пользователя, от которого работает веб-сервер (IIS или Apache).

Частые проблемы с временными файлами 1С

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

Частые ошибки разработчиков

  • ❌ Собирать путь вручную: "C:\Temp\" + Имя. На сервере под Linux или у другого пользователя такого пути нет. Берите путь только из ПолучитьИмяВременногоФайла.
  • ❌ Не удалять файл после чтения. Через месяц на сервере — сотни тысяч v8_*.tmp.
  • ❌ Удалять файл до того, как его прочитали в ДвоичныеДанные, или пока он открыт в ЧтениеТекста — получите ошибку доступа. Сначала закройте поток.
  • ❌ Класть в хранилище гигабайтный файл без идентификатора формы — он висит в памяти рабочего процесса.

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

Можно ли удалить всё из папки %TEMP%, пока 1С запущена?
Не стоит. Занятые файлы не удалятся, а удаление рабочих файлов открытой формы приведёт к ошибке. Закройте 1С и чистите.
Почему кэш 1С занимает несколько гигабайт?
В кэше хранятся копии конфигураций всех баз, которые открывались на компьютере. Папки давно удалённых баз не исчезают сами — их можно стереть вручную.
Где взять GUID базы, если её нет в списке запуска?
В клиент-серверной базе GUID виден в консоли кластера в свойствах информационной базы. Папка кэша на клиенте создаётся по идентификатору из ibases.v8i, поэтому без записи в списке баз и кэша для неё нет.
Меняется ли каталог временных файлов, если сменить переменную TEMP?
Да. Платформа берёт системный каталог временных файлов пользователя. Для службы сервера 1С переменную меняют в профиле её пользователя и перезапускают службу.
Удаляет ли платформа временные файлы сама при выходе?
Свои служебные — да, частично. Файлы, созданные кодом конфигурации через ПолучитьИмяВременногоФайла, остаются, пока их не удалит код.