Ситуация, когда 1С «намертво» зависает при попытке отправить документ на печать, особенно в терминальной среде Windows Server 2008 или 2012, является классической проблемой для системных администраторов. Часто это происходит внезапно, даже если настройки не менялись. Проблема носит комплексный характер: она может быть вызвана как сбоем в работе службы печати Windows (Print Spooler), так и некорректным поведением драйверов или накоплением ошибок в кэше 1С. Разберем по шагам, как диагностировать и устранить эту неисправность.
Первым делом проанализируем состояние службы печати. Если перезапуск Диспетчера печати (Spooler) временно «оживляет» 1С, но при следующей печати всё повторяется, значит, в очереди печати или в рабочих папках службы накопились поврежденные временные файлы. Рассмотрим алгоритм глубокой очистки:
services.msc.C:\Windows\System32\spool\PRINTERS.Если после этого проблема не ушла, значит, причина кроется глубже — в драйверах или настройках взаимодействия 1С с принтерами.
Часто 1С хранит настройки принтеров (поля, ориентацию, выбранное устройство) в пользовательском кэше. Если эти данные повреждены, программа зависает при попытке считать параметры страницы. Для решения проблемы необходимо очистить кэш у всех пользователей терминала. Разберем, как сделать это эффективно.
В папках %AppData%\Roaming\1C и %AppData%\Local\1C хранятся папки с именами в формате GUID (например, ????????-????-????-????-????????????). Их удаление сбросит настройки интерфейса и принтеров, не затрагивая сами данные базы.
Рассмотрим пример скрипта (bat-файла), который автоматизирует этот процесс для всех профилей на сервере:
@echo off
cd /d "%userprofile%\.."
FOR /F "usebackq delims==" %%i IN (`dir /b /s ????????-????-????-????-????????????`) do echo "%%i"
pause
REM После проверки списка удаляемых папок, раскомментируйте строку ниже:
REM FOR /F "usebackq delims==" %%i IN (`dir /b /s ????????-????-????-????-????????????`) do RD /S/Q "%%i"
Важно: используйте этот скрипт с осторожностью и под контролем администратора, так как он ищет папки по маске во всех профилях пользователей.
Проанализируем технологию Easy Print. В Windows Server она позволяет печатать через универсальный драйвер, но часто вызывает задержки и зависания. Попробуем изменить подход:
Выясним причину зависания на уровне 64-битных систем. Поскольку 1С чаще всего является 32-битным приложением, для печати на 64-битном сервере используется процесс-посредник splwow64.exe. Если он «зависает», печать блокируется для всех пользователей.
Мы можем уменьшить время ожидания этого процесса через реестр. Это заставит систему быстрее перезапускать зависший обработчик печати:
regedit.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print.Splwow64TimeOutSeconds (тип DWORD) и установите значение 60 (или меньше).Многие современные принтеры (HP, Kyocera, Samsung) пытаются обмениваться данными с сервером (опрашивать уровень тонера или наличие бумаги). В терминальной сессии этот опрос часто приводит к «замиранию» 1С. Рассмотрим, как это отключить:
Проанализируем ситуацию с временными файлами. 1С перед печатью создает временные файлы в папке C:\Windows\Temp или %Temp% пользователя. Существует ограничение файловой системы: если в папке накопилось более 65 000 файлов, создание нового файла становится крайне медленным или невозможным, что вызывает зависание.
Рекомендация: регулярно очищайте содержимое всех папок Temp на сервере. Это не только ускорит печать, но и повысит общую стабильность системы.
Выясним, нет ли в списке принтеров у пользователей недоступных сетевых ресурсов. Если 1С при открытии диалога печати пытается опросить принтер, который выключен или находится в недоступной подсети, программа будет ждать ответа от драйвера (таймаут может длиться до 60 секунд). Удалите все неиспользуемые принтеры из профилей пользователей, чтобы исключить эти задержки.
Подводя итог, можно сказать, что в большинстве случаев проблема решается комбинацией очистки кэша 1С и отключения двустороннего обмена данными в настройках принтера. Если зависания продолжаются, следует обратить внимание на конкретную модель драйвера (особенно если это HP Universal Print Driver) и попробовать заменить его на более простую или старую версию драйвера (PCL5 вместо PCL6).