Как в 1С на ТСД запускать процедуру по сканированию штрихкода, а не просто вводить текст?

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

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

Проблема: ТСД работает как клавиатура

Изначальная ситуация, с которой сталкиваются многие разработчики, заключается в том, что ТСД по умолчанию работает в режиме эмуляции клавиатуры. Это значит, что для операционной системы и для мобильного клиента 1С сканер — это просто внешняя клавиатура, которая очень быстро "набирает" цифры из штрихкода.

В этом случае обработать данные можно, но с ограничениями. Стандартный способ — повесить обработчик события ПриИзменении на поле ввода, куда попадают данные. Но это решение негибкое и неудобное для пользователя:

  1. Пользователю нужно сначала открыть определенную форму (например, "Рабочее место кладовщика").
  2. Затем установить курсор в нужное поле ввода.
  3. Только после этого сканировать штрихкод.

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

Правильное решение: работа со сканером как с внешним устройством через Intents

Чтобы реализовать глобальную обработку сканирования, нужно отказаться от режима эмуляции клавиатуры и настроить ТСД на работу в нативном режиме. Для устройств на Android это, как правило, означает использование системного механизма Intents (Намерения).

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

Рассмотрим по шагам, как это настроить.

Шаг 1. Настройка сканера на ТСД

Первым делом нужно зайти в настройки самого терминала. Обычно на ТСД есть предустановленное приложение для управления сканером (может называться "Scanner", "ScanTool", "Wedge" и т.п.). В этом приложении необходимо найти настройки вывода данных.

  1. Измените режим вывода. Вместо "Keyboard output" (Вывод с клавиатуры) или "Keyboard emulation" (Эмуляция клавиатуры) выберите режим "Intent" или "Broadcast Intent".
  2. Настройте параметры Intent. Система попросит указать параметры, которые будут использоваться для создания события. Самые важные из них:
    • Action (Действие) — это уникальная строка-идентификатор события. Ее нужно придумать и запомнить, например: com.mycompany.SCAN_EVENT. Именно на это имя будет реагировать 1С.
    • Extra key (Ключ для данных) — это имя переменной, в которой будут передаваться данные штрихкода. Например: DATA_STRING или barcode_data.

Важно: названия настроек и приложений могут сильно отличаться в зависимости от модели ТСД (Zebra, Honeywell, Chainway и др.). Если найти нужные настройки не получается, обратитесь к документации производителя вашего устройства.

Шаг 2. Настройка перехвата события в 1С

Теперь, когда ТСД отправляет системное событие при каждом сканировании, научим наше мобильное приложение 1С его "слышать" и обрабатывать. Это делается с помощью механизма внешних событий.

Всю настройку будем производить в конфигураторе 1С.

  1. Подписка на событие. В модуле мобильного приложения, в обработчике события ПриНачалеРаботыСистемы, нужно добавить вызов процедуры ПодключитьОбработчикВнешнегоСобытия.
    
    // Модуль мобильного приложения
    
    Процедура ПриНачалеРаботыСистемы()
        
        // Подключаем обработчик. Первым параметром указываем тот самый "Action",
        // который мы задали в настройках ТСД.
        ПодключитьОбработчикВнешнегоСобытия("com.mycompany.SCAN_EVENT", "ОбщиеМодулиСервер", "ОбработатьДанныеСканера");
        
    КонецПроцедуры
    

    Здесь мы говорим системе: "Когда в операционной системе произойдет событие с именем com.mycompany.SCAN_EVENT, вызови процедуру ОбработатьДанныеСканера из общего модуля ОбщиеМодулиСервер".

  2. Создание процедуры-обработчика. Теперь создадим саму процедуру в указанном общем модуле. Важно, чтобы этот модуль был доступен на мобильном клиенте (установлены флажки "Клиент (управляемое приложение)" и "Мобильное приложение-клиент").
    
    // Общий модуль "ОбщиеМодулиСервер"
    
    &НаКлиенте
    Процедура ОбработатьДанныеСканера(Источник, Событие, Данные) Экспорт
    
        // Параметр "Данные" - это структура, которая содержит
        // все дополнительные параметры, переданные в Intent.
        // Нам нужно получить значение по ключу, который мы задали на ТСД.
        
        Штрихкод = "";
        
        Если Данные.Свойство("DATA_STRING") Тогда // Имя ключа должно совпадать с настройкой на ТСД
            Штрихкод = Данные.DATA_STRING;
        Иначе
            // Можно попробовать найти другие стандартные ключи,
            // если точное имя неизвестно.
            Если Данные.Свойство("com.symbol.datawedge.data_string") Тогда
                Штрихкод = Данные["com.symbol.datawedge.data_string"];
            КонецЕсли;
        КонецЕсли;
    
        Если Не ПустаяСтрока(Штрихкод) Тогда
            // Штрихкод получен! Здесь размещаем всю бизнес-логику.
            ПоказатьПредупреждение(, "Отсканирован штрихкод: " + Штрихкод);
            
            // Например, ищем номенклатуру по штрихкоду
            // и открываем форму нового документа "ПеремещениеТоваров"
            // с уже заполненной номенклатурой.
            
            // ВАЖНО: вся логика должна выполняться на клиенте,
            // так как обработчик вызывается на мобильном устройстве.
        КонецЕсли;
    
    КонецПроцедуры
    

После публикации мобильного приложения с этими изменениями, любое сканирование штрихкода на ТСД (при запущенном приложении 1С) будет вызывать процедуру ОбработатьДанныеСканера, и вы сможете реализовать любую логику, не привязываясь к конкретной форме или полю ввода.

Альтернатива: готовые коммерческие решения

Если нет времени или желания разбираться с особенностями каждой модели ТСД, можно рассмотреть готовые программные комплексы от компаний вроде Cleverence. Такие решения обычно предоставляют:

Этот путь значительно ускоряет внедрение, но требует финансовых вложений и может быть менее гибким, чем собственная разработка.

← На главную