Каждый специалист по автоматизации розничной торговли рано или поздно сталкивается со странным поведением сканера штрихкодов: в текстовый редактор (например, Блокнот) код считывается идеально, но при работе в интерфейсе кассира 1С штрихкод буквально «рвется» на куски. Часть символов успевает подставиться в поле поиска, а оставшаяся часть вызывает ошибку конфигурации: «Считанный штрихкод не может быть обработан. Необходимо убедиться, что данный штрихкод зарегистрирован в ИБ...».
В этой статье мы подробно проанализируем ситуацию, выясним физические и программные причины возникновения этой проблемы на примере сканера Opticon OPR-3201 в связке с конфигурацией 1С:Управление торговлей 10.3, и разберем по шагам два метода ее решения.
Когда сканер штрихкодов настроен в режиме эмуляции клавиатуры (Keyboard Wedge), компьютер «думает», что данные вводит человек, нажимающий на клавиши с невероятно высокой скоростью. Символы штрихкода поступают в операционную систему последовательно, один за другим.
Драйвер торгового оборудования 1С постоянно перехватывает этот поток ввода. Чтобы отличить случайное нажатие клавиши кассиром от сканирования реального штрихкода, драйвер использует временной интервал — таймаут клавиатуры (или чувствительность). Если интервал времени между приходом двух соседних символов укладывается в заданный лимит (например, 30–50 миллисекунд), драйвер считает их единым штрихкодом. Если же интервал превышен, драйвер принимает решение, что передача кода завершена, и отправляет первую полученную часть в 1С как готовое внешнее событие.
Символы, которые продолжают поступать от сканера после превышения таймаута, воспринимаются системой уже как последующий ручной ввод или как новый огрызок штрихкода. Это приводит к следующим негативным факторам:
Рассмотрим подробнее два способа решения этой проблемы: от простой корректировки параметров клавиатурного режима до надежного перевода устройства в режим эмуляции COM-порта.
---
Если специфика вашего рабочего места требует оставить сканер в режиме клавиатурного разрыва, нам необходимо искусственно компенсировать задержки передачи данных.
Шаг 1. Настройка чувствительности в 1С
Нам потребуется увеличить время ожидания драйвера. Для этого выполним следующие действия:
30–50 мс. Увеличим его экспериментально до 100–150 мс.Важное замечание: Не устанавливайте чувствительность более 200 мс. В противном случае, если кассир будет очень быстро вводить артикул товара или количество вручную на клавиатуре, система может ошибочно принять этот ввод за сканирование штрихкода.
Шаг 2. Программирование суффикса возврата каретки (Enter)
Без четкого сигнала окончания передачи штрихкода драйвер 1С вынужден ждать окончания таймаута «вслепую». Чтобы этого избежать, сканер должен принудительно посылать в конце кода специальный символ — суффикс (обычно это возврат каретки CR или перевод строки LF, соответствующие клавише Enter).
Разберем по шагам, как настроить суффикс на самом сканере:
13 (код клавиши Enter) или выберем '#13' / 'CR' из выпадающего списка.---
Использование клавиатурного режима в профессиональной автоматизации — это всегда компромисс. Самым надежным решением, полностью исключающим любые разрывы штрихкода, является перевод сканера в режим работы по RS-232 (Virtual COM-port).
При такой схеме данные от сканера передаются не посимвольно в активное окно, а единым защищенным пакетом напрямую в порт. Платформа 1С мгновенно перехватывает этот пакет через механизм внешнего события, даже если в программе открыто модальное окно или фокус ввода не установлен в поле поиска.
Проанализируем ситуацию перевода сканера Opticon OPR-3201 в режим эмуляции COM-порта по шагам:
Шаг 1. Установка драйвера виртуального COM-порта в Windows
Прежде чем программировать сканер, операционная система должна научиться распознавать его как виртуальный последовательный порт. Скачайте с официального сайта Opticon программное обеспечение Opticon USB-to-Serial Driver. Запустите установщик от имени администратора и завершите установку драйвера в системе.
Шаг 2. Программирование интерфейса сканера
Теперь необходимо заставить сам сканер отдавать данные по интерфейсу USB-COM, а не USB-Keyboard. Для этого возьмите сервисную инструкцию и считайте сканирующим лучом следующие системные коды:
После считывания кода сохранения настроек операционная система Windows должна издать характерный звук подключения нового USB-устройства.
Шаг 3. Определение номера COM-порта
Выясним, какой именно виртуальный порт был назначен нашему устройству:
Win + X и выберите Диспетчер устройств (или выполните команду devmgmt.msc в строке «Выполнить»).COM3).Шаг 4. Перенастройка оборудования в 1С
Возвращаемся в конфигурацию 1С:Управление торговлей и завершаем настройку:
COM3).9600 bps, но для USB-эмуляции это значение не играет критической роли).---
Посмотрим на пример того, как платформа обрабатывает входящие данные от сканера. Когда сканер работает в режиме COM-порта, 1С генерирует внешнее событие, которое перехватывается в модуле формы или в модуле приложения. Разберем базовый пример обработки события в обычных формах:
Процедура ВнешнееСобытие(Источник, Событие, Данные)
// Проверим, что событие пришло именно от нашего сканера штрихкодов
Если ПолучитьПолучателяСобытия(Источник) = "СканерШтрихкода" Тогда
ОчищенныйШтрихкод = СокрЛП(Данные);
// Передаем штрихкод в стандартный модуль обработки торгового оборудования
СтруктураНоменклатуры = РаботаСТорговымОборудованием.ПоискНоменклатурыПоШтрихкоду(ОчищенныйШтрихкод);
Если СтруктураНоменклатуры.Найдено Тогда
// Добавляем найденный товар в табличную часть документа
ДобавитьТоварВТабличноеПоле(СтруктураНоменклатуры.Значение);
Иначе
Предупреждение("Товар со штрихкодом " + ОчищенныйШтрихкод + " не зарегистрирован в базе данных!");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Как мы видим, при COM-подключении весь штрихкод целиком попадает в переменную Данные, исключая промежуточную обработку операционной системой в качестве клавиатурных нажатий. Это гарантирует надежную работу кассового узла без сбоев и зависаний.