Каталог временных файлов в 1С: где лежит, как получить имя и удалить файлы
Путь к каталогу временных файлов в 1С даёт функция КаталогВременныхФайлов(),
уникальное имя файла в нём — ПолучитьИмяВременногоФайла(Расширение).
Файлы, чьи имена получены этим методом, платформа удаляет сама — но только при штатном
завершении процесса. Поэтому правило простое: создал файл — удали его явно через
УдалитьФайлы() в блоке Попытка…Исключение, не полагаясь на автоочистку.
Важно помнить контекст: код &НаСервере работает с temp-каталогом
сервера (пользователь службы, обычно USR1CV8), код на клиенте —
с temp-каталогом пользователя Windows. Передавать путь между этими контекстами бессмысленно.
Функция КаталогВременныхФайлов(): что возвращает
В 1С каталог временных файлов никогда не прописывают жёстко — его возвращает функция
глобального контекста КаталогВременныхФайлов(). Путь приходит с завершающим
разделителем, поэтому имя файла можно приклеивать сразу:
Путь = КаталогВременныхФайлов();
// Клиент Windows: C:\Users\Иванов\AppData\Local\Temp\...
// Сервер Windows: C:\Users\USR1CV8\AppData\Local\Temp\...
// Linux: /tmp/... (или каталог из переменной TMPDIR)
ИмяФайла = Путь + "выгрузка.xml";
Функция доступна и на клиенте, и на сервере, но возвращает разные каталоги — каждый контекст видит файловую систему своей машины. В веб-клиенте прямой работы с файловой системой нет: файловые операции выполняются через расширение работы с файлами либо на сервере.
Где на сервере 1С лежат временные файлы: temp rphost и srvinfo
Когда говорят «сервер 1С временные файлы», обычно смешивают два разных места:
-
Temp-каталог пользователя службы. Именно его возвращает
КаталогВременныхФайлов()в серверном коде. Служба агента сервера по умолчанию работает отUSR1CV8, поэтому файлы падают вC:\Users\USR1CV8\AppData\Local\Temp(Windows) или/tmp(Linux). Каталог можно перенаправить переменными окруженияTEMP/TMP(TMPDIRв Linux) для пользователя службы. -
Рабочий каталог кластера
srvinfo(по умолчаниюC:\Program Files\1cv8\srvinfo, ключ-dу агента). Внутри —reg_1541с настройками кластера, данными сеансов и кешамиsnccntx*. Это служебные данные кластера, а не «мусор»: чистить их руками можно только при остановленной службе и осознанно (обычно — каталогиsnccntx*при проблемах с сеансовыми данными).
Практический вывод: если диск сервера забит, сначала смотрите temp пользователя службы —
туда падают файлы обменов, выгрузок и внешних компонент. srvinfo трогайте
в последнюю очередь.
Как в 1С получить временный файл: ПолучитьИмяВременногоФайла()
Чтобы в 1С получить временный файл с гарантированно уникальным именем, не склеивайте путь
руками — используйте ПолучитьИмяВременногоФайла(). Метод возвращает полное имя
файла в каталоге временных файлов; сам файл при этом не создаётся:
// Имя временного файла 1С с нужным расширением
ИмяФайла = ПолучитьИмяВременногоФайла("xml");
// C:\Users\USR1CV8\AppData\Local\Temp\v8_5A3F_1a.xml
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл(ИмяФайла);
// ... формируем содержимое ...
Запись.Закрыть();
Расширение передаётся без точки. Полученное имя платформа регистрирует у себя и удаляет файл при штатном завершении процесса (см. раздел про удаление). Метод недоступен в веб-клиенте — в клиент-серверном варианте вызывайте его на сервере.
Почему нельзя хардкодить пути к временным файлам
Захардкоженный «C:\Temp\файл.xml» — мина замедленного действия: на сервере может
не быть такого каталога, у пользователя службы нет туда прав, на Linux путь не существует
в принципе, а два параллельных сеанса перезапишут файлы друг друга. Связка
КаталогВременныхФайлов() + ПолучитьИмяВременногоФайла() снимает все
четыре проблемы: путь корректен для текущей ОС и контекста, имя уникально для каждого вызова.
Временный файл 1С 8.3 через файловый поток: СоздатьВременныйФайл()
Начиная с 1С 8.3 доступен и потоковый вариант: СоздатьВременныйФайл() создаёт
временный файл и сразу открывает его как ФайловыйПоток в монопольном режиме.
Пока данные не превышают лимит памяти, работа идёт в памяти вообще без файла на диске:
// До 10 МБ — в памяти, дальше платформа сама создаст файл на диске
Поток = СоздатьВременныйФайл(10 * 1024 * 1024);
ЗаписьДанных = Новый ЗаписьДанных(Поток);
ЗаписьДанных.ЗаписатьСтроку("строка отчёта");
ЗаписьДанных.Закрыть();
Поток.Закрыть(); // временный файл (если создался) удаляется при закрытии
Это удобный вариант для промежуточных данных, которые не нужно передавать по имени файла во внешнюю систему: закрыли поток — и подчищать за собой нечего.
Удалить временные файлы 1С: УдалитьФайлы() и автоочистка платформой
Удалить временные файлы в 1С проще всего процедурой УдалитьФайлы(). Она принимает
либо полное имя конкретного файла, либо каталог и маску:
// Один файл
УдалитьФайлы(ИмяФайла);
// Все xml по маске в подкаталоге temp
УдалитьФайлы(КаталогВременныхФайлов() + "exchange", "*.xml");
Автоматика у платформы тоже есть, но с оговорками. Файлы, имена которых выданы
ПолучитьИмяВременногоФайла(), удаляются:
- на сервере — при перезапуске рабочего процесса
rphost; - на клиенте — при завершении сеанса клиентского приложения.
Автоочистки нет, если процесс упал аварийно, если имя файла вы собрали
вручную конкатенацией с КаталогВременныхФайлов(), а также для файлов, которые
насоздавали внешние компоненты. На нагруженном сервере rphost может не перезапускаться
неделями — «автоматически удалится» превращается в гигабайты мусора. Поэтому явное удаление
после обработки — не перестраховка, а норма.
Типовой паттерн: создать → обработать → удалить в Попытке
Рабочая схема, при которой временный файл не переживает ни успех, ни ошибку обработки:
ИмяФайла = ПолучитьИмяВременногоФайла("zip");
Попытка
// 1. Создать
ДанныеФайла.Записать(ИмяФайла);
// 2. Обработать
ЧтениеАрхива = Новый ЧтениеZipФайла(ИмяФайла);
ЧтениеАрхива.ИзвлечьВсе(КаталогРаспаковки);
ЧтениеАрхива.Закрыть();
// 3. Удалить при успехе
УдалитьФайлы(ИмяФайла);
Исключение
// 3'. Удалить и при ошибке, не теряя исходное исключение
УдалитьФайлы(ИмяФайла);
ВызватьИсключение;
КонецПопытки;
Два принципиальных момента: удаление продублировано в ветке Исключение
(иначе любой сбой обработки оставляет файл на диске), а ВызватьИсключение;
без параметров пробрасывает исходную ошибку дальше — чистка не должна её маскировать.
Перед УдалитьФайлы() обязательно закрывайте все объекты, держащие файл:
ЗаписьXML, потоки, архивы.
Временные файлы при обменах и внешних компонентах
Основные «производители» мусора в temp-каталоге сервера — интеграционные сценарии:
- Обмены данными. Универсальный обмен и конвертация формируют промежуточные XML/ZIP в каталоге временных файлов; при обрыве обмена файлы остаются.
- Внешние компоненты. Многие ВК (работа с криптографией, распознавание, печать этикеток) распаковываются и пишут кеши в temp процесса. Платформа за ними не следит — эти файлы автоочистка не затронет никогда.
-
Передача файлов клиент — сервер. Файл нельзя «увидеть» по пути из другого
контекста, поэтому его гоняют через
ПоместитьВоВременноеХранилище()/ПолучитьИзВременногоХранилища(), а на каждой стороне материализуют во временный файл — и каждая сторона обязана удалить свой экземпляр.
Чистка накопившегося мусора в temp-каталоге сервера
Если временные файлы уже забили диск, разовую чистку можно сделать тем же языком 1С: найти файлы по маске, отфильтровать по дате изменения и удалить только старые. Свежие файлы трогать нельзя — они могут принадлежать живым сеансам других rphost:
Граница = ТекущаяДата() - 3 * 86400; // старше трёх суток
Найденные = НайтиФайлы(КаталогВременныхФайлов(), "v8_*.*", Ложь);
Для Каждого Файл Из Найденные Цикл
Если Файл.ЭтоФайл() И Файл.ПолучитьВремяИзменения() < Граница Тогда
Попытка
УдалитьФайлы(Файл.ПолноеИмя);
Исключение
// файл занят другим процессом — пропускаем
КонецПопытки;
КонецЕсли;
КонецЦикла;
Каждое удаление обёрнуто в свою Попытку: один занятый файл не должен ронять
всю чистку. Для постоянной профилактики этот же код оформляют регламентным заданием,
а на уровне инфраструктуры — настраивают перезапуск rphost по расписанию.
Частые ошибки при работе с временными файлами в 1С
-
«Файл занят другим процессом» при удалении. Не закрыт объект, который
писал файл (
ЗаписьXML, поток,ЗаписьZipФайла), либо файл держит антивирус. СначалаЗакрыть(), потомУдалитьФайлы(); в массовой чистке — Попытка вокруг каждого файла. -
Захардкоженный путь.
«C:\Temp»работает на машине разработчика и падает на сервере: нет каталога, нет прав, другая ОС. ТолькоКаталогВременныхФайлов()иПолучитьИмяВременногоФайла(). - Путь с сервера передан на клиент (или наоборот). Контексты видят разные файловые системы; файл нужно передавать через временное хранилище, а не по имени.
-
Надежда на автоочистку. Платформа удаляет только файлы, полученные через
ПолучитьИмяВременногоФайла(), и только при штатном завершении процесса. Забытые файлы обменов и внешних компонент копятся, пока не кончится диск. - Нет прав у пользователя службы. После смены пользователя службы сервера серверный код внезапно не может писать во «вчерашний» temp. Проверяйте права именно того пользователя, под которым работает rphost.
-
Чистка «всего подряд» в temp. Удаление свежих файлов ломает живые сеансы
и обмены, а чистка
srvinfoпри работающей службе — сам кластер. Фильтруйте по дате и не трогайте служебные каталоги.
Частые вопросы о каталоге временных файлов 1С
Где физически находится каталог временных файлов на сервере 1С?
В temp-каталоге пользователя, под которым работает служба сервера: по умолчанию
C:\Users\USR1CV8\AppData\Local\Temp на Windows и /tmp на Linux.
Каталог srvinfo — не temp, а рабочий каталог кластера, его чистить нельзя.
Удаляет ли платформа временные файлы автоматически?
Только файлы, имена которых выданы ПолучитьИмяВременногоФайла(), и только при
штатном завершении процесса: на сервере — при перезапуске rphost, на клиенте — при выходе
из программы. Файлы с «ручными» именами и файлы внешних компонент не удаляются никогда —
чистите их явно через УдалитьФайлы().
Почему нельзя жёстко прописывать путь к временному файлу?
Захардкоженный путь ломается при переносе кода: на сервере нет такого каталога или прав,
на Linux путь не существует, параллельные сеансы перезаписывают файлы друг друга.
ПолучитьИмяВременногоФайла() даёт корректный путь и уникальное имя для любой
ОС и контекста.
ИИ Консоль кода 1С
Лайт
Для ознакомления с возможностями
- Полный набор инструментов без урезаний
- Без ввода карты
Старт
Для индивидуального использования
- До 5 конфигураций
- Встроенный агент запросов 1С
-
≈ 100 задач Подробнее про лимиты
- Техническая поддержка
Продвинутый
Популярный выборДля интенсивного использования или команд
- До 15 конфигураций
- Встроенный агент запросов 1С
-
≈ 300 задач Подробнее про лимиты
-
Свои подписки Codex, Claude и любые OpenAI-совместимые
-
Внешние обработки без Конфигуратора
- Приоритетная техническая поддержка