Как подключить одну ККМ к двум компьютерам в сети 1С?

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

В практике автоматизации розничной торговли часто возникает ситуация, когда необходимо сэкономить на оборудовании и использовать одну контрольно-кассовую технику (ККТ) на двух рабочих местах. Особенно это актуально для небольших торговых точек, где нагрузка на кассу невелика, а компьютеры объединены в локальную сеть. Ситуация осложняется, если ККТ старая и не имеет встроенного сетевого интерфейса Ethernet или Wi-Fi, работая только через USB или RS-232. Разберем подробно, как реализовать такую схему в «нетленке» или типовой конфигурации 1С.

Способ 1. Использование технологии DCOM

Рассмотрим идею автора темы о создании COM-объекта на удаленном компьютере. Платформа 1С позволяет инициализировать COM-объект на другом сервере, если там зарегистрирована соответствующая компонента. Для этого используется второй параметр функции Новый COMОбъект.

Проанализируем пример кода для подключения к драйверу, установленному на другом ПК:


// Имя компьютера в сети, к которому физически подключена касса
ИмяСервера = "CASH_DESK_PC"; 
Попытка
    // Пытаемся создать объект драйвера на удаленной машине
    ДрайверККМ = Новый COMОбъект("AddIn.FPrnM45", ИмяСервера);
    // Далее работаем с объектом как обычно
    ДрайверККМ.DeviceEnabled = Истина;
Исключение
    Сообщить("Не удалось подключиться к кассе: " + ОписаниеОшибки());
КонецПопытки;

Важные нюансы настройки:

  1. На компьютере, где установлена касса, необходимо настроить службу Службы компонентов (DCOMCNFG). Нужно разрешить удаленный запуск и активацию для конкретного COM-класса драйвера (например, АТОЛ или Штрих-М).
  2. Оба компьютера должны находиться в одной рабочей группе или домене, а пользователь, под которым запускается 1С, должен иметь права на запуск объектов на удаленном ПК.
  3. В современных версиях Windows (10 и 11) настройка DCOM стала значительно сложнее из-за политик безопасности, поэтому данный метод считается нестабильным и «капризным».

Способ 2. Использование специализированного ПО (KKMServer)

Выясним причину популярности сторонних решений, таких как kkmserver. Это специализированная служба, которая устанавливается на компьютер с подключенной кассой и превращает её в HTTP-сервер.

Разберем алгоритм работы этого метода:

  1. На ПК с кассой устанавливается kkmserver, который «захватывает» COM-порт ККТ.
  2. В 1С на обоих компьютерах не нужно настраивать стандартное торговое оборудование через драйвер. Вместо этого отправляются JSON-запросы на IP-адрес сервера кассы.
  3. Программа сама управляет очередью чеков. Если оба пользователя одновременно нажмут кнопку «Пробить чек», сервис выстроит их в очередь, и ошибки «Порт занят» не возникнет.

Это платное, но крайне надежное решение для «нетленок», так как интеграция происходит через простые HTTP-команды, что избавляет от проблем с разрядностью библиотек (x32/x64) и регистрацией COM-объектов.

Способ 3. Сетевые возможности современных драйверов (АТОЛ 10)

Если ваша касса работает на 10-й версии драйверов АТОЛ, проанализируем встроенную возможность удаленного подключения. В десятой версии отказались от старой службы FDSVC и внедрили Atol Web Server.

Как это настроить:

В этом случае драйвер на втором ПК сам транслирует команды по сети. Для 1С это выглядит как обычная работа с локальным устройством, что минимизирует правки в коде конфигурации.

Способ 4. Виртуальные COM-порты (VSPE и аналоги)

Рассмотрим вариант, когда нужно «обмануть» систему на уровне операционной системы. Существуют программы для создания виртуальных последовательных портов (например, VSPE — Virtual Serial Ports Emulator).

Посмотрим на шаги реализации:

  1. На компьютере с кассой создается устройство типа TcpServer, которое транслирует физический COM-порт в сеть.
  2. На втором компьютере создается устройство типа TcpClient, которое подключается к серверу и создает виртуальный COM-порт (например, COM9).
  3. В 1С на втором ПК вы просто указываете работу через COM9.

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


ПопыткаПодключения = 0;
Успех = Ложь;
Пока ПопыткаПодключения < 5 Цикл
    Если Драйвер.Подключить() = 0 Тогда
        Успех = Истина;
        Прервать;
    Иначе
        ПопыткаПодключения = ПопыткаПодключения + 1;
        // Ждем 1 секунду перед повтором
        Приостановить(1); 
    КонецЕсли;
КонецЦикла;

Способ 5. Архитектурный подход «Очередь чеков»

Проанализируем самый надежный с точки зрения стабильности метод, который не зависит от сетевых настроек драйверов. Это создание промежуточной очереди в самой базе 1С. Это особенно удобно, если база 1С у обоих пользователей общая.

Разберем логику процесса:

  1. Создаем в конфигурации новый документ или регистр сведений ОчередьПечатиЧеков.
  2. Когда второй пользователь нажимает «Пробить чек», 1С не обращается к драйверу, а просто записывает данные чека в этот регистр.
  3. На первом компьютере (где касса) запущена обработка ожидания или фоновое задание, которое раз в 2-3 секунды проверяет регистр.
  4. Найдя новую запись, первый компьютер пробивает чек «от своего имени» и ставит отметку в регистре об успешной печати.

Этот метод гарантирует отсутствие конфликтов доступа к оборудованию, так как физически с кассой работает только один компьютер (сеанс).

Резюме

Выбор метода зависит от ваших технических навыков и бюджета. Для старых ККТ в связке с самописной конфигурацией («нетленкой») оптимальным будет либо использование Atol Web Server (если драйвер 10-й версии), либо покупка KKMServer, так как он берет на себя все сложности по управлению очередью печати и сетевым взаимодействием. Использование DCOM в современных реалиях Windows оправдано только в исключительных случаях из-за сложностей администрирования прав доступа.

← На главную