Как реализовать быстрое и удобное сканирование штрихкодов в мобильной платформе 1С

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

Работа со штрихкодами (ШК) является критически важной задачей для любого мобильного решения в сфере складского учета, логистики или розничной торговли. Однако многие разработчики сталкиваются с тем, что стандартные средства 1С не всегда обеспечивают требуемую скорость и стабильность считывания, а использование сторонних библиотек вызывает вопросы по настройке интерфейса. В этой статье мы подробно разберем, как реализовать эффективное сканирование, рассмотрим несколько подходов — от штатных функций до использования внешних приложений через Intent, и выясним, как аппаратная часть влияет на результат.

Метод 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");

Метод 2: Использование штатных средств платформы 1С

Начиная с версии 8.3.10, мобильная платформа 1С существенно улучшила работу с камерой. Штатный метод СредстваМультимедиа.ПоказатьСканированиеШтрихКодов стал работать быстрее и получил поддержку новых функций. Разберем, как правильно реализовать этот метод, используя асинхронный вызов через ОписаниеОповещения.

Сначала подготовим процедуру вызова:


&НаКлиенте
Процедура ОткрытьИнтерфейсСканирования(Команда)
    ОбработчикСканирования = Новый ОписаниеОповещения("ОбработкаСканирования", ЭтотОбъект);
    ОбработчикЗакрытия = Новый ОписаниеОповещения("ОбработкаЗакрытияИнтерфейса", ЭтотОбъект);
    
    // Вызов штатного окна сканирования
    СредстваМультимедиа.ПоказатьСканированиеШтрихКодов("Наведите камеру на штрихкод", 
                                                      ОбработчикСканирования, 
                                                      ОбработчикЗакрытия, 
                                                      ТипШтрихКода.EAN13);
КонецПроцедуры

Затем создадим процедуру обработки результата. Обратите внимание, что в современных версиях платформы можно управлять непрерывным сканированием. Если параметр Отказ в обработчике не устанавливать в значение Истина, камера не закроется, что позволит сканировать товары один за другим.


&НаКлиенте
Процедура ОбработкаСканирования(Штрихкод, Результат, Сообщение, ДополнительныеПараметры) Экспорт
    Если Результат Тогда
        // Проверяем корректность считанного кода
        Если СтрДлина(Штрихкод) < 13 Тогда
            Сообщить("Ошибка: Считан неполный штрихкод. Попробуйте еще раз.");
        Иначе
            Сообщить("Считан код: " + Штрихкод);
            // Здесь можно добавить логику поиска товара в базе
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Метод 3: Оптимизация работы и решение проблем с «лагами»

Если вы заметили, что сканер «тормозит» (низкая частота кадров), причина может быть не только в коде, но и в аппаратных ограничениях или настройках. Рассмотрим основные способы оптимизации:

  1. Выбор оборудования: Для качественного и быстрого сканирования критически важен фазовый автофокус (PDAF). Устройства с обычным контрастным автофокусом тратят слишком много времени на фокусировку на близком расстоянии. Хорошим примером бюджетного устройства для работы является серия Xiaomi Redmi (например, модель 5A и выше), где фазовый автофокус позволяет считывать код за 2–3 секунды даже при посредственном освещении.
  2. Программные проверки: Часто сканер срабатывает слишком быстро, считывая только часть кода. Всегда добавляйте проверку на количество символов и контрольную сумму. Если вы ожидаете EAN13, а пришло 8 цифр — программно выдавайте предупреждение и требуйте пересканировать.
  3. Подсветка (фонарик): В условиях плохого освещения (например, на складе между стеллажами) необходимо использовать вспышку. В сторонних приложениях, таких как zxing, фонарик часто включается кнопкой громкости. В штатном мобильном приложении 1С управление вспышкой доступно через свойства объекта СредстваМультимедиа.

Метод 4: Профессиональный подход (Broadcast Intent и ТСД)

Если вы строите решение для интенсивной работы (инвентаризация склада на тысячи позиций), использование камеры смартфона может быть нецелесообразным из-за высокой утомляемости рук и разряда батареи. В этом случае лучше использовать защищенные терминалы сбора данных (ТСД) со встроенным лазерным или имидж-сканером.

Для таких устройств наиболее эффективен механизм Broadcast Intent. ТСД настраивается так, чтобы после успешного сканирования он отправлял «сообщение» системе Android. 1С перехватывает это сообщение через процедуру ПриВнешнемСобытии. Рассмотрим этот алгоритм:

Этот способ позволяет сканировать мгновенно, без вызова каких-либо окон и прерывания работы интерфейса 1С. Скорость работы в таком режиме в десятки раз превышает возможности любой камеры смартфона.

Выводы

Мы проанализировали ситуацию и выяснили, что для создания жизнеспособного аналога ТСД на базе смартфона необходимо:

  1. Выбирать устройства с быстрым фазовым автофокусом.
  2. Использовать либо современные штатные методы 1С (начиная с 8.3.10+), либо внешние приложения-сканеры через Intent.
  3. Обязательно внедрять программные фильтры для проверки целостности считанных данных.
  4. При наличии бюджета переходить на профессиональные ТСД, интегрируя их через механизм ВнешнееСобытие.

Такой подход позволит вам создать удобное мобильное рабочее место, которое будет стабильно работать в реальных условиях эксплуатации, обеспечивая высокую скорость обработки документов инвентаризации, списания или поступления товаров.

← На главную