Перенос папки Temp для 1С:Предприятия: ярлык, переменные, сервер

· 9 мин

Содержание

Отдельной настройки «папка временных файлов» в 1С:Предприятии 8.3 нет. Платформа берёт путь из переменных окружения Windows TEMP и TMP, поэтому изменить путь для временных файлов в 1С можно только через них: для одного запуска (bat-файл и ярлык), для пользователя (переменные или реестр HKCU\Environment) или для службы сервера 1С.

Когда диск C: забит до последнего гигабайта, а большой отчёт или выгрузка в Excel падает с ошибкой записи файла, перенос Temp на другой диск решает проблему за 10 минут. Ниже способы от самого узкого к глобальному, с проверкой, что 1С действительно пишет в новое место.

Зачем переносить Temp и что туда пишет 1С

По умолчанию у пользователя Windows временный каталог — %USERPROFILE%\AppData\Local\Temp, то есть C:\Users\Имя\AppData\Local\Temp. Туда 1С складывает:

  • 📄 промежуточные файлы при формировании больших отчётов и печатных форм;
  • 📊 файлы при сохранении табличных документов в Excel, PDF, Word;
  • 📎 вложения, которые пользователь открывает из базы (файлы из присоединённых файлов, сканы);
  • 🔄 временные данные при загрузке и выгрузке, обменах, работе внешних обработок.

Причины переноса обычно такие:

СитуацияЧто даёт перенос
На C: мало места, SSD маленькийТяжёлые операции перестают падать из-за нехватки места
Терминальный сервер с квотами на профилиВременные файлы не съедают квоту профиля
Перемещаемые профилиПрофиль не раздувается, вход в систему быстрее
Быстрый отдельный NVMe или RAM-дискОтчёты и выгрузки работают заметно быстрее

Не путайте Temp с кэшем конфигурации. Кэш лежит в %APPDATA%\1C\1cv8 и %LOCALAPPDATA%\1C\1cv8, переменные TEMP/TMP на него не влияют. Чистят кэш параметром запуска /ClearCache или удалением папок с длинными именами-GUID внутри этих каталогов при закрытой 1С.

Отдельный путь для 1С через ярлык запуска

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

  1. Создайте папку, например D:\1CTemp.
  2. Откройте Блокнот и вставьте текст:
@echo off
set "TEMP=D:\1CTemp"
set "TMP=D:\1CTemp"
start "" "C:\Program Files\1cv8\common\1cestart.exe"
  1. Сохраните как D:\1CTemp\start1c.bat. В Блокноте выберите тип «Все файлы», иначе получится start1c.bat.txt.
  2. Щёлкните по bat-файлу правой кнопкой → Отправить → Рабочий стол (создать ярлык).
  3. В свойствах ярлыка на вкладке «Ярлык» выберите в поле «Окно» значение «Свёрнутое в значок», чтобы не мелькала консоль. Кнопкой «Сменить значок» укажите 1cestart.exe — ярлык будет выглядеть привычно.

1cestart.exe — стартер, который показывает список баз и сам запускает нужную версию 1cv8.exe. Если на компьютере 32-битная платформа, путь будет C:\Program Files (x86)\1cv8\common\1cestart.exe.

Можно сразу открывать конкретную базу, минуя список:

start "" "C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F"D:\Bases\Buh"

Для серверной базы вместо /F используют /S"сервер\имя_базы".

Кавычки в set "TEMP=D:\1CTemp" стоят не для красоты. Запись set TEMP=D:\1CTemp && start ... добавит в путь пробел перед &&, и 1С будет искать несуществующую папку.

Минус способа: если пользователь откроет 1С не этим ярлыком, а из меню «Пуск» или через закреплённый значок, сработает обычный Temp. Старые ярлыки лучше убрать.

Смена переменных TEMP и TMP в Windows

Если нужно перенести временные файлы для всех программ пользователя, меняйте сами переменные.

Через окно «Переменные среды»

  1. Нажмите Win+R, введите rundll32 sysdm.cpl,EditEnvironmentVariables и нажмите Enter. Откроется окно переменных текущего пользователя.
  2. В верхнем блоке «Переменные среды пользователя» выделите TEMP → «Изменить» → укажите D:\Temp.
  3. То же самое сделайте для TMP.
  4. Нажмите «ОК» и выйдите из системы, затем войдите снова.

Нижний блок «Системные переменные» задаёт значения для всей машины, но пользовательские TEMP/TMP их перекрывают. Поэтому для обычного пользователя правят верхний блок.

Из командной строки

setx TEMP "D:\Temp"
setx TMP "D:\Temp"

setx записывает значения для текущего пользователя. В уже открытом окне консоли они не появятся, только в новых процессах. 1С, запущенная до команды, продолжит писать в старое место, пока её не перезапустить.

На терминальном сервере Windows по умолчанию создаёт для каждого сеанса подпапку вида Temp\2, Temp\3. После смены переменной эта логика может перестать работать, и пользователи окажутся в одной общей папке. Для терминала надёжнее способ с bat-ярлыком и отдельной папкой на каждого: set "TEMP=D:\1CTemp\%USERNAME%", перед этим if not exist "D:\1CTemp\%USERNAME%" mkdir "D:\1CTemp\%USERNAME%".

Реестр Windows: массовая настройка

Переменные окружения хранятся в реестре, и через него их удобно раскатать на много пользователей скриптом или групповой политикой.

ОбластьРаздел реестраПараметры
Текущий пользовательHKEY_CURRENT_USER\EnvironmentTEMP, TMP
Вся машинаHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\EnvironmentTEMP, TMP

Тип параметров — REG_EXPAND_SZ: так Windows раскрывает внутри значения другие переменные, например %USERNAME%.

Пример reg-файла для текущего пользователя:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Environment]
"TEMP"=hex(2):44,00,3a,00,5c,00,54,00,65,00,6d,00,70,00,00,00
"TMP"=hex(2):44,00,3a,00,5c,00,54,00,65,00,6d,00,70,00,00,00

Строка hex(2) здесь — это D:\Temp в кодировке UTF-16. Вручную такое писать неудобно, поэтому проще командой:

reg add "HKCU\Environment" /v TEMP /t REG_EXPAND_SZ /d "D:\Temp" /f
reg add "HKCU\Environment" /v TMP /t REG_EXPAND_SZ /d "D:\Temp" /f

Перед правкой раздела HKEY_LOCAL_MACHINE экспортируйте его в reg-файл. Ошибка в системном TEMP ломает установщики и обновления Windows, а не только 1С.

Изменения в реестре подхватываются после повторного входа пользователя. Для системных переменных и служб надёжнее перезагрузка.

В домене то же самое делают групповой политикой: Конфигурация пользователя → Настройка → Конфигурация Windows → Среда. Там создают переменные TEMP и TMP с действием «Обновить».

Временные файлы сервера 1С: служба агента и рабочие процессы

В клиент-серверном варианте временные файлы создаёт не только клиент, но и рабочие процессы rphost.exe на сервере. Они работают от учётной записи службы «Агент сервера 1С:Предприятия 8.3». При стандартной установке это пользователь USR1CV8, и его Temp лежит в C:\Users\USR1CV8\AppData\Local\Temp. Если служба запущена от Локальной системы, временные файлы обычно попадают в C:\Windows\Temp.

Переменные клиента на сервер не действуют. Есть три рабочих варианта.

Вариант 1. Переменная для одной службы

Windows умеет задавать переменные окружения конкретной службе через параметр Environment в её разделе реестра. Это не трогает других пользователей сервера.

  1. Узнайте точное имя службы: services.msc → свойства агента 1С → поле «Имя службы». Обычно это 1C:Enterprise 8.3 Server Agent (x86-64).
  2. Откройте regedit и перейдите в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<имя службы>.
  3. Создайте мультистроковый параметр (REG_MULTI_SZ) с именем Environment.
  4. Впишите в него две строки:
TEMP=E:\1CServerTemp
TMP=E:\1CServerTemp
  1. Выдайте учётной записи USR1CV8 право «Изменение» на папку E:\1CServerTemp.
  2. Перезапустите службу агента.

Рабочие процессы запускаются агентом и наследуют его окружение, поэтому новый путь получают и rmngr.exe, и rphost.exe.

Вариант 2. Переменные учётной записи службы

Войдите на сервер под USR1CV8 (если вход разрешён) и смените TEMP/TMP способом из раздела про переменные. Если входить под этой записью нельзя, правят ветку её профиля: HKEY_USERS\<SID пользователя>\Environment. SID показывает команда wmic useraccount where name="USR1CV8" get sid. Ветка видна в реестре, только когда профиль загружен, то есть служба запущена.

Ключ -d в строке запуска агента не про Temp

В свойствах службы виден путь к исполняемому файлу примерно такого вида:

"C:\Program Files\1cv8\8.3.xx.xxxx\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo" -debug

Ключ -d задаёт каталог srvinfo: реестр кластера, журналы регистрации серверных баз, данные сеансов. Перенос srvinfo на быстрый диск тоже ускоряет работу сервера, но это отдельная процедура и к TEMP отношения не имеет.

Перезапуск службы агента обрывает сеансы всех пользователей на этом сервере. Делайте это вечером или в выходной, предупредив сотрудников. Несохранённые документы будут потеряны.

Как проверить, что 1С пишет в новую папку

Самая быстрая проверка без 1С: откройте новую командную строку и выполните echo %TEMP%. Если путь старый, вы не перелогинились или bat-файл не используется.

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

&НаКлиенте
Процедура Проверить(Команда)
	Сообщить("Клиент: " + КаталогВременныхФайлов());
	ПроверитьНаСервере();
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ПроверитьНаСервере()
	Сообщить("Сервер: " + КаталогВременныхФайлов());
КонецПроцедуры

В файловом варианте обе строки покажут один путь. В клиент-серверном вторая строка покажет Temp рабочего процесса на сервере.

Проверка после переноса
Выполнено: 0 / 6

Обслуживание новой папки: очистка по расписанию

1С не всегда удаляет за собой временные файлы. После аварийного закрытия, зависания или обрыва связи с терминалом остаются хвосты. За полгода на активной базе в Temp набирается от нескольких до десятков гигабайт.

Плюс отдельной папки в том, что её можно чистить смело: кроме 1С туда никто не пишет. Скрипт удаляет файлы старше 7 дней:

@echo off
forfiles /p "D:\1CTemp" /s /m *.* /d -7 /c "cmd /c del /q @path" 2>nul
forfiles /p "D:\1CTemp" /s /d -7 /c "cmd /c if @isdir==TRUE rd /s /q @path" 2>nul

Запускайте его через Планировщик заданий:

  1. Win+R → taskschd.msc → «Создать простую задачу».
  2. Триггер — ежедневно ночью или «При входе в систему».
  3. Действие — запуск программы, укажите путь к bat-файлу.

Файлы, которые прямо сейчас заняты 1С, Windows не удалит, скрипт их просто пропустит. Для серверного Temp задание стоит ставить на время, когда пользователей нет.

Если Temp вынесен на RAM-диск, учитывайте размер. Выгрузка большого отчёта или вложения на 2–3 ГБ на RAM-диске в 1 ГБ закончится ошибкой. Для бухгалтерии на 5–10 человек ориентир — не меньше 4 ГБ, на терминальном сервере больше.

Частые сбои после переноса и что с ними делать

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

Ещё один подводный камень — кириллица и пробелы в пути. Платформа с ними работает, но внешние компоненты, драйверы торгового оборудования и сторонние обработки иногда нет. Короткий латинский путь вида D:\1CTemp снимает этот вопрос заранее.

Можно ли указать папку временных файлов в настройках самой 1С?
Нет. В параметрах платформы и в списке баз такого поля нет, путь берётся только из переменных окружения TEMP и TMP.
Нужно ли менять обе переменные, TEMP и TMP?
Да. Разные компоненты Windows и программы читают разные переменные. Если поменять одну, часть файлов продолжит уходить в старое место.
Влияет ли перенос Temp на тонкий клиент и веб-клиент?
Тонкий клиент — да, он работает с локальным Temp так же, как толстый. Веб-клиент использует папки браузера, а серверную часть публикации обслуживает Temp веб-сервера или рабочих процессов 1С.
Что будет со старой папкой Temp после переноса?
Она останется на месте с накопленными файлами. После перезапуска 1С её содержимое можно удалить вручную, пропустив занятые файлы.