При работе пользователей в среде удаленных рабочих столов (RDP) системные администраторы регулярно сталкиваются с ситуацией, когда локально подключенные принтеры (в особенности популярные модели Canon LBP2900, LBP1120, LBP810, а также младшие линейки HP LaserJet 1018, 1020, P1005, P1102) отказываются печатать из терминальной сессии 1С. Задания могут бесследно исчезать из очереди, вызывать аварийное завершение службы диспетчера очереди печати (spoolsv.exe) или приводить к полному зависанию сеанса 1С. Разберем по шагам причины такого поведения оборудования и рассмотрим проверенные технические способы решения проблемы.
Проанализируем природу возникновения ошибки. Большинство недорогих офисных принтеров относятся к категории так называемых Win-принтеров (Host-Based). Устройства Canon с технологией CAPT (Canon Advanced Printing Technology) не имеют собственного процессора растрирования и не поддерживают стандартные аппаратно интерпретируемые языки управления печатью, такие как PCL или PostScript.
Вся нагрузка по формированию растрового изображения возлагается на драйвер и центральный процессор клиентского компьютера. В момент печати драйвер выполняет постоянный низкоуровневый опрос состояния физического USB-порта. Когда такое устройство перенаправляется в терминальный сеанс через виртуальный порт TSxxx, нарушаются системные тайминги и механизм двусторонней связи. Это приводит к блокировке потоков печати и падению сессий.
Если принтер подключен напрямую к клиентскому ПК по USB и маппится в сессию, выполним базовую оптимизацию драйвера на клиенте и сервере:
RAW, а не EMF.Cnab4rpk.exe, cap3lak.exe или cap3swk.exe) и подменим их пустыми текстовыми файлами нулевого размера с идентичным именем и расширением .exe.Драйверы старых моделей Canon и HP могут вызывать срабатывание механизма предотвращения выполнения данных (DEP) в Windows при обработке очередей терминального клиента, что приводит к внезапному закрытию сеанса 1С. Рассмотрим, как устранить конфликт:
mstsc.exe) в список исключений DEP либо отключим контроль выполнения данных в системной конфигурации.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
Начиная с Windows Server 2008, наиболее универсальным штатным решением является использование механизма Remote Desktop Easy Print. Этот подход исключает необходимость установки сторонних драйверов производителей непосредственно на терминальный сервер, преобразуя задания печати в формат XPS перед отправкой на клиентскую машину.
Для корректной работы технологии выполним следующие требования:
Microsoft .NET Framework 3.5 SP1 (или выше) и обновим клиент RDP до актуальной версии.gpedit.msc) перейдем по пути: Конфигурация компьютера -> Административные шаблоны -> Компоненты Windows -> Службы удаленных рабочих столов -> Узел сеансов удаленных рабочих столов -> Перенаправление принтеров.Если на сервере вынужденно установлены «родные» драйверы от производителей оборудования, настроим изоляцию процессов, чтобы сбой в коде стороннего драйвера не приводил к падению службы spoolsv.exe у всех активных пользователей:
printmanagement.msc.PrintIsolationHost.exe.*.shd и *.spl из каталога C:\Windows\System32\spool\PRINTERS\, после чего перезапустим службу.Проанализируем ситуацию, когда при выводе расчетных листков или отчетов из 1С текст некорректно делится пополам или выводится за пределы печатной области. Платформа 1С индивидуально сохраняет параметры печати табличных документов для каждого пользователя. При замене оборудования или смене драйвера старые координаты накладываются на новую область печати.
HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\<ИмяКонфигурации>\V7 Print.AppData\Local\1C\1cv8 и AppData\Roaming\1C\1cv8).
@echo off
start /wait "" "C:\Program Files (x86)\1Cv77\BIN\1cv7s.exe" enterprise /D"C:\Bases\Trade"
logoff.exe
Для крупных распределенных офисов наиболее отказоустойчивым вариантом является полный отказ от RDP-перенаправления портов в пользу сетевой архитектуры:
LPR или прямой IP-адрес через VPN-канал.\\tsclient\C\Spool) и автоматической печатью средствами локального PDF-обработчика.