Работа со штрихкодами (ШК) является критически важной задачей для любого мобильного решения в сфере складского учета, логистики или розничной торговли. Однако многие разработчики сталкиваются с тем, что стандартные средства 1С не всегда обеспечивают требуемую скорость и стабильность считывания, а использование сторонних библиотек вызывает вопросы по настройке интерфейса. В этой статье мы подробно разберем, как реализовать эффективное сканирование, рассмотрим несколько подходов — от штатных функций до использования внешних приложений через Intent, и выясним, как аппаратная часть влияет на результат.
Один из самых популярных способов ускорить сканирование на обычных смартфонах — это делегирование задачи специализированному приложению (например, ZXing Barcode Scanner или современным аналогам на базе Google ML Kit). Это позволяет использовать оптимизированные алгоритмы распознавания, которые работают значительно быстрее штатных средств старых версий платформы 1С.
Рассмотрим пример кода для вызова внешнего сканера. Для этого мы будем использовать объект ЗапускПриложенияМобильногоУстройства. Проанализируем, как это работает:
#Если МобильноеПриложениеКлиент ТОГДА
НовВз = Новый ЗапускПриложенияМобильногоУстройства;
НовВз.Действие = "com.google.zxing.client.android.SCAN";
// Пытаемся запустить приложение и дождаться результата
Результат = НовВз.Запустить(Истина);
Если Результат = 0 Тогда // 0 обычно означает успех в Android-интентах
Для Каждого Стр Из НовВз.ДополнительныеДанные Цикл
// Ключ "SCAN_RESULT" содержит сам штрихкод
Если Стр.Ключ = "SCAN_RESULT" Тогда
Штрихкод = Стр.Значение;
Сообщить("Отсканирован ШК: " + Штрихкод);
КонецЕсли;
КонецЦикла;
КонецЕсли;
#КонецЕсли
Важный нюанс: при использовании библиотеки zxing разработчики часто сталкиваются с проблемой принудительной смены ориентации экрана на горизонтальную. Если пользователю нужно отсканировать сотни товаров, постоянное переворачивание смартфона крайне неудобно. Чтобы решить эту проблему, можно поискать альтернативные приложения-сканеры, поддерживающие вертикальный режим по умолчанию, или передавать дополнительные параметры (Extras) в интент, если приложение-сканер их поддерживает.
Например, для некоторых версий сканеров можно попробовать передать параметр ориентации:
НовВз.ДополнительныеДанные.Добавить("SCAN_ORIENTATION_6", "6");
Начиная с версии 8.3.10, мобильная платформа 1С существенно улучшила работу с камерой. Штатный метод СредстваМультимедиа.ПоказатьСканированиеШтрихКодов стал работать быстрее и получил поддержку новых функций. Разберем, как правильно реализовать этот метод, используя асинхронный вызов через ОписаниеОповещения.
Сначала подготовим процедуру вызова:
&НаКлиенте
Процедура ОткрытьИнтерфейсСканирования(Команда)
ОбработчикСканирования = Новый ОписаниеОповещения("ОбработкаСканирования", ЭтотОбъект);
ОбработчикЗакрытия = Новый ОписаниеОповещения("ОбработкаЗакрытияИнтерфейса", ЭтотОбъект);
// Вызов штатного окна сканирования
СредстваМультимедиа.ПоказатьСканированиеШтрихКодов("Наведите камеру на штрихкод",
ОбработчикСканирования,
ОбработчикЗакрытия,
ТипШтрихКода.EAN13);
КонецПроцедуры
Затем создадим процедуру обработки результата. Обратите внимание, что в современных версиях платформы можно управлять непрерывным сканированием. Если параметр Отказ в обработчике не устанавливать в значение Истина, камера не закроется, что позволит сканировать товары один за другим.
&НаКлиенте
Процедура ОбработкаСканирования(Штрихкод, Результат, Сообщение, ДополнительныеПараметры) Экспорт
Если Результат Тогда
// Проверяем корректность считанного кода
Если СтрДлина(Штрихкод) < 13 Тогда
Сообщить("Ошибка: Считан неполный штрихкод. Попробуйте еще раз.");
Иначе
Сообщить("Считан код: " + Штрихкод);
// Здесь можно добавить логику поиска товара в базе
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Если вы заметили, что сканер «тормозит» (низкая частота кадров), причина может быть не только в коде, но и в аппаратных ограничениях или настройках. Рассмотрим основные способы оптимизации:
EAN13, а пришло 8 цифр — программно выдавайте предупреждение и требуйте пересканировать.zxing, фонарик часто включается кнопкой громкости. В штатном мобильном приложении 1С управление вспышкой доступно через свойства объекта СредстваМультимедиа.Если вы строите решение для интенсивной работы (инвентаризация склада на тысячи позиций), использование камеры смартфона может быть нецелесообразным из-за высокой утомляемости рук и разряда батареи. В этом случае лучше использовать защищенные терминалы сбора данных (ТСД) со встроенным лазерным или имидж-сканером.
Для таких устройств наиболее эффективен механизм Broadcast Intent. ТСД настраивается так, чтобы после успешного сканирования он отправлял «сообщение» системе Android. 1С перехватывает это сообщение через процедуру ПриВнешнемСобытии. Рассмотрим этот алгоритм:
Action (например, "com.mycompany.scan").Этот способ позволяет сканировать мгновенно, без вызова каких-либо окон и прерывания работы интерфейса 1С. Скорость работы в таком режиме в десятки раз превышает возможности любой камеры смартфона.
Мы проанализировали ситуацию и выяснили, что для создания жизнеспособного аналога ТСД на базе смартфона необходимо:
Intent.ВнешнееСобытие.Такой подход позволит вам создать удобное мобильное рабочее место, которое будет стабильно работать в реальных условиях эксплуатации, обеспечивая высокую скорость обработки документов инвентаризации, списания или поступления товаров.