При переходе на новую версию операционной системы (например, с Windows Server 2008 на Windows Server 2012) пользователи часто сталкиваются со значительным замедлением печати чеков на фискальных регистраторах (например, АТОЛ 22Ф) в терминальной сессии Remote Desktop Protocol (RDP). Замер производительности в 1С показывает, что основные задержки происходят во время выполнения команд драйвера, таких как объект.драйвер.открытьчек() и объект.драйвер.закрытьчек(). Выясним причины возникновения такой проблемы и разберем по шагам варианты ее решения.
Проанализируем техническую сторону работы оборудования через удаленный рабочий стол. При пробитии чека платформа 1С последовательно вызывает десятки команд драйвера ККТ. Если касса подключена к локальному компьютеру по последовательному порту (COM или эмуляции USB-COM) и перенаправлена на терминальный сервер средствами RDP, вызовы выполняются синхронно:
Даже при небольшом сетевом пинге (RTT) суммарное время выполнения цепочки вызовов увеличивается в десятки раз. Начиная с Windows Server 2012, подсистема виртуальных каналов RDP (RDPDR) работает иначе с временными задержками и пакетами, что при нестабильном или асинхронном интернет-канале приводит к зависанию потока ввода-вывода виртуального COM-порта.
Наиболее эффективным решением является исключение механизмов проброса последовательных портов RDP и организация прямого сетевого взаимодействия с фискальным регистратором.
Установим драйвер ККТ непосредственно на локальный рабочий ПК кассира и запустим службу сетевого вещания. 1С, работая на удаленном сервере, сможет обращаться к кассе по сетевому протоколу HTTP (JSON API) или через службу драйвера напрямую по IP-адресу локальной машины, полностью минуя стандартный проброс портов mstsc.exe.
Создадим единую частную сеть (VPN) между терминальным сервером и локальной сетью кассового места (с помощью программных средств или роутеров). В таком случае оборудование становится доступно по прямому IP-адресу в сети.
Если изменить архитектуру подключения ККТ не представляется возможным, оптимизируем работу самого терминального соединения.
Убедимся, что на локальных рабочих станциях установлены актуальные обновления RDP-клиента. Обновление протокола RDP повышает стабильность виртуальных каналов перенаправления ресурсов.
По умолчанию в Windows Server 2012 используется гибридный режим TCP/UDP. На нестабильных каналах связи потери UDP-пакетов вызывают задержки виртуального COM-порта. Для отключения UDP на стороне клиента или через групповые политики найдем и активируем параметр fClientDisableUDP или политику «Отключить UDP на клиенте».
В реестре терминального сервера перейдем в ветку:
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
Создадим параметр типа DWORD с именем DisableTaskOffload и присвоим ему значение 1. Это устраняет аппаратные сбои при обработке трафика перенаправленных ресурсов.
Посмотрим на локальные настройки порта и оборудования:
В диспетчере устройств локального ПК откроем свойства используемого COM-порта или корневого USB-концентратора. На вкладке «Управление электропитанием» снимем галочку «Разрешить отключение этого устройства для экономии энергии».
Установим свежие официальные драйверы оборудования АТОЛ как на локальном ПК, так и на терминальном сервере. Современные версии драйверов содержат оптимизированные алгоритмы взаимодействия с онлайн-кассами.