В практике автоматизации розничной торговли часто возникает ситуация, когда необходимо сэкономить на оборудовании и использовать одну контрольно-кассовую технику (ККТ) на двух рабочих местах. Особенно это актуально для небольших торговых точек, где нагрузка на кассу невелика, а компьютеры объединены в локальную сеть. Ситуация осложняется, если ККТ старая и не имеет встроенного сетевого интерфейса Ethernet или Wi-Fi, работая только через USB или RS-232. Разберем подробно, как реализовать такую схему в «нетленке» или типовой конфигурации 1С.
Рассмотрим идею автора темы о создании COM-объекта на удаленном компьютере. Платформа 1С позволяет инициализировать COM-объект на другом сервере, если там зарегистрирована соответствующая компонента. Для этого используется второй параметр функции Новый COMОбъект.
Проанализируем пример кода для подключения к драйверу, установленному на другом ПК:
// Имя компьютера в сети, к которому физически подключена касса
ИмяСервера = "CASH_DESK_PC";
Попытка
// Пытаемся создать объект драйвера на удаленной машине
ДрайверККМ = Новый COMОбъект("AddIn.FPrnM45", ИмяСервера);
// Далее работаем с объектом как обычно
ДрайверККМ.DeviceEnabled = Истина;
Исключение
Сообщить("Не удалось подключиться к кассе: " + ОписаниеОшибки());
КонецПопытки;
Важные нюансы настройки:
Выясним причину популярности сторонних решений, таких как kkmserver. Это специализированная служба, которая устанавливается на компьютер с подключенной кассой и превращает её в HTTP-сервер.
Разберем алгоритм работы этого метода:
kkmserver, который «захватывает» COM-порт ККТ.Это платное, но крайне надежное решение для «нетленок», так как интеграция происходит через простые HTTP-команды, что избавляет от проблем с разрядностью библиотек (x32/x64) и регистрацией COM-объектов.
Если ваша касса работает на 10-й версии драйверов АТОЛ, проанализируем встроенную возможность удаленного подключения. В десятой версии отказались от старой службы FDSVC и внедрили Atol Web Server.
Как это настроить:
В этом случае драйвер на втором ПК сам транслирует команды по сети. Для 1С это выглядит как обычная работа с локальным устройством, что минимизирует правки в коде конфигурации.
Рассмотрим вариант, когда нужно «обмануть» систему на уровне операционной системы. Существуют программы для создания виртуальных последовательных портов (например, VSPE — Virtual Serial Ports Emulator).
Посмотрим на шаги реализации:
Внимание: При таком подходе крайне важно реализовать в 1С механизм проверки доступности порта. Если первый компьютер в данный момент печатает чек, порт будет занят, и второй компьютер получит ошибку. В коде 1С это можно обработать циклом ожидания:
ПопыткаПодключения = 0;
Успех = Ложь;
Пока ПопыткаПодключения < 5 Цикл
Если Драйвер.Подключить() = 0 Тогда
Успех = Истина;
Прервать;
Иначе
ПопыткаПодключения = ПопыткаПодключения + 1;
// Ждем 1 секунду перед повтором
Приостановить(1);
КонецЕсли;
КонецЦикла;
Проанализируем самый надежный с точки зрения стабильности метод, который не зависит от сетевых настроек драйверов. Это создание промежуточной очереди в самой базе 1С. Это особенно удобно, если база 1С у обоих пользователей общая.
Разберем логику процесса:
ОчередьПечатиЧеков.Этот метод гарантирует отсутствие конфликтов доступа к оборудованию, так как физически с кассой работает только один компьютер (сеанс).
Выбор метода зависит от ваших технических навыков и бюджета. Для старых ККТ в связке с самописной конфигурацией («нетленкой») оптимальным будет либо использование Atol Web Server (если драйвер 10-й версии), либо покупка KKMServer, так как он берет на себя все сложности по управлению очередью печати и сетевым взаимодействием. Использование DCOM в современных реалиях Windows оправдано только в исключительных случаях из-за сложностей администрирования прав доступа.