Как подключить онлайн-кассу к 1С и настроить передачу данных по Bluetooth?

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

Интеграция торгового оборудования, которое не имеет стандартных драйверов для российского рынка, часто ставит перед разработчиком 1С сложную задачу. Особенно это актуально, когда устройство требует передачи данных в формате JSON через интерфейс Bluetooth. В данной статье мы подробно разберем, как реализовать такое взаимодействие, какие технологии использовать и как обойти системные ограничения платформы 1С.

Вариант 1: Использование профиля последовательного порта (SPP)

Большинство Bluetooth-устройств, предназначенных для обмена данными (включая принтеры чеков и кассы), поддерживают профиль Serial Port Profile (SPP). Этот профиль позволяет операционной системе Windows создать виртуальный COM-порт, который будет транслировать данные в Bluetooth-канал. Рассмотрим этот процесс по шагам:

  1. Выполним сопряжение устройства с компьютером через стандартное меню Bluetooth в Windows.
  2. Перейдем в Параметры Bluetooth -> Дополнительные параметры Bluetooth -> Вкладка "COM-порты".
  3. Добавим входящий или исходящий порт для нашего устройства. Система назначит ему номер, например, COM3.
  4. Проанализируем возможность работы 1С с этим портом. Теперь для платформы касса выглядит как обычное последовательное устройство.

Для отправки JSON-пакета через такой порт в 1С можно использовать стандартные средства работы с последовательными портами или библиотеку MSCOMM32.OCX. Рассмотрим пример кода, который подготавливает данные:


// Формируем JSON для отправки
ПараметрыЧека = Новый Структура;
ПараметрыЧека.Вставить("Amount", 100.50);
ПараметрыЧека.Вставить("Tax", 20);

ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ПараметрыЧека);
СтрокаJSON = ЗаписьJSON.Закрыть();

// Передача в порт (условный пример через внешнюю компоненту)
ОбъектДрайвера.ЗаписатьДанные(СтрокаJSON);

Вариант 2: Использование внешних компонент (DLL)

Если устройство не создает виртуальный COM-порт (например, работает по протоколу BLE — Bluetooth Low Energy), стандартные методы 1С не помогут. В этом случае необходимо использовать внешнюю компоненту, написанную на языках C# или C++. Рассмотрим, почему это эффективнее:

Внешняя компонента может напрямую обращаться к системному API (например, Windows.Devices.Bluetooth) и управлять состоянием подключения, отслеживать разрывы связи и корректно передавать пакеты данных. Разберем ситуацию: если разработчик кассы предоставил описание протокола, но не дал драйвер, мы можем создать прослойку, которая будет принимать из 1С строку JSON и отправлять ее в стек Bluetooth.

Для реализации обмена через внешнюю компоненту в 1С обычно используется следующий подход:


Попытка
    ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаBluetooth", "BT", ТипВнешнейКомпоненты.Native);
    Касса = Новый("AddIn.BT.BluetoothConnector");
Исключение
    Сообщить("Не удалось загрузить компоненту работы с Bluetooth");
КонецПопытки;

Если Касса.Подключиться(АдресУстройства) Тогда
    Результат = Касса.ОтправитьJSON(СтрокаJSON);
КонецЕсли;

Вариант 3: Промежуточный веб-сервер (Bridge)

Проанализируем более гибкий способ, который избавляет от необходимости писать низкоуровневый код внутри 1С. Мы можем запустить небольшое приложение-прослойку (на языке Python или Go), которое будет слушать определенный HTTP-порт на локальном компьютере и транслировать полученные запросы в Bluetooth-канал кассы.

Выясним преимущества такого метода:

Пример отправки данных из 1С на такой "мост":


СерверМоста = "localhost";
ПортМоста = 8080;
Соединение = Новый HTTPСоединение(СерверМоста, ПортМоста);
Запрос = Новый HTTPЗапрос("/print");
Запрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8);

Попытка
    Ответ = Соединение.ОтправитьДляОбработки(Запрос);
    Если Ответ.КодСостояния = 200 Тогда
        Сообщить("Данные успешно отправлены на кассу");
    КонецЕсли;
Исключение
    Сообщить("Ошибка связи с мостом Bluetooth");
КонецПопытки;

Специфика работы с JSON и кодировками

При передаче данных на зарубежные кассы крайне важно соблюдать формат JSON и кодировку текста. Рассмотрим основные моменты, на которые стоит обратить внимание:

Кодировка: Большинство касс ожидают UTF-8 без метки BOM. При использовании функции ЗаписатьJSON в 1С убедитесь, что при конвертации в байты (если вы пишете в порт напрямую) не добавляются лишние символы.

Размер пакета (MTU): Bluetooth имеет ограничение на размер передаваемого пакета за один раз (обычно около 20-512 байт для BLE). Если ваш JSON-чек очень длинный, его необходимо дробить на части. В случае с виртуальным COM-портом драйвер Windows сделает это за вас, но при прямой работе через компоненту или скрипты об этом должен позаботиться программист.

Экранирование символов: Проанализируем структуру JSON. Убедитесь, что спецсимволы и кавычки внутри строк корректно экранированы. Используйте системный объект ЗаписьJSON, так как ручное формирование строки через "" часто приводит к ошибкам парсинга на стороне устройства.

Резюме

Подключение специфичной кассы по Bluetooth к 1С — задача решаемая. Если устройство поддерживает SPP, используйте виртуальный COM-порт. Если требуется работа с современным BLE или прямой обмен JSON, оптимальным выбором будет создание небольшого локального HTTP-Bridge или использование внешних компонент. Это обеспечит стабильную работу оборудования и упростит дальнейшую поддержку системы.

← На главную