Файлы и обмен данными в 1С

Каталог временных файлов в 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, потоки, архивы.

В Консоли кода этот паттерн можно не писать руками: попросите агента «выгрузи табличный документ в PDF во временный файл, отдай мне и подчисти за собой» — он сам обернёт работу с файлом в Попытку с гарантированным удалением.

Временные файлы при обменах и внешних компонентах

Основные «производители» мусора в temp-каталоге сервера — интеграционные сценарии:

  • Обмены данными. Универсальный обмен и конвертация формируют промежуточные XML/ZIP в каталоге временных файлов; при обрыве обмена файлы остаются.
  • Внешние компоненты. Многие ВК (работа с криптографией, распознавание, печать этикеток) распаковываются и пишут кеши в temp процесса. Платформа за ними не следит — эти файлы автоочистка не затронет никогда.
  • Передача файлов клиент — сервер. Файл нельзя «увидеть» по пути из другого контекста, поэтому его гоняют через ПоместитьВоВременноеХранилище() / ПолучитьИзВременногоХранилища(), а на каждой стороне материализуют во временный файл — и каждая сторона обязана удалить свой экземпляр.

Чистка накопившегося мусора в temp-каталоге сервера

Если временные файлы уже забили диск, разовую чистку можно сделать тем же языком 1С: найти файлы по маске, отфильтровать по дате изменения и удалить только старые. Свежие файлы трогать нельзя — они могут принадлежать живым сеансам других rphost:

Граница = ТекущаяДата() - 3 * 86400; // старше трёх суток
Найденные = НайтиФайлы(КаталогВременныхФайлов(), "v8_*.*", Ложь);

Для Каждого Файл Из Найденные Цикл
    Если Файл.ЭтоФайл() И Файл.ПолучитьВремяИзменения() < Граница Тогда
        Попытка
            УдалитьФайлы(Файл.ПолноеИмя);
        Исключение
            // файл занят другим процессом — пропускаем
        КонецПопытки;
    КонецЕсли;
КонецЦикла;
НайтиФайлы
Путькаталог поиска
Маскамаска имени, например «v8_*.*»
ИскатьВПодкаталогахобход вложенных каталогов
Массив

Каждое удаление обёрнуто в свою Попытку: один занятый файл не должен ронять всю чистку. Для постоянной профилактики этот же код оформляют регламентным заданием, а на уровне инфраструктуры — настраивают перезапуск rphost по расписанию.

Быстрая диагностика без написания обработки: спросите агента Консоли кода «сколько места занимают временные файлы 1С на сервере и какие маски преобладают» — он соберёт статистику по каталогу и предложит безопасный скрипт чистки.

Частые ошибки при работе с временными файлами в 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С

Лайт

Бесплатно
≈ 1,5 млн токенов

Для ознакомления с возможностями

  • Все функции бесплатно на 2 дня +2 дня за подписку на Telegram или Max
  • Полный набор инструментов без урезаний
  • Без ввода карты
Начать бесплатно

Старт

1990 руб. в месяц
≈ 10 млн токенов

Для индивидуального использования

Выбрать тариф

Продвинутый

Популярный выбор
3990 руб. в месяц
≈ 25 млн токенов

Для интенсивного использования или команд

  • До 15 конфигураций
  • Встроенный агент запросов 1С
  • Свои подписки Codex, Claude и любые OpenAI-совместимые
  • Внешние обработки без Конфигуратора
  • Приоритетная техническая поддержка
Выбрать тариф