Разработка и Конфигурация · 11 мин
Как получить каталог временных файлов в 1С
Как получить каталог временных файлов в 1С: функция КаталогВременныхФайлов(), системная переменная TEMP, очистка папки и типичные ошибки при работе с временными файлами.
Временные файлы в 1С используются постоянно: при обмене данными, выгрузке отчётов, формировании печатных форм, работе с архивами и внешними обработками. Платформа умеет сама определять системный каталог временных файлов, а разработчику доступна встроенная функция, которая возвращает путь к нему на любой операционной системе. Понимание того, где лежат эти файлы, нужно и администратору — например, когда диск переполняется или антивирус блокирует работу программы.
Способ получения каталога зависит от задачи: программно из кода на встроенном языке, вручную через настройки операционной системы или через анализ папок пользователя. Ниже разобраны все рабочие варианты с примерами кода, ограничениями и проверкой результата.
Что такое каталог временных файлов и зачем он нужен 1С
Каталог временных файлов — это системная папка, в которую операционная система разрешает любым приложениям записывать служебные данные с ограниченным сроком жизни. 1С активно её использует: сюда попадают промежуточные файлы обмена, распакованные архивы обновлений, временные копии информационных баз при тестировании, файлы печатных форм перед отправкой на принтер.
Важно понимать: содержимое этой папки не гарантированно сохраняется. Операционная система может очищать её по расписанию, а перезагрузка сервера иногда приводит к удалению части файлов. Поэтому хранить в ней что-то ценное нельзя — только данные, потерю которых процесс переживёт безболезненно.
Отдельный момент — разница между клиентом и сервером. Если код выполняется на сервере 1С, функция вернёт каталог временных файлов сервера, а не компьютера пользователя. Это частая причина ошибок «файл не найден» в клиент-серверных базах.
Как получить каталог программно: функция КаталогВременныхФайлов()
Основной и рекомендуемый способ — встроенная функция глобального контекста КаталогВременныхФайлов(). Она не требует параметров и возвращает строку с полным путём к системному каталогу. Функция доступна в тонком клиенте, толстом клиенте, веб-клиенте (с ограничениями) и на сервере.
Типовой пример использования — создание временного файла для выгрузки данных:
ИмяФайла = КаталогВременныхФайлов() + "Выгрузка_" + Формат(ТекущаяДата(), "ДФ=yyyyMMdd_hhmmss") + ".xml";
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл(ИмяФайла);
// ... запись данных ...
Запись.Закрыть();
// после использования файла — удалить
УдалитьФайлы(ИмяФайла);
Обратите внимание: функция уже возвращает путь с завершающим разделителем, поэтому дополнительный слэш или обратный слэш добавлять не нужно. Если склеить путь вручную с лишним разделителем, на Windows это обычно сработает, но лучше не полагаться на такое поведение.
Каталог = КаталогВременныхФайлов();
Сообщить(Каталог); // например: 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С.
- 1Нажмите Win+R и введите %TEMP%, затем Enter — откроется папка текущего пользователя
- 2Для каталога сервера 1С проверьте профиль служебной учётной записи (например, C:\Users\USR1CV8\AppData\Local\Temp)
- 3Отсортируйте содержимое по дате изменения, чтобы найти свежие файлы 1С
- 4Проверьте свободное место на диске, если файлов необычно много
Клиент и сервер: чей каталог возвращается
Ключевой нюанс клиент-серверной архитектуры: одна и та же функция возвращает разные пути в зависимости от места выполнения кода. В клиентской процедуре — каталог на компьютере пользователя, в серверной — на сервере приложений. Если код создаёт файл на сервере, а затем пытается прочитать его на клиенте, возникнет ошибка «файл не обнаружен».
Правильный шаблон для передачи файла с сервера на клиент — использовать механизм временного хранилища: на сервере файл помещается в хранилище через ПоместитьВоВременноеХранилище(), а на клиенте извлекается по полученному адресу. Прямой обмен путями между клиентом и сервером не работает.
В файловой базе такой проблемы нет: клиент и «сервер» выполняются в одном процессе на одной машине, и каталог временных файлов один. Это одна из причин, почему код, отлаженный на файловой базе, ломается после переноса в клиент-серверный вариант.
Как выбрать подход
Очистка каталога и типичные ошибки
Каталог временных файлов 1С склонен к разрастанию: платформа и конфигурации не всегда удаляют за собой файлы, особенно при аварийном завершении сеансов. На серверах с интенсивными обменами папка может занимать десятки гигабайт. Периодическая очистка — нормальная практика, но делать её нужно аккуратно.
Безопасное правило: удалять только файлы старше текущего сеанса работы (например, старше суток) и только при остановленных или неактивных процессах, которые могли их создать. Удаление файла, который прямо сейчас используется обменом, приведёт к ошибке операции и, возможно, к незавершённой транзакции обмена.
В коде за очистку отвечает разработчик: после использования временного файла вызывайте УдалитьФайлы(ИмяФайла), обернув вызов в попытку-исключение, чтобы ошибка удаления не прервала основную логику. Если файл заблокирован другим процессом, удаление завершится ошибкой — это нормально, файл уберётся позже.
Проверка результата и контрольные точки
После получения каталога полезно убедиться, что он действительно существует и доступен на запись. Простейшая проверка — создать тестовый файл и удалить его. Если создание падает с ошибкой прав доступа, значит, у учётной записи, под которой работает процесс, нет разрешений на каталог — типичная ситуация для неправильно настроенного сервера.
Ещё один признак проблемы — функция возвращает путь, но диск переполнен. Перед массовыми операциями имеет смысл проверять свободное место, особенно на серверах с небольшим системным разделом, куда по умолчанию попадает Temp.
Как проверить результат
Заканчивается разделителем, папка существует и открывается вручную
Путь пустой или указывает на несуществующий каталог
Файл создаётся и удаляется без ошибок
Ошибка доступа — нет прав у учётной записи процесса
Запас места заметно превышает объём планируемых файлов
Диск почти заполнен — обмены будут падать с ошибками
Путь используется в том же контексте, где получен
Серверный путь передаётся на клиент — файл не найден
Частые вопросы
Чем КаталогВременныхФайлов() отличается от ПолучитьИмяВременногоФайла()?
Первая функция возвращает только путь к системной папке и ничего не создаёт. Вторая создаёт пустой файл с уникальным именем в этом каталоге и возвращает полный путь к нему. Если нужен именно файл для записи — используйте вторую, если нужна папка для собственной логики именования — первую.
Почему в веб-клиенте функция не работает?
Браузер ограничивает доступ веб-приложений к файловой системе. Для работы с файлами в веб-клиенте требуется расширение работы с файлами, а часть операций доступна только через диалоги выбора файла. Файловую логику для веб-клиента обычно выносят на сервер.
Можно ли изменить каталог временных файлов для 1С?
Да, косвенно: платформа использует системные переменные TEMP/TMP (Windows) или TMPDIR (Linux). Изменив эти переменные для учётной записи, под которой работает клиент или сервер 1С, вы перенаправите и каталог временных файлов. Это полезно, когда системный диск мал, а обмены создают большие файлы.
Безопасно ли удалять содержимое папки Temp целиком?
Только когда ни один сеанс 1С и другие программы не выполняют файловых операций. Файлы, открытые работающими процессами, либо не удалятся, либо их удаление оборвёт соответствующую операцию. Безопасный вариант — удалять файлы старше суток при неактивных сеансах.
Почему код работает в файловой базе, но падает в клиент-серверной?
Скорее всего, путь к временному файлу получен на сервере, а используется на клиенте (или наоборот). В файловой базе оба контекста — один компьютер, поэтому ошибка не проявляется. Передавайте данные между клиентом и сервером через временное хранилище.
Нужно ли удалять файл, созданный ПолучитьИмяВременногоФайла()?
Да. Функция создаёт реальный файл на диске, и платформа за вас его не уберёт. После использования вызовите УдалитьФайлы(), желательно в конструкции Попытка/Исключение, чтобы возможная ошибка удаления не прервала основной процесс.
Что важно запомнить
Каталог временных файлов в 1С получают функцией КаталогВременныхФайлов(), а уникальное имя — ПолучитьИмяВременногоФайла(). В клиент-серверной архитектуре путь зависит от места выполнения кода, поэтому файлы между клиентом и сервером передают через временное хранилище. Временные файлы нужно удалять в коде, а каталог периодически очищать — но только вне активных операций.