Как подключить сканер штрихкодов в режиме разрыва клавиатуры (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).

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

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

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

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

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


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

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

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


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

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

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


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

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

    Возврат 0; // Возвращаем 0, чтобы FormEx не обрабатывал символ дальше
КонецФункции

Важные моменты:

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

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

Мы могли бы, например, настроить сканер так, чтобы он перед штрихкодом отправлял F7, а после — Enter. В 1С мы бы тогда реализовали обработчик нажатия F7, который фокусируется на текстовом поле, куда должен быть введен штрихкод, или открывает специальное диалоговое окно.

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

Несмотря на кажущуюся простоту, метод Keyboard Wedge имеет ряд существенных недостатков, которые могут привести к проблемам в работе:

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

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

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

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

Давайте проанализируем, почему этот метод считается более предпочтительным:

  1. Надежность: Устраняются проблемы, связанные с раскладкой клавиатуры, регистром и передачей управляющих символов, которые характерны для режима Keyboard Wedge.
  2. Корректная работа с маркировкой: Этот режим позволяет корректно считывать сложные штрихкоды, такие как DataMatrix, используемые в системах маркировки товаров.
  3. Работа через RDP: Сканеры в режиме COM-порта стабильно работают через удаленный рабочий стол (RDP), что критично для многих организаций.
  4. Стандартные средства 1С: 1С изначально адаптирована для работы со сканерами через COM-порт. Большинство типовых конфигураций рассчитаны именно на такой способ подключения, используя стандартные драйверы.
  5. Автоматическая обработка: Не требуется дополнительных нажатий клавиш или сложной логики для ввода штрихкода. Драйвер и программа автоматически обрабатывают данные, как внешнее событие.
  6. Меньше искажений: Снижается вероятность искажения данных из-за одновременного ввода с клавиатуры или других устройств.

Настройка сканера и драйверов

Для работы в режиме эмуляции COM-порта необходимо выполнить следующие шаги:

  1. Установка драйвера эмуляции COM-порта: Сначала мы устанавливаем специализированный драйвер от производителя сканера. Этот драйвер позволяет операционной системе распознать USB-сканер как виртуальный COM-порт.
  2. Переключение сканера в режим COM: Затем мы переводим сам сканер в режим эмуляции COM-порта. Это, как правило, делается путем сканирования специальных штрихкодов из инструкции к сканеру.

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

Для работы со сканером в режиме COM-порта в 1С мы используем стандартные драйверы. Наиболее часто применяются компоненты ScanOpos.dll (разработка 1С) или драйверы от компании "Атол".

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

Мы должны подключить соответствующий драйвер. В зависимости от клиента (толстый клиент, веб-клиент) и версии 1С, это может выглядеть по-разному. Рассмотрим пример с драйвером "Атол":


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

В этом примере мы видим, как происходит подключение компоненты Scaner45 и создание объекта драйвера. Мы устанавливаем важные свойства: OldVersion = 0 (для современных драйверов), AutoDisable = 1 (автоматическое отключение после считывания) и DataEventEnabled = 1 (включение событий считывания данных).

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

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


Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
    // Источник - имя компоненты или драйвера (например, "АТОЛСканер")
    // Событие - тип события (например, "ScanData")
    // Данные - сам считанный штрихкод

    Если Источник = "АТОЛСканер" И Событие = "ScanData" Тогда
        Сообщить("Считан штрихкод: " + Данные);
        // Здесь Ваша логика обработки штрихкода (поиск товара, заполнение полей и т.д.)
        ОбработатьШтрихкод(Данные); 
    КонецЕсли;
КонецПроцедуры

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

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

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

Для мобильных приложений 1С также рекомендуется использовать объект "Устройство ввода" и соответствующий драйвер "1С:Сканер штрихкода (Native)".

Работа с несколькими программами и COM-портами

Если нам необходимо использовать один COM-порт (или эмулированный COM-порт) для нескольких программ одновременно, мы можем воспользоваться специализированными утилитами, такими как VSPE (Virtual Serial Port Emulator). Эта программа позволяет создать "разветвитель" (Splitter) COM-порта, который дублирует данные с одного физического порта на несколько виртуальных, к которым затем подключаются разные приложения.

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

Прежде чем приступать к настройке, давайте выясним, в каком режиме работает наш сканер. Это очень просто:

  1. Откройте любой текстовый редактор, например, "Блокнот" или "Word".
  2. Отсканируйте любой штрихкод.

Если штрихкод появляется в текстовом редакторе (как обычный текст), значит, сканер работает в режиме эмуляции клавиатуры (Keyboard Wedge). Если ничего не происходит, то, скорее всего, сканер уже находится в режиме эмуляции COM-порта или требует настройки.

Заключение

Мы рассмотрели два основных подхода к подключению сканера штрихкодов в 1С: режим разрыва клавиатуры (Keyboard Wedge) и режим эмуляции COM-порта. Несмотря на кажущуюся простоту первого метода, он часто сопряжен с рядом проблем, требующих сложной программной обработки. Режим эмуляции COM-порта, напротив, является более стабильным, надежным и предпочтительным решением, которое полностью поддерживается стандартными средствами 1С и позволяет избежать многих сложностей. Мы настоятельно рекомендуем использовать именно этот подход для интеграции сканеров штрихкодов в Ваши системы 1С.

← К списку