К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как получить каталог временных файлов в 1С

Как получить каталог временных файлов в 1С: функция КаталогВременныхФайлов(), системная переменная TEMP, очистка папки и типичные ошибки при работе с временными файлами.

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

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

Что такое каталог временных файлов и зачем он нужен 1С

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

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

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

Как получить каталог программно: функция КаталогВременныхФайлов()

Основной и рекомендуемый способ — встроенная функция глобального контекста КаталогВременныхФайлов(). Она не требует параметров и возвращает строку с полным путём к системному каталогу. Функция доступна в тонком клиенте, толстом клиенте, веб-клиенте (с ограничениями) и на сервере.

Типовой пример использования — создание временного файла для выгрузки данных:

ИмяФайла = КаталогВременныхФайлов() + "Выгрузка_" + Формат(ТекущаяДата(), "ДФ=yyyyMMdd_hhmmss") + ".xml";

Запись = Новый ЗаписьXML;

Запись.ОткрытьФайл(ИмяФайла);

// ... запись данных ...

Запись.Закрыть();

// после использования файла — удалить

УдалитьФайлы(ИмяФайла);

Обратите внимание: функция уже возвращает путь с завершающим разделителем, поэтому дополнительный слэш или обратный слэш добавлять не нужно. Если склеить путь вручную с лишним разделителем, на Windows это обычно сработает, но лучше не полагаться на такое поведение.

1c
Каталог = КаталогВременныхФайлов();
Сообщить(Каталог); // например: C:\Users\Ivanov\AppData\Local\Temp\
ИмяФайла = Каталог + "temp_export.xml";

Как получить уникальное имя временного файла

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

Функция принимает необязательный параметр — расширение. Например, ПолучитьИмяВременногоФайла("xlsx") вернёт путь вида C:\Users\...\Temp\v8_1A2B.tmp.xlsx. Расширение нужно указывать, если дальше файл будет обрабатываться внешней программой, которая ориентируется на него.

Ограничение: в веб-клиенте прямой доступ к файловой системе заблокирован браузером, поэтому обе функции там работают только в связке с расширением работы с файлами, а часть сценариев недоступна вовсе. Для веб-клиента файловые операции обычно переносят на сервер.

Как найти каталог вручную через операционную систему

В Windows путь к каталогу временных файлов хранится в переменных окружения TEMP и TMP. Быстрый способ открыть папку: нажать Win+R, ввести %TEMP% и нажать Enter — проводник откроет каталог текущего пользователя. Обычно это C:\Users\ИмяПользователя\AppData\Local\Temp.

Для сервера 1С ситуация тоньше: агент сервера работает под отдельной учётной записью (по умолчанию USR1CV8), поэтому его каталог временных файлов — это Temp этой служебной учётной записи, а не администратора. Найти его можно, открыв переменные окружения от имени этой учётной записи или посмотрев профиль в C:\Users\USR1CV8\AppData\Local\Temp.

В Linux каталог временных файлов определяется переменной TMPDIR, а при её отсутствии используется /tmp. Проверить значение можно командой echo $TMPDIR в консоли под пользователем, от имени которого работает сервер 1С.

Как открыть каталог временных файлов в Windows
  1. 1
    Нажмите Win+R и введите %TEMP%, затем Enter — откроется папка текущего пользователя
  2. 2
    Для каталога сервера 1С проверьте профиль служебной учётной записи (например, C:\Users\USR1CV8\AppData\Local\Temp)
  3. 3
    Отсортируйте содержимое по дате изменения, чтобы найти свежие файлы 1С
  4. 4
    Проверьте свободное место на диске, если файлов необычно много

Клиент и сервер: чей каталог возвращается

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

Правильный шаблон для передачи файла с сервера на клиент — использовать механизм временного хранилища: на сервере файл помещается в хранилище через ПоместитьВоВременноеХранилище(), а на клиенте извлекается по полученному адресу. Прямой обмен путями между клиентом и сервером не работает.

В файловой базе такой проблемы нет: клиент и «сервер» выполняются в одном процессе на одной машине, и каталог временных файлов один. Это одна из причин, почему код, отлаженный на файловой базе, ломается после переноса в клиент-серверный вариант.

Маршрут решения

Как выбрать подход

Нужен путь для записи файла в текущем контексте выполненияИспользуйте КаталогВременныхФайлов() — это универсально и переносимо между ОС
Нужно уникальное имя без риска коллизий между сеансамиИспользуйте ПолучитьИмяВременногоФайла() с нужным расширением
Файл создаётся на сервере, а нужен на клиентеПередавайте данные через временное хранилище, а не через путь к файлу
Нужно просто посмотреть, что накопилось в папкеОткройте %TEMP% в проводнике или /tmp в Linux вручную

Очистка каталога и типичные ошибки

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

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

В коде за очистку отвечает разработчик: после использования временного файла вызывайте УдалитьФайлы(ИмяФайла), обернув вызов в попытку-исключение, чтобы ошибка удаления не прервала основную логику. Если файл заблокирован другим процессом, удаление завершится ошибкой — это нормально, файл уберётся позже.

Типичные ошибки
01
Использовать путь, полученный на сервере, в клиентском коде — файл не найден, потому что это разные компьютеры
02
Не удалять временные файлы после использования — каталог разрастается и переполняет диск
03
Добавлять лишний разделитель после КаталогВременныхФайлов() — путь уже содержит завершающий слэш
04
Хранить во временном каталоге данные, которые нужны позже — ОС может очистить папку в любой момент
05
Жёстко прописывать C:\Temp в коде — путь не переносим между ОС и может не существовать

Проверка результата и контрольные точки

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

Ещё один признак проблемы — функция возвращает путь, но диск переполнен. Перед массовыми операциями имеет смысл проверять свободное место, особенно на серверах с небольшим системным разделом, куда по умолчанию попадает Temp.

Контрольные точки

Как проверить результат

Возвращаемый путь
Норма

Заканчивается разделителем, папка существует и открывается вручную

Тревожный признак

Путь пустой или указывает на несуществующий каталог

Запись тестового файла
Норма

Файл создаётся и удаляется без ошибок

Тревожный признак

Ошибка доступа — нет прав у учётной записи процесса

Свободное место на диске с каталогом
Норма

Запас места заметно превышает объём планируемых файлов

Тревожный признак

Диск почти заполнен — обмены будут падать с ошибками

Место выполнения кода
Норма

Путь используется в том же контексте, где получен

Тревожный признак

Серверный путь передаётся на клиент — файл не найден

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

Чем КаталогВременныхФайлов() отличается от ПолучитьИмяВременногоФайла()?

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

Почему в веб-клиенте функция не работает?

Браузер ограничивает доступ веб-приложений к файловой системе. Для работы с файлами в веб-клиенте требуется расширение работы с файлами, а часть операций доступна только через диалоги выбора файла. Файловую логику для веб-клиента обычно выносят на сервер.

Можно ли изменить каталог временных файлов для 1С?

Да, косвенно: платформа использует системные переменные TEMP/TMP (Windows) или TMPDIR (Linux). Изменив эти переменные для учётной записи, под которой работает клиент или сервер 1С, вы перенаправите и каталог временных файлов. Это полезно, когда системный диск мал, а обмены создают большие файлы.

Безопасно ли удалять содержимое папки Temp целиком?

Только когда ни один сеанс 1С и другие программы не выполняют файловых операций. Файлы, открытые работающими процессами, либо не удалятся, либо их удаление оборвёт соответствующую операцию. Безопасный вариант — удалять файлы старше суток при неактивных сеансах.

Почему код работает в файловой базе, но падает в клиент-серверной?

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

Нужно ли удалять файл, созданный ПолучитьИмяВременногоФайла()?

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

Итог

Что важно запомнить

Каталог временных файлов в 1С получают функцией КаталогВременныхФайлов(), а уникальное имя — ПолучитьИмяВременногоФайла(). В клиент-серверной архитектуре путь зависит от места выполнения кода, поэтому файлы между клиентом и сервером передают через временное хранилище. Временные файлы нужно удалять в коде, а каталог периодически очищать — но только вне активных операций.