Как решить проблему с периодической потерей связи с кассой при работе через RDP в 1С?

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

Работа торгового оборудования в терминальном режиме — одна из самых наболевших тем для системных администраторов и специалистов по автоматизации 1С. Сценарий, когда касса подключена к локальному компьютеру торговой точки, а сама 1С запущена на удаленном сервере через RDP (Remote Desktop Protocol), часто сопровождается внезапными «отвалами» оборудования. В самый неподходящий момент, прямо во время обслуживания покупателя, касса перестает отвечать, а на сервере порт становится недоступен, хотя локально на ПК драйвер ККТ успешно проходит все проверки.

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

Выясняем причину: почему проброс портов RDP работает нестабильно?

Стандартный механизм проброса (маппинга) последовательных портов в клиенте mstsc.exe изначально создавался для низкоскоростных устройств и крайне чувствителен к качеству сетевого соединения. Рассмотрим подробнее, что происходит при обмене данными между сервером 1С и кассовым аппаратом:

  1. Каждое действие (печать строки чека, отправка команды фискализации, запрос статуса ККТ) порождает множество мелких пакетов данных.
  2. Протокол RDP упаковывает эти данные в виртуальный канал последовательного порта и отправляет их по сети.
  3. При возникновении даже секундного микроразрыва или потери пакетов в локальной сети (или интернет-канале) RDP-сессия мгновенно переподключается. Для пользователя это может выглядеть как секундное замирание экрана.
  4. Однако служба перенаправления портов RDP (RDP Port Redirection) не успевает отработать это переподключение корректно. Старый виртуальный порт на сервере зависает в режиме «зомби» (операционная система сервера считает его занятым), а новый порт просто не создается.

В результате мы получаем ситуацию: локально на кассовом компьютере связь с ККТ идеальная, но внутри сессии 1С порт наглухо заблокирован. Помогает только полное завершение сеанса пользователя (разлогинивание) и повторный вход, что сильно тормозит работу торговой точки.

Решение 1. Переход на Тонкий клиент 1С (Рекомендуемый способ)

Самый надежный способ раз и навсегда решить проблему с пробросом портов через RDP — это полностью отказаться от терминального доступа для кассовой зоны и перейти на использование тонкого клиента 1С.

Рассмотрим по шагам преимущества и логику этого решения:

При работе через тонкий клиент сама платформа 1С запускается локально на компьютере кассира. Она обменивается с сервером только бизнес-данными по протоколам HTTP или HTTPS, которые не боятся микроразрывов связи и не требуют удержания постоянного потокового соединения. При этом драйвер ККТ устанавливается локально, и 1С обращается к физическому COM-порту напрямую, минуя любые посреднические протоколы проброса. База данных и вся тяжелая логика при этом остаются работать на сервере.

Для реализации этого метода выполним следующие действия:

  1. Опубликуем информационную базу 1С на веб-сервере (IIS или Apache), который развернут на стороне сервера 1С.
  2. Установим на локальный компьютер кассира дистрибутив «Тонкий клиент 1С» той же версии, что и платформа на сервере.
  3. Добавим базу в список информационных баз на локальном ПК, указав ссылку на опубликованный веб-сервер (например, http://server_address/db_name).
  4. Установим драйвер кассы (например, ДККТ АТОЛ или Штрих-М) непосредственно на локальный компьютер кассира и настроим подключение в локально запущенной 1С.

Этот шаг полностью исключает прослойку RDP из процесса печати чеков и гарантирует стабильную работу оборудования даже при нестабильном интернет-канале.

Решение 2. Настройка энергосбережения USB-портов на локальном ПК

Часто виновником обрыва связи становится сама операционная система Windows на локальном компьютере, к которому физически подключена касса. По умолчанию в Windows включена агрессивная политика экономии энергии.

Выясним, как это влияет на работу: если касса простаивает без печати чеков хотя бы 10–15 минут, операционная система считает USB-порт неактивным и временно отключает на него подачу питания (функция USB Selective Suspend). Виртуальный COM-порт исчезает из системы. Когда кассир в 1С пытается пробить новый чек, система пытается «разбудить» порт, но RDP-клиент уже потерял дескриптор устройства и не может восстановить проброс без перезапуска сессии.

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

  1. Откроем «Диспетчер устройств» на локальном компьютере кассира.
  2. Развернем ветку «Контроллеры USB».
  3. Для каждого элемента с названиями «Корневой USB-концентратор» (USB Root Hub) и «Generic USB Hub» выполним следующие действия:
    • Нажмем правой кнопкой мыши и выберем «Свойства».
    • Перейдем на вкладку «Управление электропитанием».
    • Снимем галочку с пункта «Разрешить отключение этого устройства для экономии энергии».
    • Нажмем «ОК» для сохранения изменений.
  4. Откроем «Панель управления» -> «Электропитание» -> «Настройка схемы электропитания» -> «Изменить дополнительные параметры питания».
  5. Найдем раздел «Параметры USB» -> «Параметр временного отключения USB-порта» и переведем его в состояние «Запрещено».

После выполнения этих настроек Windows перестанет принудительно отключать питание кассового аппарата.

Решение 3. Тонкая настройка таймаутов KeepAlive на сервере RDP

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

Для этого мы можем настроить отправку специальных проверочных пакетов (KeepAlive), которые будут поддерживать RDP-сессию в активном состоянии и быстро перезапускать зависшие виртуальные каналы при кратковременном обрыве связи.

Разберем процесс внесения изменений в системный реестр сервера. Откроем редактор реестра regedit от имени администратора и перейдем по следующему пути:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server

Создадим или изменим следующие параметры типа DWORD (32 бита):


Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]
"KeepAliveEnable"=dword:00000001
"KeepAliveInterval"=dword:00000001

Параметр KeepAliveEnable со значением 1 включает механизм проверки активности сессий. Параметр KeepAliveInterval со значением 1 задает интервал проверки в одну минуту. Если связь кратковременно прервется, сервер не будет держать старый порт заблокированным часами, а быстро очистит зависшие сеансы и позволит RDP-клиенту переинициализировать проброшенные порты при автоматическом переподключении.

Также на локальном компьютере кассира можно запустить бесконечный фоновый пинг до сервера, чтобы сетевое оборудование (роутеры, межсетевые экраны) не закрывало неактивную сессию по таймауту NAT. Для этого в командной строке выполним команду:

ping -t ip_адрес_сервера

Решение 4. Подключение ККТ по TCP/IP через VPN (Прямое сетевое подключение)

Современные онлайн-кассы ведущих производителей (АТОЛ, Штрих-М) давно ушли от ограничений физического COM-порта и поддерживают полноценную работу по сетевым протоколам (через кабель Ethernet или встроенный Wi-Fi-модуль).

Если мы настроим работу ККТ по протоколу TCP/IP, нам больше вообще не потребуется пробрасывать порты средствами RDP. 1С на сервере будет обращаться к кассе напрямую по IP-адресу.

Рассмотрим по шагам схему организации такого подключения:

  1. Подключим кассу к локальной сети магазина с помощью LAN-кабеля или Wi-Fi.
  2. В настройках ККТ (через тест драйвера) зададим статический IP-адрес для кассы внутри локальной сети магазина (например, 192.168.1.150).
  3. Объединим локальную сеть магазина и сеть, где находится сервер 1С, в единое защищенное информационное пространство с помощью VPN-туннеля (например, настроив IPSec, WireGuard или OpenVPN на роутерах).
  4. На сервере 1С в настройках торгового оборудования укажем тип подключения «По сети» (TCP/IP), введем IP-адрес кассы 192.168.1.150 и соответствующий порт драйвера (обычно 7701 для АТОЛ).

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

Решение 5. Использование Web-сервера драйвера ККТ

Если объединить сети через VPN технически невозможно (например, сервер 1С находится в закрытом облаке провайдера), существует еще один современный архитектурный подход — использование локального веб-сервера драйвера ККТ.

Проанализируем, как работает эта схема:

  1. На локальном компьютере кассира, к которому подключена касса, устанавливается и запускается штатная служба веб-сервера (например, АТОЛ Web-сервер). Эта служба постоянно запущена в фоне и «слушает» входящие HTTP-запросы на определенном порту.
  2. На роутере магазина настраивается проброс этого порта во внешнюю сеть (с ограничением доступа по IP-адресу сервера 1С в целях безопасности) либо используется доменное имя.
  3. В 1С на удаленном сервере при настройке ККТ выбирается интеграционный компонент, работающий по протоколу HTTP (веб-сервер ККТ).
  4. В параметрах подключения указывается внешний IP-адрес локального компьютера магазина и настроенный порт.

Данные передаются по надежному протоколу HTTP/HTTPS, который намного устойчивее переносит задержки сети и микроразрывы, не вызывая критических зависаний сеанса в 1С. Для такой схемы подключения можно использовать обработку для взаимодействия с ККТ через веб-сервер АТОЛ.

Решение 6. Контроль разрядности драйверов ККТ на сервере

В завершение разберем неочевидную техническую проблему, которая часто маскируется под «потерю связи из-за сети». Это несоответствие разрядности (Bitness) платформы 1С и установленных на сервере драйверов торгового оборудования.

Если на сервере установлена 32-битная версия платформы 1С (x86), а драйвер ККТ (внешняя компонента) зарегистрирован в системе как 64-битный (или наоборот), то при обращении к кассе будет происходить конфликт адресации памяти. Внешняя компонента драйвера может периодически аварийно завершать работу и выгружаться из оперативной памяти сервера. В интерфейсе 1С при этом будет отображаться стандартное сообщение «Нет связи с кассой» или «Порт недоступен».

Рекомендуем строго следить за тем, чтобы разрядность используемой платформы 1С (ее можно посмотреть в меню «Справка» -> «О программе») точно совпадала с разрядностью устанавливаемых на сервере интеграционных библиотек ККТ (файлов .dll драйвера).

← На главную