При работе с программным обеспечением 1С часто возникает задача подключения сканера штрихкодов. Один из самых простых на первый взгляд способов — это подключение сканера в режиме разрыва клавиатуры, также известном как Keyboard Wedge (KBW). В этом режиме сканер имитирует обычную клавиатуру, и считанный штрихкод просто "вводится" в активное текстовое поле, как если бы его набрал пользователь. Однако, как мы выясним, этот подход имеет свои особенности и потенциальные сложности.
Мы рассмотрим подробнее, как реализовать подключение сканера в режиме Keyboard Wedge, а также проанализируем более современный и надежный метод — эмуляцию COM-порта, который зачастую является предпочтительным решением для большинства задач в 1С.
Этот метод основан на том, что сканер, работая в режиме Keyboard Wedge, передает штрихкод как последовательность символов, за которой обычно следует символ "Enter" или другой управляющий символ. Для корректной работы в 1С нам потребуется настроить сам сканер и разработать механизм перехвата и обработки этих символов.
Прежде всего, давайте разберемся с настройкой самого сканера. Для того чтобы программа могла однозначно определить начало и конец штрихкода, сканеры в режиме Keyboard Wedge часто настраиваются на передачу специальных символов:
F7) или управляющий символ (STX - Start of Text, ASCII-код 2).ETX - End of Text, ASCII-код 3).Настройка префиксов и суффиксов производится непосредственно на сканере. Для этого обычно используются специальные штрихкоды из руководства пользователя сканера. Мы сканируем штрихкод входа в режим программирования, затем штрихкоды, соответствующие нужным префиксу и суффиксу, и, наконец, штрихкод выхода из режима программирования. Например, мы можем настроить сканер на передачу STX в качестве префикса и ETX в качестве суффикса.
Для перехвата символов, которые сканер "печатает" в форму 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, упомянутый в обсуждении, — это настройка сканера на передачу префикса в виде функциональной клавиши, например, F7. Затем в 1С мы создаем обработчик для этой комбинации клавиш, который открывает поле ввода штрихкода.
Мы могли бы, например, настроить сканер так, чтобы он перед штрихкодом отправлял F7, а после — Enter. В 1С мы бы тогда реализовали обработчик нажатия F7, который фокусируется на текстовом поле, куда должен быть введен штрихкод, или открывает специальное диалоговое окно.
Несмотря на кажущуюся простоту, метод Keyboard Wedge имеет ряд существенных недостатков, которые могут привести к проблемам в работе:
Shift, Ctrl или Alt, штрихкод может быть искажен.В связи с этими сложностями, многие разработчики и пользователи предпочитают более надежные и функциональные методы подключения сканеров.
Современный и, безусловно, предпочтительный способ подключения сканера штрихкодов к 1С — это использование режима эмуляции COM-порта (USB-COM). В этом режиме сканер подключается к компьютеру через USB-кабель, но операционная система распознает его как виртуальный COM-порт. Это позволяет 1С взаимодействовать со сканером как с полноценным периферийным устройством через специализированные драйверы.
Давайте проанализируем, почему этот метод считается более предпочтительным:
Для работы в режиме эмуляции COM-порта необходимо выполнить следующие шаги:
Для работы со сканером в режиме 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С (начиная с 8.3) для работы со сканерами штрихкодов рекомендуется использовать встроенную внешнюю компоненту "1С:Сканер штрихкода" (Native). Эта компонента поддерживает различные режимы подключения, включая клавиатурный, виртуальный COM-порт и другие, предоставляя унифицированный интерфейс для работы с оборудованием.
Для мобильных приложений 1С также рекомендуется использовать объект "Устройство ввода" и соответствующий драйвер "1С:Сканер штрихкода (Native)".
Если нам необходимо использовать один COM-порт (или эмулированный COM-порт) для нескольких программ одновременно, мы можем воспользоваться специализированными утилитами, такими как VSPE (Virtual Serial Port Emulator). Эта программа позволяет создать "разветвитель" (Splitter) COM-порта, который дублирует данные с одного физического порта на несколько виртуальных, к которым затем подключаются разные приложения.
Прежде чем приступать к настройке, давайте выясним, в каком режиме работает наш сканер. Это очень просто:
Если штрихкод появляется в текстовом редакторе (как обычный текст), значит, сканер работает в режиме эмуляции клавиатуры (Keyboard Wedge). Если ничего не происходит, то, скорее всего, сканер уже находится в режиме эмуляции COM-порта или требует настройки.
Мы рассмотрели два основных подхода к подключению сканера штрихкодов в 1С: режим разрыва клавиатуры (Keyboard Wedge) и режим эмуляции COM-порта. Несмотря на кажущуюся простоту первого метода, он часто сопряжен с рядом проблем, требующих сложной программной обработки. Режим эмуляции COM-порта, напротив, является более стабильным, надежным и предпочтительным решением, которое полностью поддерживается стандартными средствами 1С и позволяет избежать многих сложностей. Мы настоятельно рекомендуем использовать именно этот подход для интеграции сканеров штрихкодов в Ваши системы 1С.
← К списку