В процессе автоматизации розничной торговли часто возникает ситуация, когда необходимо сэкономить на оборудовании и использовать одну кассу (ККТ) для нескольких менеджеров, работающих в терминальной сессии (RDP). Ситуация осложняется, если используются бюджетные модели, такие как АТОЛ 30Ф, которые не имеют встроенного Ethernet-порта. В данной статье мы разберем, как решить проблему «проброса» и совместного использования таких касс, не прибегая к покупке платных сторонних обработок.
Современные драйверы АТОЛ 10-й версии предоставляют штатную и бесплатную возможность превратить локальную USB-кассу в сетевое устройство. Это самый стабильный способ работы в среде RDP, так как он полностью исключает нестабильные виртуальные COM-порты из цепочки обмена данными.
Рассмотрим пошагово, как настроить эту схему:
ДТО 10.Web-сервер (входит в состав дистрибутива драйвера).АТОЛ 10.х, но в качестве канала связи указываем не COM-порт, а TCP/IP.Проанализируем преимущество этого метода: 1С обращается к кассе по протоколу HTTP/JSON. Даже если RDP-сессия кратковременно оборвется, драйвер на локальной машине корректно завершит операцию, и порт не будет «зависать», что часто случается при обычном пробросе через mstsc.
Если конфигурация 1С требует работы именно через драйвер, но вы хотите избежать сложностей с COM-портами, можно воспользоваться встроенной технологией EthernetOverUSB. Проанализируем ситуацию: касса АТОЛ 30Ф при подключении создает два виртуальных порта. Один предназначен для команд, второй — для службы обмена данными (EoU).
Разберем процесс настройки:
USB и убеждаемся, что служба EoU запущена на локальном ПК.EoU транслирует данные с кассы в сеть. При правильной настройке маршрутизации между локальной сетью и RDP-сервером, сервер сможет видеть ККТ как сетевое устройство с собственным IP-адресом.Рассмотрим вариант, когда касса физически одна, а печатать на нее должны менеджеры из разных RDP-сессий. Чтобы не возникало конфликтов за доступ к порту, мы можем реализовать простую «очередь чеков» внутри самой 1С. Этот метод отлично подходит для УПП или других конфигураций на обычных формах.
Суть метода заключается в следующем: менеджеры не печатают чек напрямую. Вместо этого программа записывает данные чека в специальный регистр сведений или таблицу базы данных.
Проанализируем пример кода для записи задания в очередь:
Процедура ЗаписатьЧекВОчередь(ДанныеЧека, КассаСсылка)
НоваяЗапись = РегистрыСведений.ОчередьПечатиЧеков.СоздатьМенеджерЗаписи();
НоваяЗапись.Период = ТекущаяДата();
НоваяЗапись.Касса = КассаСсылка;
НоваяЗапись.ДанныеЧека = СериализоватьОбъект(ДанныеЧека); // Преобразуем в строку/XML
НоваяЗапись.Статус = Перечисления.СтатусыЧеков.ВОтправке;
НоваяЗапись.Записать();
КонецПроцедуры
На компьютере, к которому касса подключена физически, запускается один выделенный сеанс 1С. В этом сеансе настраивается ПодключитьОбработчикОжидания, который раз в 5 секунд проверяет таблицу заданий.
Рассмотрим пример кода обработчика:
Процедура ОбработкаОчередиПечати() Экспорт
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 * ИЗ РегистрСведений.ОчередьПечатиЧеков ГДЕ Статус = &Статус";
Запрос.УстановитьПараметр("Статус", Перечисления.СтатусыЧеков.ВОтправке);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
// Выполняем физическую печать на ККТ, подключенную к этому ПК
Результат = НапечататьЧекНаЛокальнойКассе(Выборка.ДанныеЧека);
Если Результат Тогда
// Обновляем статус в базе
ЗафиксироватьУспех(Выборка.Период, Выборка.Касса);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Выясним причину, почему это решение эффективно: оно полностью бесплатно, не зависит от качества RDP-канала и позволяет использовать одну дешевую кассу АТОЛ 30Ф неограниченному количеству пользователей. Главное — обеспечить работу одного "транспортного" сеанса 1С.
Если вы решили идти по пути стандартного проброса, важно правильно настроить параметры mstsc.exe. На вкладке «Локальные ресурсы» в разделе «Подробно» обязательно должна стоять галочка Порты.
Однако стандартный механизм часто работает нестабильно. Разберем альтернативный бесплатный вариант с использованием com0com и hub4com:
Важный момент: при использовании АТОЛ 30Ф через RDP часто возникает ошибка «Порт занят». Чтобы этого избежать, убедитесь, что в настройках оборудования 1С в поле «Таймаут» установлено значение не менее 2000-5000 мс. Проброс через RDP вносит существенные задержки в передачу пакетов, и драйвер может закрывать соединение раньше, чем касса успеет ответить.
Мы проанализировали ситуацию и выяснили, что покупка дорогостоящих обработок за 5000 рублей не является единственным выходом. Для стабильной работы рекомендуем:
Энергосбережения для USB-портов на локальных ПК. Часто RDP «теряет» кассу из-за того, что Windows отключает питание USB-порта для экономии энергии.Применяя эти подходы, вы сможете эффективно использовать бюджетное оборудование в сложных терминальных средах, обеспечив высокую отказоустойчивость системы без дополнительных затрат.