Как бесплатно подключить две кассы АТОЛ 30Ф к одному компьютеру через RDP

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

В процессе автоматизации розничной торговли часто возникает ситуация, когда необходимо сэкономить на оборудовании и использовать одну кассу (ККТ) для нескольких менеджеров, работающих в терминальной сессии (RDP). Ситуация осложняется, если используются бюджетные модели, такие как АТОЛ 30Ф, которые не имеют встроенного Ethernet-порта. В данной статье мы разберем, как решить проблему «проброса» и совместного использования таких касс, не прибегая к покупке платных сторонних обработок.

Метод 1. Использование встроенного Web-сервера АТОЛ (ДТО 10)

Современные драйверы АТОЛ 10-й версии предоставляют штатную и бесплатную возможность превратить локальную USB-кассу в сетевое устройство. Это самый стабильный способ работы в среде RDP, так как он полностью исключает нестабильные виртуальные COM-порты из цепочки обмена данными.

Рассмотрим пошагово, как настроить эту схему:

  1. На локальном компьютере (к которому физически подключена касса по USB) устанавливаем актуальный драйвер ДТО 10.
  2. В «Тесте драйвера» проверяем связь с ККТ. После этого переходим в настройки службы Web-сервер (входит в состав дистрибутива драйвера).
  3. Запускаем службу и в настройках указываем порт (по умолчанию 16732). Теперь ваша касса «слушает» сеть.
  4. На сервере 1С, где запущен RDP-сеанс, в настройках торгового оборудования выбираем модель АТОЛ 10.х, но в качестве канала связи указываем не COM-порт, а TCP/IP.
  5. В поле адреса вводим IP-адрес локального рабочего места менеджера.

Проанализируем преимущество этого метода: 1С обращается к кассе по протоколу HTTP/JSON. Даже если RDP-сессия кратковременно оборвется, драйвер на локальной машине корректно завершит операцию, и порт не будет «зависать», что часто случается при обычном пробросе через mstsc.

Метод 2. Настройка технологии EthernetOverUSB (EoU)

Если конфигурация 1С требует работы именно через драйвер, но вы хотите избежать сложностей с COM-портами, можно воспользоваться встроенной технологией EthernetOverUSB. Проанализируем ситуацию: касса АТОЛ 30Ф при подключении создает два виртуальных порта. Один предназначен для команд, второй — для службы обмена данными (EoU).

Разберем процесс настройки:

  1. В настройках кассы (через тест драйвера) переключаем канал связи на USB и убеждаемся, что служба EoU запущена на локальном ПК.
  2. Служба EoU транслирует данные с кассы в сеть. При правильной настройке маршрутизации между локальной сетью и RDP-сервером, сервер сможет видеть ККТ как сетевое устройство с собственным IP-адресом.
  3. В 1С на стороне сервера мы настраиваем подключение по IP. Это позволяет нескольким пользователям обращаться к одной кассе, так как драйвер 10-й версии умеет обрабатывать очередь запросов (при условии, что не включен монопольный захват устройства).

Метод 3. Создание программной очереди печати (через обработчик ожидания)

Рассмотрим вариант, когда касса физически одна, а печатать на нее должны менеджеры из разных RDP-сессий. Чтобы не возникало конфликтов за доступ к порту, мы можем реализовать простую «очередь чеков» внутри самой 1С. Этот метод отлично подходит для УПП или других конфигураций на обычных формах.

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

Проанализируем пример кода для записи задания в очередь:


Процедура ЗаписатьЧекВОчередь(ДанныеЧека, КассаСсылка)
    НоваяЗапись = РегистрыСведений.ОчередьПечатиЧеков.СоздатьМенеджерЗаписи();
    НоваяЗапись.Период = ТекущаяДата();
    НоваяЗапись.Касса = КассаСсылка;
    НоваяЗапись.ДанныеЧека = СериализоватьОбъект(ДанныеЧека); // Преобразуем в строку/XML
    НоваяЗапись.Статус = Перечисления.СтатусыЧеков.ВОтправке;
    НоваяЗапись.Записать();
КонецПроцедуры

На компьютере, к которому касса подключена физически, запускается один выделенный сеанс 1С. В этом сеансе настраивается ПодключитьОбработчикОжидания, который раз в 5 секунд проверяет таблицу заданий.

Рассмотрим пример кода обработчика:


Процедура ОбработкаОчередиПечати() Экспорт
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 * ИЗ РегистрСведений.ОчередьПечатиЧеков ГДЕ Статус = &Статус";
    Запрос.УстановитьПараметр("Статус", Перечисления.СтатусыЧеков.ВОтправке);
    
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
        // Выполняем физическую печать на ККТ, подключенную к этому ПК
        Результат = НапечататьЧекНаЛокальнойКассе(Выборка.ДанныеЧека);
        
        Если Результат Тогда
            // Обновляем статус в базе
            ЗафиксироватьУспех(Выборка.Период, Выборка.Касса);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Выясним причину, почему это решение эффективно: оно полностью бесплатно, не зависит от качества RDP-канала и позволяет использовать одну дешевую кассу АТОЛ 30Ф неограниченному количеству пользователей. Главное — обеспечить работу одного "транспортного" сеанса 1С.

Метод 4. Проброс COM-портов средствами RDP и сторонних утилит

Если вы решили идти по пути стандартного проброса, важно правильно настроить параметры mstsc.exe. На вкладке «Локальные ресурсы» в разделе «Подробно» обязательно должна стоять галочка Порты.

Однако стандартный механизм часто работает нестабильно. Разберем альтернативный бесплатный вариант с использованием com0com и hub4com:

  1. Эти утилиты позволяют создать виртуальный туннель между COM-портом локальной машины и TCP-портом.
  2. На локальной машине мы «заворачиваем» порт кассы в сетевой порт.
  3. На сервере создаем виртуальный COM-порт, который получает данные из этого сетевого порта.

Важный момент: при использовании АТОЛ 30Ф через RDP часто возникает ошибка «Порт занят». Чтобы этого избежать, убедитесь, что в настройках оборудования 1С в поле «Таймаут» установлено значение не менее 2000-5000 мс. Проброс через RDP вносит существенные задержки в передачу пакетов, и драйвер может закрывать соединение раньше, чем касса успеет ответить.

Итоги и рекомендации

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

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

← На главную