Как исправить некорректное сканирование акцизных марок сканером Atol Impulse 12 BT в режиме SPP?

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

При работе с мобильными приложениями на платформе 1С:Предприятие разработчики часто сталкиваются с необходимостью подключения внешнего торгового оборудования по протоколу Bluetooth. Одной из наиболее распространенных и при этом сложных проблем является некорректная передача длинных штрихкодов, таких как акцизные марки (PDF417 или DataMatrix), при использовании режима SPP (Serial Port Profile). Пользователи отмечают, что сканер Atol Impulse 12 BT в этом режиме разбивает один код на несколько частей и добавляет в поток данных лишние нулевые байты (0x00), что делает невозможным стандартную обработку события в 1С.

В этой статье мы подробно разберем причины возникновения данной проблемы и рассмотрим комплекс мер по ее устранению: от обновления микропрограммы сканера до тонкой настройки драйвера БПО (Библиотеки подключаемого оборудования). В качестве готовой альтернативы стандартному БПО также можно использовать внешнюю компоненту для подключения Bluetooth-сканеров в режиме SPP на Android.

Анализируем причину возникновения ошибки

Проанализируем логи драйвера мобильного приложения. Мы видим, что при считывании акцизной марки данные поступают в систему не единым блоком, а фрагментами. Например, код длиной 150 символов может прийти четырьмя отдельными событиями. При этом в местах «разрыва» часто обнаруживается символ 0x00 (null byte). Выясним, почему это происходит:

  1. Переполнение внутреннего буфера сканера: При работе в режиме SPP сканер должен передавать данные пакетами. Если скорость обработки на стороне мобильного устройства ниже скорости передачи, или если прошивка сканера некорректно управляет очередью, происходит принудительная сегментация данных.
  2. Ограничение MTU Bluetooth-стека: Операционная система Android имеет свои ограничения на размер пакета данных (Maximum Transmission Unit), передаваемого через Bluetooth. Если сканер пытается отправить всю марку целиком без учета этих лимитов, стек протокола дробит сообщение.
  3. Тайм-ауты в драйвере 1С: Драйвер 1С:Сканер штрихкода ожидает завершения передачи в течение определенного времени. Если пауза между фрагментами одного штрихкода превышает установленный порог, драйвер считает передачу завершенной и генерирует «Внешнее событие» для части кода.

Шаг 1: Обновление прошивки через Atol Scanner Service Tool

Первоочередной задачей является проверка версии внутреннего ПО сканера. Рассмотрим этот процесс подробнее. Для многих моделей Atol, включая Impulse 12 BT, производитель выпускал исправления, касающиеся именно работы Bluetooth-стека. В ранних версиях прошивки (до середины 2023 года) алгоритм упаковки данных в SPP-пакеты работал нестабильно.

Нам необходимо скачать утилиту Atol Scanner Service Tool с официального сайта или центра загрузок. Подключим сканер к компьютеру через USB-кабель (в режиме эмуляции COM-порта) и выполним проверку обновлений. Если доступна версия выше 1.20, ее обязательно нужно установить. Обновление прошивки часто устраняет проблему генерации лишних 0x00 символов при передаче длинных последовательностей.

Шаг 2: Настройка межсимвольной задержки (Inter-character Delay)

Если обновление прошивки не решило проблему полностью, разберем способ замедления передачи данных. В режиме SPP данные улетают в порт на максимально возможной скорости. Мобильная платформа 1С иногда не успевает «склеить» поток данных, воспринимая задержки в миллисекунды как конец сообщения.

Посмотрим на настройки сканера в его руководстве пользователя. Нам нужно найти штрихкоды для программирования Inter-character Delay. Рекомендуется установить задержку в диапазоне 5–10 мс. Это заставит сканер делать микропаузы между отправкой каждого байта. Для пользователя это будет незаметно (сканирование марки займет на доли секунды больше), но драйвер 1С получит более стабильный поток данных без резких обрывов буфера.

Шаг 3: Корректировка настроек в 1С (Тайм-аут клавиатуры и порта)

Даже в режиме SPP драйвер 1С использует параметр тайм-аута для определения целостности считанного кода. Проанализируем настройки в интерфейсе «Подключаемое оборудование»:

  1. Перейдем в настройки установленного драйвера сканера.
  2. Найдем параметр «Тайм-аут» (в некоторых версиях БПО он называется «Тайм-аут клавиатуры», даже если выбран COM/SPP).
  3. Увеличим стандартное значение (обычно 75 мс) до 200–500 мс.

Это позволит драйверу дольше ждать следующую порцию данных от Bluetooth-модуля, прежде чем генерировать событие ОбработкаВнешнегоСобытия. Рассмотрим пример того, как это выглядит в коде мобильного приложения при ручной обработке (если вы используете самописное решение):


// Пример логики склейки данных, если драйвер все же разбивает код
&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
    Если Событие = "Barcode" Тогда
        // Накапливаем данные в переменную модуля
        НакопленныйШтрихкод = НакопленныйШтрихкод + Данные;
        
        // Сбрасываем старый обработчик ожидания
        ОтключитьОбработчикОжидания("ЗавершитьСборкуШтрихкода");
        
        // Запускаем новый сбор через 300 мс
        ПодключитьОбработчикОжидания("ЗавершитьСборкуШтрихкода", 0.3, Истина);
    КонецЕсли;
КонецПроцедуры

Шаг 4: Перевод сканера в режим Raw Data и отключение форматирования

Символы 0x00 и разрывы могут быть вызваны попытками сканера интерпретировать спецсимволы (например, GS разделители 0x1D) внутри марки. Разберем, как заставить сканер передавать «чистые» данные. В сервисном руководстве Atol найдите и считайте следующие настроечные коды: если в процессе передачи символы разделителей все же теряются, для их программного восстановления можно применить расширение для восстановления символов GS в кодах маркировки.

Шаг 5: Использование режима HID (Keyboard) как альтернатива

Если специфика бизнес-процесса позволяет, проанализируем возможность перехода на режим HID (эмуляция клавиатуры). Как отмечают многие специалисты, в режиме клавиатуры сканеры Atol Impulse 12 BT работают значительно стабильнее с длинными кодами. Однако для этого на мобильном устройстве желательно использовать «Пустую клавиатуру» (Null Keyboard), чтобы при сканировании не всплывала экранная клавиатура Android, которая может искажать вводимые символы.

Важный момент: в режиме HID также необходимо увеличить Тайм-аут клавиатуры в настройках 1С до 150-200 мс, чтобы предотвратить разбиение марки на разные строки в документе.

Подводя итог, наиболее эффективным решением для SPP является связка «Обновление прошивки + Установка задержки между символами (10 мс) + Увеличение тайм-аута в драйвере 1С». Это гарантирует, что даже длинная акцизная марка будет принята мобильным устройством как единый массив данных без паразитных символов 0x00.

← На главную