Перенос папки Temp для 1С:Предприятия: ярлык, переменные, сервер
Содержание
Отдельной настройки «папка временных файлов» в 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-файле и из него запустить платформу.
- Создайте папку, например
D:\1CTemp. - Откройте Блокнот и вставьте текст:
@echo off
set "TEMP=D:\1CTemp"
set "TMP=D:\1CTemp"
start "" "C:\Program Files\1cv8\common\1cestart.exe"
- Сохраните как
D:\1CTemp\start1c.bat. В Блокноте выберите тип «Все файлы», иначе получитсяstart1c.bat.txt. - Щёлкните по bat-файлу правой кнопкой →
Отправить → Рабочий стол (создать ярлык). - В свойствах ярлыка на вкладке «Ярлык» выберите в поле «Окно» значение «Свёрнутое в значок», чтобы не мелькала консоль. Кнопкой «Сменить значок» укажите
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
Если нужно перенести временные файлы для всех программ пользователя, меняйте сами переменные.
Через окно «Переменные среды»
- Нажмите
Win+R, введитеrundll32 sysdm.cpl,EditEnvironmentVariablesи нажмите Enter. Откроется окно переменных текущего пользователя. - В верхнем блоке «Переменные среды пользователя» выделите
TEMP→ «Изменить» → укажитеD:\Temp. - То же самое сделайте для
TMP. - Нажмите «ОК» и выйдите из системы, затем войдите снова.
Нижний блок «Системные переменные» задаёт значения для всей машины, но пользовательские 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\Environment | TEMP, TMP |
| Вся машина | HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment | TEMP, 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 в её разделе реестра. Это не трогает других пользователей сервера.
- Узнайте точное имя службы:
services.msc→ свойства агента 1С → поле «Имя службы». Обычно это1C:Enterprise 8.3 Server Agent (x86-64). - Откройте
regeditи перейдите вHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<имя службы>. - Создайте мультистроковый параметр (
REG_MULTI_SZ) с именемEnvironment. - Впишите в него две строки:
TEMP=E:\1CServerTemp
TMP=E:\1CServerTemp
- Выдайте учётной записи
USR1CV8право «Изменение» на папкуE:\1CServerTemp. - Перезапустите службу агента.
Рабочие процессы запускаются агентом и наследуют его окружение, поэтому новый путь получают и 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 рабочего процесса на сервере.
Обслуживание новой папки: очистка по расписанию
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
Запускайте его через Планировщик заданий:
Win+R→taskschd.msc→ «Создать простую задачу».- Триггер — ежедневно ночью или «При входе в систему».
- Действие — запуск программы, укажите путь к bat-файлу.
Файлы, которые прямо сейчас заняты 1С, Windows не удалит, скрипт их просто пропустит. Для серверного Temp задание стоит ставить на время, когда пользователей нет.
Если Temp вынесен на RAM-диск, учитывайте размер. Выгрузка большого отчёта или вложения на 2–3 ГБ на RAM-диске в 1 ГБ закончится ошибкой. Для бухгалтерии на 5–10 человек ориентир — не меньше 4 ГБ, на терминальном сервере больше.
Частые сбои после переноса и что с ними делать
Ещё один подводный камень — кириллица и пробелы в пути. Платформа с ними работает, но внешние компоненты, драйверы торгового оборудования и сторонние обработки иногда нет. Короткий латинский путь вида D:\1CTemp снимает этот вопрос заранее.