Каждый системный администратор и разработчик 1С рано или поздно сталкивается с ситуацией, когда после очередного обновления платформы или операционной системы на сервере пользователи начинают жаловаться на критическое замедление печати. Процесс формирования предварительного просмотра, нажатие кнопки «Печать» или вызов программного метода ПроверитьВывод() начинают занимать от 10 до 20 секунд. При этом на локальных компьютерах те же самые операции выполняются мгновенно.
В этой статье мы подробно разберем природу данной проблемы, выясним, почему стандартные механизмы Windows Server в связке с 1С дают такие задержки, и рассмотрим пошаговые методы оптимизации и решения этой проблемы.
Для начала проанализируем физику процесса. Метод ПроверитьВывод() предназначен для того, чтобы определить, умещается ли табличный документ на страницу при заданных настройках печати. Платформа 1С не может выполнить эти расчеты абстрактно. Чтобы получить точные размеры областей, 1С отправляет прямой запрос к драйверу принтера, установленного в системе по умолчанию. Она считывает физические характеристики устройства: минимальные поля, поддерживаемый формат бумаги, разрешение печати и другие параметры.
Если работа происходит в терминальной сессии (RDP), принтером по умолчанию чаще всего назначается перенаправленный (проброшенный) принтер с локального компьютера пользователя. Из-за сетевых задержек, особенностей работы протокола RDP и тяжелых графических драйверов опрос параметров принтера через сеть превращается в длительный процесс с таймаутами. В этот момент рабочий процесс 1С зависает, ожидая ответа от службы диспетчера печати (Spooler), которая, в свою очередь, ждет ответа от удаленного клиента.
Рассмотрим комплексные меры по устранению этой проблемы — от простых манипуляций в самой 1С до глубокой настройки операционной системы Windows Server.
Очень часто платформа 1С сохраняет параметры печати для каждого макета и каждого пользователя индивидуально в системном хранилище. Если когда-то печать выполнялась на принтер, который сейчас физически отключен или удален, 1С будет упорно пытаться его опросить, вызывая длительные зависания. Очистки обычного кэша файлов на диске здесь недостаточно.
Мы рекомендуем выполнить полную очистку настроек печати с помощью встроенного языка 1С. Для этого мы можем запустить обработку со следующим кодом:
// Очищаем настройки конкретного пользователя
ИмяПользователяИБ = "ИвановИИ";
ОчиститьНастройкиПользователя(ИмяПользователяИБ);
// Альтернативный метод полной очистки системных настроек печати через ХранилищеСистемныхНастроек
КлючОбъекта = "Общее/НастройкиПечатиТабличныхДокументов";
ПользовательХ = "ИвановИИ";
ХранилищеСистемныхНастроек.Удалить(КлючОбъекта, , ПользовательХ);
Этот код позволяет полностью удалить «призрачные» принтеры из настроек пользователя 1С, заставляя платформу обратиться к текущим актуальным устройствам.
Одной из неочевидных причин зависания печати по RDP является функция двустороннего обмена данными (bidirectional communication). По умолчанию драйвер принтера пытается в реальном времени запрашивать у физического принтера его состояние (наличие бумаги, уровень тонера, открытые крышки) прямо во время генерации макета в 1С.
Проанализируем шаги для отключения этой опции:
После отключения этой функции драйвер перестанет отправлять лишние сетевые запросы, и скорость работы метода ПроверитьВывод() значительно вырастет.
Технология Remote Desktop Easy Print призвана упростить жизнь администраторам, избавляя от необходимости устанавливать драйверы принтеров на сервер. Однако она упаковывает печатные задания в формат XML-бумаги (XPS), что вызывает колоссальные задержки при обработке сложных табличных документов 1С.
Выясним, как отключить приоритет Easy Print через групповые политики Windows Server:
gpedit.msc и нажмите Enter.Если принтеры на локальных компьютерах ваших пользователей подключены с использованием портов автоматического обнаружения устройств WSD (Web Services for Devices), перенаправление таких принтеров в RDP-сессию гарантированно будет вызывать таймауты и задержки в 1С.
Для решения этой проблемы переведите локальные принтеры на классический протокол TCP/IP:
Если по техническим причинам отказаться от перенаправления принтеров или Easy Print невозможно, мы можем применить проверенный обходной маневр, который кардинально решает проблему скорости работы интерфейса 1С.
Суть метода заключается в установке локального «быстрого» принтера по умолчанию внутри терминальной сессии:
ПроверитьВывод() или формировании предпросмотра 1С мгновенно получит параметры от этого локального виртуального принтера. Зависания полностью исчезнут.Если вы используете 32-битный клиент 1С на 64-битной операционной системе Windows Server, за трансляцию вызовов печати отвечает системный процесс splwow64.exe. Этот процесс имеет свойство зависать или блокировать дескрипторы принтеров на длительное время, из-за чего повторные обращения к печати начинают сильно тормозить.
Мы можем настроить принудительное быстрое завершение этого процесса через реестр Windows Server:
regedit).HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print.SplWOW64TimeOutSeconds.1 или 0 (по умолчанию Windows удерживает этот процесс активным в течение 120 секунд после завершения печати).При постоянном подключении и отключении пользователей по RDP в реестре сервера накапливается огромное количество записей о старых «призрачных» перенаправленных принтерах. Диспетчер печати пытается опросить их все, что парализует работу подсистемы печати.
Рекомендуется периодически очищать ветки реестра текущего пользователя на сервере. Проанализируем, где хранятся эти записи:
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\DevicesHKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\PrinterPortsРекомендуется удалить из этих разделов все неактуальные строковые параметры, содержащие в названии упоминание «redirected» или «перенаправлено» для неактивных сессий.
Если стандартные средства Windows Server не позволяют добиться желаемой стабильности и скорости работы, имеет смысл рассмотреть специализированное программное обеспечение для управления терминальной печатью, такое как TSPrint или ScrewDrivers.
Эти программы полностью заменяют стандартный механизм перенаправления RDP:
ПроверитьВывод(), а сама печать отправляется на клиент по выделенному оптимизированному каналу.Применение одного или нескольких описанных выше методов гарантированно решит проблему с зависанием предварительного просмотра и ускорит работу подсистемы печати 1С в терминальной среде до первоначального уровня. Для устранения других системных сбоев и типовых настроек серверов пригодится структурированная справка по администрированию Windows и 1С.