Работа торгового оборудования в терминальном режиме — одна из самых наболевших тем для системных администраторов и специалистов по автоматизации 1С. Сценарий, когда касса подключена к локальному компьютеру торговой точки, а сама 1С запущена на удаленном сервере через RDP (Remote Desktop Protocol), часто сопровождается внезапными «отвалами» оборудования. В самый неподходящий момент, прямо во время обслуживания покупателя, касса перестает отвечать, а на сервере порт становится недоступен, хотя локально на ПК драйвер ККТ успешно проходит все проверки.
В этой статье мы подробно разберем, почему возникает эта проблема, проанализируем физические, системные и сетевые причины сбоев, а также рассмотрим пошаговые инструкции по их устранению — от тонкой настройки операционной системы до кардинальной смены архитектуры подключения.
Стандартный механизм проброса (маппинга) последовательных портов в клиенте mstsc.exe изначально создавался для низкоскоростных устройств и крайне чувствителен к качеству сетевого соединения. Рассмотрим подробнее, что происходит при обмене данными между сервером 1С и кассовым аппаратом:
В результате мы получаем ситуацию: локально на кассовом компьютере связь с ККТ идеальная, но внутри сессии 1С порт наглухо заблокирован. Помогает только полное завершение сеанса пользователя (разлогинивание) и повторный вход, что сильно тормозит работу торговой точки.
Самый надежный способ раз и навсегда решить проблему с пробросом портов через RDP — это полностью отказаться от терминального доступа для кассовой зоны и перейти на использование тонкого клиента 1С.
Рассмотрим по шагам преимущества и логику этого решения:
При работе через тонкий клиент сама платформа 1С запускается локально на компьютере кассира. Она обменивается с сервером только бизнес-данными по протоколам HTTP или HTTPS, которые не боятся микроразрывов связи и не требуют удержания постоянного потокового соединения. При этом драйвер ККТ устанавливается локально, и 1С обращается к физическому COM-порту напрямую, минуя любые посреднические протоколы проброса. База данных и вся тяжелая логика при этом остаются работать на сервере.
Для реализации этого метода выполним следующие действия:
http://server_address/db_name).Этот шаг полностью исключает прослойку RDP из процесса печати чеков и гарантирует стабильную работу оборудования даже при нестабильном интернет-канале.
Часто виновником обрыва связи становится сама операционная система Windows на локальном компьютере, к которому физически подключена касса. По умолчанию в Windows включена агрессивная политика экономии энергии.
Выясним, как это влияет на работу: если касса простаивает без печати чеков хотя бы 10–15 минут, операционная система считает USB-порт неактивным и временно отключает на него подачу питания (функция USB Selective Suspend). Виртуальный COM-порт исчезает из системы. Когда кассир в 1С пытается пробить новый чек, система пытается «разбудить» порт, но RDP-клиент уже потерял дескриптор устройства и не может восстановить проброс без перезапуска сессии.
Проанализируем процедуру отключения энергосбережения:
После выполнения этих настроек Windows перестанет принудительно отключать питание кассового аппарата.
Если отказаться от 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_адрес_сервера
Современные онлайн-кассы ведущих производителей (АТОЛ, Штрих-М) давно ушли от ограничений физического COM-порта и поддерживают полноценную работу по сетевым протоколам (через кабель Ethernet или встроенный Wi-Fi-модуль).
Если мы настроим работу ККТ по протоколу TCP/IP, нам больше вообще не потребуется пробрасывать порты средствами RDP. 1С на сервере будет обращаться к кассе напрямую по IP-адресу.
Рассмотрим по шагам схему организации такого подключения:
192.168.1.150).192.168.1.150 и соответствующий порт драйвера (обычно 7701 для АТОЛ).При такой схеме стабильность печати чеков будет зависеть только от работы сетевого оборудования, а механизмы операционной системы по маппингу портов RDP будут полностью исключены из цепочки обмена данными.
Если объединить сети через VPN технически невозможно (например, сервер 1С находится в закрытом облаке провайдера), существует еще один современный архитектурный подход — использование локального веб-сервера драйвера ККТ.
Проанализируем, как работает эта схема:
Данные передаются по надежному протоколу HTTP/HTTPS, который намного устойчивее переносит задержки сети и микроразрывы, не вызывая критических зависаний сеанса в 1С. Для такой схемы подключения можно использовать обработку для взаимодействия с ККТ через веб-сервер АТОЛ.
В завершение разберем неочевидную техническую проблему, которая часто маскируется под «потерю связи из-за сети». Это несоответствие разрядности (Bitness) платформы 1С и установленных на сервере драйверов торгового оборудования.
Если на сервере установлена 32-битная версия платформы 1С (x86), а драйвер ККТ (внешняя компонента) зарегистрирован в системе как 64-битный (или наоборот), то при обращении к кассе будет происходить конфликт адресации памяти. Внешняя компонента драйвера может периодически аварийно завершать работу и выгружаться из оперативной памяти сервера. В интерфейсе 1С при этом будет отображаться стандартное сообщение «Нет связи с кассой» или «Порт недоступен».
Рекомендуем строго следить за тем, чтобы разрядность используемой платформы 1С (ее можно посмотреть в меню «Справка» -> «О программе») точно совпадала с разрядностью устанавливаемых на сервере интеграционных библиотек ККТ (файлов .dll драйвера).