Как подключить сканер штрихкодов в режиме разрыва клавиатуры (Keyboard Wedge) к 1С и какие есть альтернативы?

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

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

Мы рассмотрим подробнее, как реализовать подключение сканера в режиме Keyboard Wedge, а также проанализируем более современный и надежный метод — эмуляцию COM-порта, который зачастую является предпочтительным решением для большинства задач в 1С.

Метод 1: Подключение сканера в режиме разрыва клавиатуры (Keyboard Wedge) без специализированных драйверов

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

Настройка сканера: префиксы и суффиксы

Прежде всего, давайте разберемся с настройкой самого сканера. Для того чтобы программа могла однозначно определить начало и конец штрихкода, сканеры в режиме Keyboard Wedge часто настраиваются на передачу специальных символов:

  1. Префикс: Это один или несколько символов, которые сканер передает перед основным штрихкодом. Например, это может быть функциональная клавиша (F7) или управляющий символ (STX - Start of Text, ASCII-код 2).
  2. Суффикс: Это символы, которые сканер передает после штрихкода. Часто это символ "Enter" (ASCII-код 13) или управляющий символ (ETX - End of Text, ASCII-код 3).

Настройка префиксов и суффиксов производится непосредственно на сканере. Для этого обычно используются специальные штрихкоды из руководства пользователя сканера. Мы сканируем штрихкод входа в режим программирования, затем штрихкоды, соответствующие нужным префиксу и суффиксу, и, наконец, штрихкод выхода из режима программирования.

Обработка ввода в 1С с помощью FormEx.dll

Для перехвата символов, которые сканер "печатает" в форму 1С, мы можем использовать внешнюю компоненту FormEx.dll. Эта компонента предоставляет предопределенную процедуру ПриНажатииКнопкиКлавиатуры, которая позволяет нам обрабатывать каждое нажатие клавиши.

Шаг 1: Подключение внешней компоненты.

Мы должны загрузить внешнюю компоненту FormEx.dll в нашу конфигурацию. Это можно сделать, например, при старте системы или при открытии формы, где требуется сканирование:


ЗагрузитьВнешнююКомпоненту("FormEx.dll");

Шаг 2: Реализация процедуры обработки нажатий клавиш.

Далее мы реализуем предопределенную процедуру ПриНажатииКнопкиКлавиатуры, которая будет вызываться при каждом нажатии клавиши, включая символы, вводимые сканером. Внутри этой процедуры мы можем вызвать нашу собственную функцию для обработки.


// Предопределенная процедура из FormEx.dll, используется для считывания штрих-кодов USB-сканером
Процедура ПриНажатииКнопкиКлавиатуры(Конт,КодКлавиши,Alt,Shift,Ctrl,Символ,ФСО) 
    МояОбработкаКлавиши(Конт,КодКлавиши,Alt,Shift,Ctrl,Символ,ФСО);
КонецПроцедуры

Шаг 3: Логика сбора штрихкода.

В нашей функции МояОбработкаКлавиши мы будем анализировать входящие символы. В некоторых случаях, если данные поступают не со сканера, а из документов, может потребоваться чтение штрих-кодов и QR из PDF или картинок, но при работе с Keyboard Wedge мы собираем строку посимвольно.


Функция МояОбработкаКлавиши(Конт,КодКлавиши,Alt,Shift,Ctrl,Символ,ФСО) Экспорт 
    // Проверяем, является ли текущий символ префиксом STX (ASCII 2)
    Если Символ = Симв(2) Тогда 
        Сообщить("Начало ШК");
        считываемШтрихКод = 1; // Устанавливаем флаг начала считывания
        глШтрихКод = ""; // Очищаем переменную для нового штрихкода
        Возврат 0; // Возвращаем 0, чтобы FormEx не обрабатывал символ дальше
    КонецЕсли;            

    // Проверяем, является ли текущий символ суффиксом ETX (ASCII 3)
    Если Символ = Симв(3) Тогда    
        Сообщить("Конец ШК"); 
        считываемШтрихКод = 0; // Сбрасываем флаг, считывание завершено
        // Вызываем нашу процедуру для обработки полученного штрихкода
        ОбработатьШтрихкод(); 
        Возврат 0;
    КонецЕсли; 
     
    // Если флаг считывания установлен, добавляем текущий символ к штрихкоду
    Если считываемШтрихКод = 1 Тогда 
        глШтрихКод = глШтрихКод + Символ; 
    КонецЕсли;

    Возврат 0; 
КонецФункции

Альтернативный подход в режиме Keyboard Wedge: Использование функциональных клавиш

Еще один вариант использования сканера в режиме Keyboard Wedge — это настройка сканера на передачу префикса в виде функциональной клавиши, например, F7. Затем в 1С мы создаем обработчик для этой комбинации клавиш, который открывает поле ввода штрихкода.

Недостатки метода Keyboard Wedge

Метод 2: Подключение сканера в режиме эмуляции COM-порта (USB-COM) – Рекомендуемый подход

Современный способ подключения сканера — использование режима эмуляции COM-порта. Это позволяет 1С взаимодействовать со сканером как с полноценным периферийным устройством. Для мобильных решений на базе Android также существует возможность реализовать подключение сканера Bluetooth в режиме SPP через NativeApi, что обеспечивает высокую стабильность работы.

Преимущества режима эмуляции COM-порта

  1. Надежность: Отсутствие проблем с раскладкой клавиатуры.
  2. Корректная работа с маркировкой: Уверенное считывание DataMatrix.
  3. Работа через RDP: Стабильная передача данных в терминальных сессиях.
  4. Автоматическая обработка: 1С обрабатывает данные как внешнее событие.

Подключение в 1С с использованием стандартных драйверов

Для работы со сканером в режиме COM-порта в 1С мы используем стандартные драйверы. При настройке складских процессов часто требуется не только считывание, но и печать на мобильных принтерах по bluetooth и сети этикеток в форматах ZPL или TSPL напрямую из системы.

Пример подключения драйвера (на примере Атол):


Функция ПодключитьСканер() Экспорт   
    Попытка   
        #Если ВебКлиент Тогда   
            ПодключитьВнешнююКомпоненту("ОбщийМакет.СканерАТОЛ","АТОЛСканер");   
            ДрайверСканШК = Новый("AddIn.АТОЛСканер.Scaner45");   
        #Иначе   
            ПодключитьВнешнююКомпоненту("AddIn.Scaner45");   
            ДрайверСканШК = Новый("AddIn.Scaner45");   
        #КонецЕсли   
        ДрайверСканШК.DataEventEnabled = 1;   
        Возврат Истина;
    Исключение   
        Возврат Ложь;
    КонецПопытки;
КонецФункции

Обработка внешнего события

После подключения драйвера, 1С получает штрихкод через процедуру ОбработкаВнешнегоСобытия.


Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
    Если Источник = "АТОЛСканер" И Событие = "ScanData" Тогда
        ОбработатьШтрихкод(Данные); 
    КонецЕсли;
КонецПроцедуры

Современные решения 1С

В современных версиях 1С (8.3) рекомендуется использовать встроенную компоненту "1С:Сканер штрихкода" (Native). Также стоит помнить, что для полноценной работы с печатными формами может пригодиться простая генерация QR и штрихкодов без библиотек и внешних компонент, что значительно упрощает разработку отчетов.

Как проверить режим работы сканера?

  1. Откройте "Блокнот".
  2. Отсканируйте любой штрихкод.

Если текст появился в блокноте — это Keyboard Wedge. Если нет — сканер в режиме COM-порта или требует настройки.

Заключение

Режим эмуляции COM-порта является более стабильным и надежным решением для интеграции сканеров. Помимо сканеров, для комплексного оснащения рабочих мест может потребоваться и другое оборудование, например, внешняя компонента SignotecPad для работы с дисплеями подписи, которая позволяет организовать безбумажный документооборот. Мы рекомендуем использовать именно специализированные интерфейсы подключения для достижения максимальной отказоустойчивости Вашей системы.

← На главную