Почему зависает 1С при выводе на печать и как ускорить метод ПроверитьВывод() в RDP-сессии?

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

Каждый системный администратор и разработчик 1С рано или поздно сталкивается с ситуацией, когда после очередного обновления платформы или операционной системы на сервере пользователи начинают жаловаться на критическое замедление печати. Процесс формирования предварительного просмотра, нажатие кнопки «Печать» или вызов программного метода ПроверитьВывод() начинают занимать от 10 до 20 секунд. При этом на локальных компьютерах те же самые операции выполняются мгновенно.

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

Почему зависает именно метод ПроверитьВывод() и предварительный просмотр?

Для начала проанализируем физику процесса. Метод ПроверитьВывод() предназначен для того, чтобы определить, умещается ли табличный документ на страницу при заданных настройках печати. Платформа 1С не может выполнить эти расчеты абстрактно. Чтобы получить точные размеры областей, 1С отправляет прямой запрос к драйверу принтера, установленного в системе по умолчанию. Она считывает физические характеристики устройства: минимальные поля, поддерживаемый формат бумаги, разрешение печати и другие параметры.

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

Рассмотрим комплексные меры по устранению этой проблемы — от простых манипуляций в самой 1С до глубокой настройки операционной системы Windows Server.

Решение 1. Программная очистка кэша настроек печати в 1С

Очень часто платформа 1С сохраняет параметры печати для каждого макета и каждого пользователя индивидуально в системном хранилище. Если когда-то печать выполнялась на принтер, который сейчас физически отключен или удален, 1С будет упорно пытаться его опросить, вызывая длительные зависания. Очистки обычного кэша файлов на диске здесь недостаточно.

Мы рекомендуем выполнить полную очистку настроек печати с помощью встроенного языка 1С. Для этого мы можем запустить обработку со следующим кодом:


// Очищаем настройки конкретного пользователя
ИмяПользователяИБ = "ИвановИИ";
ОчиститьНастройкиПользователя(ИмяПользователяИБ);

// Альтернативный метод полной очистки системных настроек печати через ХранилищеСистемныхНастроек
КлючОбъекта = "Общее/НастройкиПечатиТабличныхДокументов";
ПользовательХ = "ИвановИИ";
ХранилищеСистемныхНастроек.Удалить(КлючОбъекта, , ПользовательХ);

Этот код позволяет полностью удалить «призрачные» принтеры из настроек пользователя 1С, заставляя платформу обратиться к текущим актуальным устройствам.

Решение 2. Отключение двустороннего обмена данными на локальных ПК

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

Проанализируем шаги для отключения этой опции:

  1. На локальном компьютере пользователя (не на сервере!) откройте «Панель управления», перейдите в раздел «Устройства и принтеры».
  2. Кликните правой кнопкой мыши на целевом принтере и выберите пункт «Свойства принтера» (важно: именно свойства принтера, а не настройки печати).
  3. Перейдите на вкладку «Порты».
  4. В нижней части окна найдите опцию «Разрешить двусторонний обмен данными» и снимите с нее галочку.
  5. Нажмите кнопку «Применить» и перезагрузите службу диспетчера печати на сервере или просто переподключите RDP-сессию.

После отключения этой функции драйвер перестанет отправлять лишние сетевые запросы, и скорость работы метода ПроверитьВывод() значительно вырастет.

Решение 3. Отказ от использования технологии Easy Print (TS Easy Print)

Технология Remote Desktop Easy Print призвана упростить жизнь администраторам, избавляя от необходимости устанавливать драйверы принтеров на сервер. Однако она упаковывает печатные задания в формат XML-бумаги (XPS), что вызывает колоссальные задержки при обработке сложных табличных документов 1С.

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

  1. Нажмите сочетание клавиш Win + R, введите команду gpedit.msc и нажмите Enter.
  2. В открывшемся редакторе перейдите по следующему пути: Конфигурация компьютера -> Административные шаблоны -> Компоненты Windows -> Службы удаленных рабочих столов -> Узел сеансов удаленных рабочих столов -> Перенаправление принтеров.
  3. Найдите политику с названием «Использовать в первую очередь драйвер принтера Easy Print удаленного рабочего стола».
  4. Дважды кликните по ней, установите значение «Отключено» (Disabled) и сохраните изменения.
  5. Установите «родные» (native) драйверы для принтеров ваших пользователей непосредственно на сервер (рекомендуется устанавливать как 32-битные, так и 64-битные версии драйверов для полной совместимости с клиентами 1С разной разрядности).

Решение 4. Избавление от WSD-портов на рабочих станциях

Если принтеры на локальных компьютерах ваших пользователей подключены с использованием портов автоматического обнаружения устройств WSD (Web Services for Devices), перенаправление таких принтеров в RDP-сессию гарантированно будет вызывать таймауты и задержки в 1С.

Для решения этой проблемы переведите локальные принтеры на классический протокол TCP/IP:

  1. На локальном компьютере в свойствах принтера перейдите на вкладку «Порты».
  2. Нажмите кнопку «Добавить порт», выберите тип «Standard TCP/IP Port».
  3. Введите IP-адрес принтера в локальной сети и завершите настройку.
  4. Удалите старый WSD-порт из системы.

Решение 5. Настройка «быстрого» виртуального принтера по умолчанию

Если по техническим причинам отказаться от перенаправления принтеров или Easy Print невозможно, мы можем применить проверенный обходной маневр, который кардинально решает проблему скорости работы интерфейса 1С.

Суть метода заключается в установке локального «быстрого» принтера по умолчанию внутри терминальной сессии:

  1. Установите на терминальном сервере любой виртуальный принтер, который не требует сетевой активности и работает локально (например, встроенный Microsoft XPS Document Writer или Microsoft Print to PDF).
  2. В сеансе пользователя назначьте этот принтер принтером по умолчанию.
  3. При вызове метода ПроверитьВывод() или формировании предпросмотра 1С мгновенно получит параметры от этого локального виртуального принтера. Зависания полностью исчезнут.
  4. Когда пользователю действительно понадобится распечатать документ на бумаге, он нажмет «Печать» и в открывшемся стандартном диалоговом окне Windows выберет свой перенаправленный физический принтер.

Решение 6. Оптимизация времени жизни процесса splwow64.exe

Если вы используете 32-битный клиент 1С на 64-битной операционной системе Windows Server, за трансляцию вызовов печати отвечает системный процесс splwow64.exe. Этот процесс имеет свойство зависать или блокировать дескрипторы принтеров на длительное время, из-за чего повторные обращения к печати начинают сильно тормозить.

Мы можем настроить принудительное быстрое завершение этого процесса через реестр Windows Server:

  1. Откройте редактор реестра (команда regedit).
  2. Перейдите к разделу: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print.
  3. Создайте новый параметр типа DWORD (32-бит) с именем SplWOW64TimeOutSeconds.
  4. Установите его значение равным 1 или 0 (по умолчанию Windows удерживает этот процесс активным в течение 120 секунд после завершения печати).
  5. Перезапустите сервер или службу диспетчера печати.

Решение 7. Очистка неактивных перенаправленных принтеров в реестре

При постоянном подключении и отключении пользователей по RDP в реестре сервера накапливается огромное количество записей о старых «призрачных» перенаправленных принтерах. Диспетчер печати пытается опросить их все, что парализует работу подсистемы печати.

Рекомендуется периодически очищать ветки реестра текущего пользователя на сервере. Проанализируем, где хранятся эти записи:

Рекомендуется удалить из этих разделов все неактуальные строковые параметры, содержащие в названии упоминание «redirected» или «перенаправлено» для неактивных сессий.

Решение 8. Использование сторонних решений для проброса печати

Если стандартные средства Windows Server не позволяют добиться желаемой стабильности и скорости работы, имеет смысл рассмотреть специализированное программное обеспечение для управления терминальной печатью, такое как TSPrint или ScrewDrivers.

Эти программы полностью заменяют стандартный механизм перенаправления RDP:

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

← На главную