Как настроить стабильную печать из 1С в терминальном режиме на принтерах Canon CAPT и HP

Системный администратор IT и автоматизация бизнеса
← На главную

При работе пользователей в среде удаленных рабочих столов (RDP) системные администраторы регулярно сталкиваются с ситуацией, когда локально подключенные принтеры (в особенности популярные модели Canon LBP2900, LBP1120, LBP810, а также младшие линейки HP LaserJet 1018, 1020, P1005, P1102) отказываются печатать из терминальной сессии 1С. Задания могут бесследно исчезать из очереди, вызывать аварийное завершение службы диспетчера очереди печати (spoolsv.exe) или приводить к полному зависанию сеанса 1С. Разберем по шагам причины такого поведения оборудования и рассмотрим проверенные технические способы решения проблемы.

Выясним причину: архитектурные особенности принтеров Host-Based (CAPT/GDI)

Проанализируем природу возникновения ошибки. Большинство недорогих офисных принтеров относятся к категории так называемых Win-принтеров (Host-Based). Устройства Canon с технологией CAPT (Canon Advanced Printing Technology) не имеют собственного процессора растрирования и не поддерживают стандартные аппаратно интерпретируемые языки управления печатью, такие как PCL или PostScript.

Вся нагрузка по формированию растрового изображения возлагается на драйвер и центральный процессор клиентского компьютера. В момент печати драйвер выполняет постоянный низкоуровневый опрос состояния физического USB-порта. Когда такое устройство перенаправляется в терминальный сеанс через виртуальный порт TSxxx, нарушаются системные тайминги и механизм двусторонней связи. Это приводит к блокировке потоков печати и падению сессий.

Решение 1. Тонкая настройка свойств драйвера и отключение фоновых утилит

Если принтер подключен напрямую к клиентскому ПК по USB и маппится в сессию, выполним базовую оптимизацию драйвера на клиенте и сервере:

  1. Откроем свойства проблемного принтера и перейдем на вкладку «Порты».
  2. Снимем флажок «Разрешить двусторонний обмен данными» (Enable bidirectional support). Это предотвратит попытки драйвера непрерывно опрашивать порт через виртуальный RDP-канал.
  3. Перейдем на вкладку «Дополнительно», нажмем кнопку «Обработчик печати» и убедимся, что в качестве типа данных по умолчанию выбран RAW, а не EMF.
  4. Отключим всплывающие служебные окна мониторинга Canon (Status Window). Для этого в каталоге с установленным драйвером найдем исполняемые файлы графических утилит (например, Cnab4rpk.exe, cap3lak.exe или cap3swk.exe) и подменим их пустыми текстовыми файлами нулевого размера с идентичным именем и расширением .exe.

Решение 2. Корректировка параметров DEP и правка реестра для портов DOT4

Драйверы старых моделей Canon и HP могут вызывать срабатывание механизма предотвращения выполнения данных (DEP) в Windows при обработке очередей терминального клиента, что приводит к внезапному закрытию сеанса 1С. Рассмотрим, как устранить конфликт:

  1. На клиентской машине добавим исполняемый файл клиента удаленного рабочего стола (mstsc.exe) в список исключений DEP либо отключим контроль выполнения данных в системной конфигурации.
  2. Для корректного перенаправления принтеров, использующих виртуальные порты DOT4, применим специальную настройку реестра на клиентском компьютере. Для этого выполним следующий скрипт VBS:

Set WshShell = WScript.CreateObject("WScript.Shell")
keypath = "HKCU\Software\Microsoft\Terminal Server Client\Default\AddIns\RDPDR\FilterQueueType"
WshShell.RegWrite keypath, -1, "REG_DWORD"
If WshShell.RegRead(keypath) = "-1" Then
    MsgBox "Параметр FilterQueueType успешно установлен", vbInformation, "Успех"
Else
    MsgBox "Не удалось записать значение в реестр", vbCritical, "Ошибка"
End If

Решение 3. Использование технологии Remote Desktop Easy Print

Начиная с Windows Server 2008, наиболее универсальным штатным решением является использование механизма Remote Desktop Easy Print. Этот подход исключает необходимость установки сторонних драйверов производителей непосредственно на терминальный сервер, преобразуя задания печати в формат XPS перед отправкой на клиентскую машину.

Для корректной работы технологии выполним следующие требования:

  1. На клиентских рабочих станциях установим пакет Microsoft .NET Framework 3.5 SP1 (или выше) и обновим клиент RDP до актуальной версии.
  2. В редакторе локальной групповой политики сервера (gpedit.msc) перейдем по пути: Конфигурация компьютера -> Административные шаблоны -> Компоненты Windows -> Службы удаленных рабочих столов -> Узел сеансов удаленных рабочих столов -> Перенаправление принтеров.
  3. Включим политику «Использовать в первую очередь драйвер принтера Easy Print для удаленных рабочих столов».
  4. Включим политику «Перенаправлять только стандартный принтер клиента», чтобы исключить засорение подсистемы печати неиспользуемыми виртуальными портами при входе пользователей.

Решение 4. Изоляция драйверов печати и очистка очереди

Если на сервере вынужденно установлены «родные» драйверы от производителей оборудования, настроим изоляцию процессов, чтобы сбой в коде стороннего драйвера не приводил к падению службы spoolsv.exe у всех активных пользователей:

  1. Запустим консоль управления печатью printmanagement.msc.
  2. В разделе «Драйверы» выделим все используемые драйверы принтеров, вызовем контекстное меню и установим режим «Задать изоляцию драйверов» -> «Изолированный» (Isolated). В этом случае каждый драйвер будет выполняться в отдельном системном процессе PrintIsolationHost.exe.
  3. Если служба печати зависла, выполним аварийную очистку очереди на сервере: остановим службу Диспетчер печати, удалим все временные файлы *.shd и *.spl из каталога C:\Windows\System32\spool\PRINTERS\, после чего перезапустим службу.

Решение 5. Сброс настроек печати и решение проблем со смещением страниц в 1С

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

  1. Для 1С:Предприятия 7.7 очистим сохраненные настройки печати в системном реестре пользователя в ветке:
    HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\<ИмяКонфигурации>\V7 Print.
  2. Для 1С:Предприятия 8 выполним сброс кэша пользовательских настроек отчетов и печатных форм (удаление файлов настроек в каталогах AppData\Local\1C\1cv8 и AppData\Roaming\1C\1cv8).
  3. В окне предварительного просмотра печатной формы в 1С откроем «Параметры страницы» и проверим масштабирование: установим переключатель в положение «По ширине листа» либо вручную скорректируем поля страницы.
  4. При завершении работы с 1С 7.7 в режиме отдельного запуска приложения убедимся, что сеанс корректно освобождает ресурсы принтера. Для этого можно использовать запуск через пакетный файл с гарантированным завершением сессии:

@echo off
start /wait "" "C:\Program Files (x86)\1Cv77\BIN\1cv7s.exe" enterprise /D"C:\Bases\Trade"
logoff.exe

Решение 6. Организация печати через сетевые протоколы и принт-серверы

Для крупных распределенных офисов наиболее отказоустойчивым вариантом является полный отказ от RDP-перенаправления портов в пользу сетевой архитектуры:

  1. Подключение через LPR/RAW-порты: настроим на клиентском ПК локальную службу печати TCP/IP (LPD) и подключим принтер на сервере как стандартный сетевой через протокол LPR или прямой IP-адрес через VPN-канал.
  2. Использование внешних аппаратных принт-серверов: подключение USB-устройств к роутерам или принт-серверам с поддержкой протоколов RAW/LPR (порт 9100/515) полностью исключает зависимость от сеанса конкретного пользователя.
  3. Схема фоновой печати через PDF: формирование табличных документов 1С в файл формата PDF с последующей передачей во входящий каталог клиента (\\tsclient\C\Spool) и автоматической печатью средствами локального PDF-обработчика.
← На главную