Почему 1С зависает при попытке печати в терминальном режиме и как это исправить

Системный администратор 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

Ситуация, когда 1С «намертво» зависает при попытке отправить документ на печать, особенно в терминальной среде Windows Server 2008 или 2012, является классической проблемой для системных администраторов. Часто это происходит внезапно, даже если настройки не менялись. Проблема носит комплексный характер: она может быть вызвана как сбоем в работе службы печати Windows (Print Spooler), так и некорректным поведением драйверов или накоплением ошибок в кэше 1С. Разберем по шагам, как диагностировать и устранить эту неисправность.

Шаг 1. Перезагрузка и очистка службы диспетчера печати

Первым делом проанализируем состояние службы печати. Если перезапуск Диспетчера печати (Spooler) временно «оживляет» 1С, но при следующей печати всё повторяется, значит, в очереди печати или в рабочих папках службы накопились поврежденные временные файлы. Рассмотрим алгоритм глубокой очистки:

  1. Остановим службу «Диспетчер печати» через консоль services.msc.
  2. Перейдем в системную папку C:\Windows\System32\spool\PRINTERS.
  3. Удалим все содержимое этой папки. Эти файлы — это временные данные очереди печати, которые могли заблокировать работу службы.
  4. Снова запустим службу.

Если после этого проблема не ушла, значит, причина кроется глубже — в драйверах или настройках взаимодействия 1С с принтерами.

Шаг 2. Очистка кэша 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"

Важно: используйте этот скрипт с осторожностью и под контролем администратора, так как он ищет папки по маске во всех профилях пользователей.

Шаг 3. Настройка изоляции драйверов и Easy Print

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

  1. Проверим, включена ли изоляция драйверов принтеров. Это позволяет запускать драйвер в отдельном процессе, чтобы сбой в нем не «вешал» всю службу печати.
  2. Если используется Windows Server 2008, помните, что технология Easy Print там работает нестабильно. В таких случаях лучше установить «родной» драйвер принтера непосредственно на сервер.

Шаг 4. Устранение проблем с процессом Splwow64.exe

Выясним причину зависания на уровне 64-битных систем. Поскольку 1С чаще всего является 32-битным приложением, для печати на 64-битном сервере используется процесс-посредник splwow64.exe. Если он «зависает», печать блокируется для всех пользователей.

Мы можем уменьшить время ожидания этого процесса через реестр. Это заставит систему быстрее перезапускать зависший обработчик печати:

  1. Откройте regedit.
  2. Перейдите в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print.
  3. Найдите или создайте параметр Splwow64TimeOutSeconds (тип DWORD) и установите значение 60 (или меньше).

Шаг 5. Отключение двусторонней связи

Многие современные принтеры (HP, Kyocera, Samsung) пытаются обмениваться данными с сервером (опрашивать уровень тонера или наличие бумаги). В терминальной сессии этот опрос часто приводит к «замиранию» 1С. Рассмотрим, как это отключить:

  1. Зайдем в «Устройства и принтеры» на сервере.
  2. Откроем «Свойства принтера» (не «Настройка печати»!).
  3. Перейдем на вкладку Порты.
  4. Снимем галочку Разрешить двусторонний обмен данными.

Шаг 6. Очистка временных папок (Temp)

Проанализируем ситуацию с временными файлами. 1С перед печатью создает временные файлы в папке C:\Windows\Temp или %Temp% пользователя. Существует ограничение файловой системы: если в папке накопилось более 65 000 файлов, создание нового файла становится крайне медленным или невозможным, что вызывает зависание.

Рекомендация: регулярно очищайте содержимое всех папок Temp на сервере. Это не только ускорит печать, но и повысит общую стабильность системы.

Шаг 7. Удаление «мертвых» сетевых принтеров

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

Подводя итог, можно сказать, что в большинстве случаев проблема решается комбинацией очистки кэша 1С и отключения двустороннего обмена данными в настройках принтера. Если зависания продолжаются, следует обратить внимание на конкретную модель драйвера (особенно если это HP Universal Print Driver) и попробовать заменить его на более простую или старую версию драйвера (PCL5 вместо PCL6).

← На главную