При автоматизации розничной торговли часто возникает ситуация, когда одну контрольно-кассовую технику (ККТ) необходимо использовать на нескольких рабочих местах. В случае с кассами АТОЛ, подключенными по протоколу TCP/IP, пользователи регулярно сталкиваются с проблемой: если один человек пробил чек или просто открыл сеанс связи с кассой, для всех остальных устройство становится «заблокированным». При попытке печати возникает ошибка «Порт занят» или «Нет связи». Рассмотрим подробнее, почему это происходит и как настроить стабильную коллективную работу.
Прежде всего, проанализируем ситуацию с технической стороны. Большинство современных моделей ККТ АТОЛ (особенно на платформе 2.5) имеют аппаратное ограничение: сетевой модуль кассы поддерживает только одно активное TCP-соединение (обычно по порту 5555). Как только драйвер 1С на одном из компьютеров устанавливает связь с IP-адресом кассы, соединение считается установленным, и касса «слушает» только этот источник. Любые попытки других пользователей подключиться будут отклоняться на уровне сетевого стека устройства до тех пор, пока первый пользователь не разорвет сессию.
Разберем три основных способа решения этой проблемы: от простой настройки параметров 1С до внедрения специализированного промежуточного ПО.
Это самый надежный и рекомендуемый производителем способ для многопользовательской среды. Суть метода заключается в том, что между 1С и кассой появляется «посредник» — специальная служба.
Рассмотрим алгоритм настройки по шагам:
Atol_KKT_HTTP_Server.localhost:16730) добавляем нашу кассу, указывая её реальный IP-адрес и порт.Преимущества этого метода:
Если по каким-то причинам установка сервера ККТ невозможна, проанализируем стандартные настройки драйвера в самой 1С. В типовых конфигурациях, таких как 1С:Управление торговлей 11.4 или 1С:Розница, реализован механизм динамического подключения.
Посмотрим на важные параметры в карточке торгового оборудования:
Проанализируем программный аспект. Типовые механизмы 1С при печати чека работают по следующему принципу:
// Упрощенная логика работы типовой обработки
МенеджерОборудования.Подключить(ИдентификаторУстройства);
// В этот момент порт 5555 захватывается
Результат = МенеджерОборудования.ВыполнитьКоманду("ПечатьЧека", ПараметрыЧека);
МенеджерОборудования.Отключить(ИдентификаторУстройства);
// Порт освобождается для других
Проблема возникает, если у одного из пользователей открыта форма, которая принудительно держит соединение (например, форма настройки или форма смены, если в коде допущена ошибка). Выясним причину блокировки: если сессию пользователя закрыть и касса «оживает», значит, какой-то процесс в 1С не вызывает метод Отключить().
Иногда касса остается заблокированной даже после того, как пользователь закрыл 1С. Это происходит из-за «зависших» TCP-сессий. Операционная система считает, что соединение еще активно, и не позволяет переподключиться.
Для решения этой проблемы рекомендуется:
Keep-Alive в настройках драйвера АТОЛ, чтобы драйвер периодически проверял актуальность связи и корректно закрывал сокет при обрыве.Проанализируем влияние версии платформы ККТ на стабильность работы. На старой Платформе 2.5 сетевой обмен был довольно капризным: любая микропауза в сети могла привести к тому, что драйвер терял связь, а касса продолжала считать порт занятым. На Платформе 5.0 архитектура работы с сетью была переработана. Если вы используете сетевое подключение для группы пользователей, переход на Платформу 5.0 вместе с использованием Сервера ККТ является «золотым стандартом», который практически исключает простои кассовой зоны.
Подводя итог, если вы столкнулись с блокировкой кассы АТОЛ в 1С, выполните следующие действия:
Использование веб-сервера также позволяет легко печатать чеки из мобильных приложений или облачных версий 1С, что делает вашу систему более гибкой и масштабируемой.