При работе с мобильными приложениями на платформе 1С:Предприятие разработчики часто сталкиваются с необходимостью подключения внешнего торгового оборудования по протоколу Bluetooth. Одной из наиболее распространенных и при этом сложных проблем является некорректная передача длинных штрихкодов, таких как акцизные марки (PDF417 или DataMatrix), при использовании режима SPP (Serial Port Profile). Пользователи отмечают, что сканер Atol Impulse 12 BT в этом режиме разбивает один код на несколько частей и добавляет в поток данных лишние нулевые байты (0x00), что делает невозможным стандартную обработку события в 1С.
В этой статье мы подробно разберем причины возникновения данной проблемы и рассмотрим комплекс мер по ее устранению: от обновления микропрограммы сканера до тонкой настройки драйвера БПО (Библиотеки подключаемого оборудования). В качестве готовой альтернативы стандартному БПО также можно использовать внешнюю компоненту для подключения Bluetooth-сканеров в режиме SPP на Android.
Проанализируем логи драйвера мобильного приложения. Мы видим, что при считывании акцизной марки данные поступают в систему не единым блоком, а фрагментами. Например, код длиной 150 символов может прийти четырьмя отдельными событиями. При этом в местах «разрыва» часто обнаруживается символ 0x00 (null byte). Выясним, почему это происходит:
1С:Сканер штрихкода ожидает завершения передачи в течение определенного времени. Если пауза между фрагментами одного штрихкода превышает установленный порог, драйвер считает передачу завершенной и генерирует «Внешнее событие» для части кода.Первоочередной задачей является проверка версии внутреннего ПО сканера. Рассмотрим этот процесс подробнее. Для многих моделей Atol, включая Impulse 12 BT, производитель выпускал исправления, касающиеся именно работы Bluetooth-стека. В ранних версиях прошивки (до середины 2023 года) алгоритм упаковки данных в SPP-пакеты работал нестабильно.
Нам необходимо скачать утилиту Atol Scanner Service Tool с официального сайта или центра загрузок. Подключим сканер к компьютеру через USB-кабель (в режиме эмуляции COM-порта) и выполним проверку обновлений. Если доступна версия выше 1.20, ее обязательно нужно установить. Обновление прошивки часто устраняет проблему генерации лишних 0x00 символов при передаче длинных последовательностей.
Если обновление прошивки не решило проблему полностью, разберем способ замедления передачи данных. В режиме SPP данные улетают в порт на максимально возможной скорости. Мобильная платформа 1С иногда не успевает «склеить» поток данных, воспринимая задержки в миллисекунды как конец сообщения.
Посмотрим на настройки сканера в его руководстве пользователя. Нам нужно найти штрихкоды для программирования Inter-character Delay. Рекомендуется установить задержку в диапазоне 5–10 мс. Это заставит сканер делать микропаузы между отправкой каждого байта. Для пользователя это будет незаметно (сканирование марки займет на доли секунды больше), но драйвер 1С получит более стабильный поток данных без резких обрывов буфера.
Даже в режиме SPP драйвер 1С использует параметр тайм-аута для определения целостности считанного кода. Проанализируем настройки в интерфейсе «Подключаемое оборудование»:
Это позволит драйверу дольше ждать следующую порцию данных от Bluetooth-модуля, прежде чем генерировать событие ОбработкаВнешнегоСобытия. Рассмотрим пример того, как это выглядит в коде мобильного приложения при ручной обработке (если вы используете самописное решение):
// Пример логики склейки данных, если драйвер все же разбивает код
&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
Если Событие = "Barcode" Тогда
// Накапливаем данные в переменную модуля
НакопленныйШтрихкод = НакопленныйШтрихкод + Данные;
// Сбрасываем старый обработчик ожидания
ОтключитьОбработчикОжидания("ЗавершитьСборкуШтрихкода");
// Запускаем новый сбор через 300 мс
ПодключитьОбработчикОжидания("ЗавершитьСборкуШтрихкода", 0.3, Истина);
КонецЕсли;
КонецПроцедуры
Символы 0x00 и разрывы могут быть вызваны попытками сканера интерпретировать спецсимволы (например, GS разделители 0x1D) внутри марки. Разберем, как заставить сканер передавать «чистые» данные. В сервисном руководстве Atol найдите и считайте следующие настроечные коды: если в процессе передачи символы разделителей все же теряются, для их программного восстановления можно применить расширение для восстановления символов GS в кодах маркировки.
Disable, чтобы управляющие символы внутри DataMatrix не вызывали сбоев в Bluetooth-канале.Если специфика бизнес-процесса позволяет, проанализируем возможность перехода на режим HID (эмуляция клавиатуры). Как отмечают многие специалисты, в режиме клавиатуры сканеры Atol Impulse 12 BT работают значительно стабильнее с длинными кодами. Однако для этого на мобильном устройстве желательно использовать «Пустую клавиатуру» (Null Keyboard), чтобы при сканировании не всплывала экранная клавиатура Android, которая может искажать вводимые символы.
Важный момент: в режиме HID также необходимо увеличить Тайм-аут клавиатуры в настройках 1С до 150-200 мс, чтобы предотвратить разбиение марки на разные строки в документе.
Подводя итог, наиболее эффективным решением для SPP является связка «Обновление прошивки + Установка задержки между символами (10 мс) + Увеличение тайм-аута в драйвере 1С». Это гарантирует, что даже длинная акцизная марка будет принята мобильным устройством как единый массив данных без паразитных символов 0x00.