Почему сканер штрихкодов разрывает код на части в 1С и как это исправить?

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

Каждый специалист по автоматизации розничной торговли рано или поздно сталкивается со странным поведением сканера штрихкодов: в текстовый редактор (например, Блокнот) код считывается идеально, но при работе в интерфейсе кассира 1С штрихкод буквально «рвется» на куски. Часть символов успевает подставиться в поле поиска, а оставшаяся часть вызывает ошибку конфигурации: «Считанный штрихкод не может быть обработан. Необходимо убедиться, что данный штрихкод зарегистрирован в ИБ...».

В этой статье мы подробно проанализируем ситуацию, выясним физические и программные причины возникновения этой проблемы на примере сканера Opticon OPR-3201 в связке с конфигурацией 1С:Управление торговлей 10.3, и разберем по шагам два метода ее решения.

Почему штрихкод разрывается: физика процесса

Когда сканер штрихкодов настроен в режиме эмуляции клавиатуры (Keyboard Wedge), компьютер «думает», что данные вводит человек, нажимающий на клавиши с невероятно высокой скоростью. Символы штрихкода поступают в операционную систему последовательно, один за другим.

Драйвер торгового оборудования 1С постоянно перехватывает этот поток ввода. Чтобы отличить случайное нажатие клавиши кассиром от сканирования реального штрихкода, драйвер использует временной интервал — таймаут клавиатуры (или чувствительность). Если интервал времени между приходом двух соседних символов укладывается в заданный лимит (например, 30–50 миллисекунд), драйвер считает их единым штрихкодом. Если же интервал превышен, драйвер принимает решение, что передача кода завершена, и отправляет первую полученную часть в 1С как готовое внешнее событие.

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

  1. Задержки ОС и процессора: В моменты пиковой нагрузки на процессор или оперативную память передача символов виртуальной клавиатурой кратковременно прерывается.
  2. Работа через USB-хабы: Дешевые или перегруженные USB-разветвители вносят микрозадержки в передачу пакетов данных.
  3. Использование RDP (удаленного рабочего стола): Сетевой пинг гарантированно разрывает непрерывный поток клавиатурных нажатий, из-за чего клавиатурный сканер в терминальной сессии практически никогда не работает стабильно.

Рассмотрим подробнее два способа решения этой проблемы: от простой корректировки параметров клавиатурного режима до надежного перевода устройства в режим эмуляции COM-порта.

---

Решение 1. Тонкая настройка режима клавиатуры (Keyboard Wedge)

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

Шаг 1. Настройка чувствительности в 1С

Нам потребуется увеличить время ожидания драйвера. Для этого выполним следующие действия:

  1. Перейдем в меню Сервис — Торговое оборудование — Подключение и настройка торгового оборудования.
  2. Откроем параметры нашего сканера штрихкодов.
  3. Найдем параметр «Чувствительность» (в старых драйверах АТОЛ) или «Таймаут клавиатуры» (в стандартном драйвере 1С).
  4. По умолчанию там может быть установлено значение в районе 30–50 мс. Увеличим его экспериментально до 100–150 мс.

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

Шаг 2. Программирование суффикса возврата каретки (Enter)

Без четкого сигнала окончания передачи штрихкода драйвер 1С вынужден ждать окончания таймаута «вслепую». Чтобы этого избежать, сканер должен принудительно посылать в конце кода специальный символ — суффикс (обычно это возврат каретки CR или перевод строки LF, соответствующие клавише Enter).

Разберем по шагам, как настроить суффикс на самом сканере:

  1. Найдем руководство по программированию сканера (для Opticon это брошюра Universal Menu Book, которую можно скачать на официальном сайте производителя).
  2. Считаем последовательно программирующие штрихкоды:
    • Штрихкод начала программирования: SET (или START).
    • Штрихкод включения суффикса: Add suffix или конкретно суффикс CR (Carrige Return).
    • Штрихкод завершения программирования: END.
  3. В настройках торгового оборудования 1С в поле «Суффикс» укажем значение 13 (код клавиши Enter) или выберем '#13' / 'CR' из выпадающего списка.

---

Решение 2. Перевод сканера в режим эмуляции COM-порта (Рекомендуемое)

Использование клавиатурного режима в профессиональной автоматизации — это всегда компромисс. Самым надежным решением, полностью исключающим любые разрывы штрихкода, является перевод сканера в режим работы по RS-232 (Virtual COM-port).

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

Проанализируем ситуацию перевода сканера Opticon OPR-3201 в режим эмуляции COM-порта по шагам:

Шаг 1. Установка драйвера виртуального COM-порта в Windows

Прежде чем программировать сканер, операционная система должна научиться распознавать его как виртуальный последовательный порт. Скачайте с официального сайта Opticon программное обеспечение Opticon USB-to-Serial Driver. Запустите установщик от имени администратора и завершите установку драйвера в системе.

Шаг 2. Программирование интерфейса сканера

Теперь необходимо заставить сам сканер отдавать данные по интерфейсу USB-COM, а не USB-Keyboard. Для этого возьмите сервисную инструкцию и считайте сканирующим лучом следующие системные коды:

  1. Штрихкод SET (вход в режим настройки конфигурации).
  2. Штрихкод USB COM Port (или Enable USB-VCP) — эта команда переключает внутренний контроллер сканера на работу в режиме виртуального COM-порта.
  3. Штрихкод END (сохранение настроек и перезагрузка устройства).

После считывания кода сохранения настроек операционная система Windows должна издать характерный звук подключения нового USB-устройства.

Шаг 3. Определение номера COM-порта

Выясним, какой именно виртуальный порт был назначен нашему устройству:

  1. Нажмите сочетание клавиш Win + X и выберите Диспетчер устройств (или выполните команду devmgmt.msc в строке «Выполнить»).
  2. Раскройте ветку Порты (COM и LPT).
  3. Найдите устройство с именем вида Opticon USB-to-Serial Driver... или Virtual COM Port.
  4. Запомните номер порта, указанный в скобках (например, COM3).

Шаг 4. Перенастройка оборудования в 1С

Возвращаемся в конфигурацию 1С:Управление торговлей и завершаем настройку:

  1. Открываем форму настройки параметров торгового оборудования.
  2. В поле «Порт» вместо значения «Клавиатура» выбираем наш порт (например, COM3).
  3. Настройки скорости (Baud rate), четности и битов данных оставляем по умолчанию (обычно скорость составляет 9600 bps, но для USB-эмуляции это значение не играет критической роли).
  4. Нажимаем кнопку «Тест устройства» и сканируем любой штрихкод. Код должен мгновенно появиться в окне теста одной целой строкой с указанием порта и типа считанного штрихкода.

---

Особенности обработки штрихкодов в коде 1С

Посмотрим на пример того, как платформа обрабатывает входящие данные от сканера. Когда сканер работает в режиме COM-порта, 1С генерирует внешнее событие, которое перехватывается в модуле формы или в модуле приложения. Разберем базовый пример обработки события в обычных формах:


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

КонецПроцедуры

Как мы видим, при COM-подключении весь штрихкод целиком попадает в переменную Данные, исключая промежуточную обработку операционной системой в качестве клавиатурных нажатий. Это гарантирует надежную работу кассового узла без сбоев и зависаний.

← На главную