При автоматизации торговых точек часто возникает ситуация, когда одну кассу (фискальный регистратор) необходимо использовать на нескольких рабочих местах (РМ). Типичный пример: два продавца за разными компьютерами, но одна касса Атол на двоих. Казалось бы, современные устройства поддерживают Ethernet и Wi-Fi, однако при попытке пробить чек со второго компьютера пользователи часто сталкиваются с ошибкой "Порт занят" или "999: Нет связи". Рассмотрим, почему это происходит и как настроить стабильную работу системы.
Разберем первопричину. Большинство конфигураций 1С (особенно старого поколения, такие как Управление торговлей 10.3) работают с торговым оборудованием по принципу "подключил и держу". При открытии формы Чек ККМ или специализированного интерфейса РМК, программа выполняет метод Подключить() (или Connect() в драйвере). С этого момента драйвер устанавливает соединение с кассой и не разрывает его до тех пор, пока форма не будет закрыта. Если в это же время второй пользователь попытается пробить чек, драйвер на его компьютере получит отказ от кассы, так как сессия уже занята первым ПК.
Проанализируем ситуацию: даже если касса подключена по Ethernet, её внутренний протокол обмена часто ограничен одной активной TCP-сессией. Наша задача — заставить 1С освобождать кассу сразу после печати документа.
Если вы используете 8-ю версию драйверов Атол, для организации сетевой очереди предназначен сервис FDSVC (Fiscal Device Service). Рассмотрим пошагово, как его настроить:
FDSVC (она устанавливается вместе с драйвером). В настройках службы необходимо разрешить удаленные подключения и указать порт (по умолчанию 6220).192.168.1.15:6220.COM3), несмотря на то, что подключение идет по сети.Проблема этого метода в том, что FDSVC сам по себе не умеет грамотно выстраивать очередь, если 1С "забывает" отключаться. Поэтому перейдем к более современному решению.
В 10-й версии драйверов компания Атол отказалась от FDSVC в пользу Web-сервера. Это наиболее прогрессивный метод. Веб-сервер работает как прослойка: он принимает запросы по протоколу HTTP/JSON от любого количества компьютеров и сам управляет очередью команд к кассе.
Рассмотрим, как внедрить это решение:
16732) и запустите службу.При такой схеме работы 1С отправляет пакет данных веб-серверу, тот ставит его в очередь и возвращает ответ. Монопольного захвата порта на уровне приложения не происходит.
Если вы работаете в УТ 10.3 на обычных формах и не хотите переходить на веб-сервер, вам придется немного изменить логику работы обработки обслуживания. Выясним причину блокировки в коде. Обычно подключение происходит в процедуре ПриОткрытии() формы документа или в глобальном модуле при инициализации торгового оборудования.
Нам необходимо добиться, чтобы соединение устанавливалось непосредственно перед печатью и разрывалось сразу после. Посмотрим на пример логики, которую нужно внедрить в обработку (например, ATOLkkt.epf):
// В функции ПечатьЧека() или аналогичной
РезультатПодключения = ПолучитьСерверТО().ПодключитьОборудование(КассаККМ);
Если РезультатПодключения Тогда
// Выполняем фискализацию
ОбъектДрайвера.ПечататьЧек(ПараметрыЧека);
// СРАЗУ отключаем, чтобы освободить порт для других
ПолучитьСерверТО().ОтключитьОборудование(КассаККМ);
Иначе
Предупреждение("Касса занята другим пользователем, повторите попытку через 5 секунд.");
КонецЕсли;
Такой подход позволяет "занимать" кассу только на те 2-3 секунды, пока идет физическая печать чека. В остальное время порт будет свободен.
В конфигурациях на управляемых формах разработчики 1С уже предусмотрели проблему совместного использования. Проанализируем настройки:
Если вы используете подключение напрямую по IP (без веб-сервера), этот флаг является критически важным. При его установке 1С будет сама вызывать Disconnect() после каждой транзакции.
Разберем несколько важных моментов, которые часто упускают:
1. Настройка таймаутов. При работе по сети (особенно через Wi-Fi или VPN) задержки неизбежны. В настройках драйвера (в 1С или в тесте драйвера) увеличьте параметр "Таймаут" до 5000 мс или даже 10000 мс. Это предотвратит ошибки "Нет связи", если сеть на мгновение "задумалась".
2. Конфликт со сканером штрихкодов. Если на одном РМ используется и касса, и сканер, убедитесь, что они не конфликтуют на уровне COM-портов. Сканер, работающий в режиме эмуляции клавиатуры, не мешает кассе, но сканер в режиме NativePOS (через драйвер) инициализируется одновременно с кассой. Если код 1С написан некорректно, ошибка инициализации сканера может блокировать работу с кассой.
3. Скорость печати. Пользователи отмечают, что через 9-ю и 10-ю версии драйверов печать по IP может идти медленнее. Это связано с особенностями протокола JSON. Если скорость критична, рекомендуется подключать кассу по USB к одному из компьютеров и использовать Веб-сервер Атол, который оптимизирует передачу пакетов данных.
Резюмируем: Для стабильной работы нескольких РМ с одной кассой в 1С лучше всего использовать 10-ю версию драйвера с включенным Веб-сервером. Если же вы ограничены старой конфигурацией, необходимо либо использовать FDSVC с правильной настройкой портов, либо доработать код обработки обслуживания для динамического освобождения порта.