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

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

При работе с торговым оборудованием в «1С:Предприятие» системные администраторы и пользователи часто сталкиваются с неприятной ситуацией: при одном физическом сканировании штрихкода система ведет себя так, будто код был считан дважды. В справочнике товаров это вызывает сообщение о том, что штрихкод уже существует, а в рабочем месте кассира (РМК) — ошибки обработки или удвоение количества товара в чеке. Рассмотрим подробно причины этого поведения и способы их устранения на примере популярного сканера Symbol LS2208.

Причина 1. Дублирование настроек в справочнике «Подключаемое оборудование»

Проанализируем самую распространенную программную ошибку. Часто в конфигурации «1С:Розница» или «1С:Управление торговлей» для одного и того же рабочего места (компьютера) создается несколько записей для сканера штрихкода. Это может произойти при миграции настроек или ошибке ручного ввода.

Как проверить и исправить:

  1. Перейдем в раздел Администрирование — Подключаемое оборудование.
  2. Внимательно просмотрим список устройств с типом «Сканеры штрихкода».
  3. Если для текущего рабочего места (параметр РабочееМесто) создано два устройства, которые ссылаются на один и тот же порт (например, COM3), 1С будет инициализировать два экземпляра драйвера. Каждый из них «поймает» сигнал от порта и сгенерирует внешнее событие ВнешнееСобытие().
  4. Удалим или пометим на удаление лишнюю запись.

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

Причина 2. Конфликт суффиксов в настройках сканера

Сканеры штрихкодов передают данные пакетом, в конце которого обычно идет специальный управляющий символ — суффикс. Чаще всего это символы CR (Carriage Return — возврат каретки, код 13) и LF (Line Feed — перевод строки, код 10). Если сканер настроен передавать оба символа, а драйвер 1С ожидает только один, система может интерпретировать LF как второе, пустое или дублирующее сканирование.

Для исправления на сканере Symbol LS2208 необходимо перенастроить суффиксы. Выясним причину: 1С реагирует на суффикс CR как на сигнал окончания ввода. Если следом идет LF, он инициирует новое событие обработки.

Пошаговая инструкция по настройке суффикса:

  1. Найдем официальное руководство пользователя (Reference Guide) для Symbol/Zebra LS2208.
  2. Считаем управляющий штрихкод Set Suffix.
  3. Считаем последовательно цифровые штрихкоды из приложения к инструкции: 1, 0, 1, 3 (это соответствует коду ASCII для CR).
  4. Считаем штрихкод Enter для сохранения настроек.

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

Причина 3. Конфликт режимов Keyboard Wedge и COM-эмуляции

Рассмотрим более глубокую техническую ситуацию. Современные USB-сканеры могут работать в двух режимах:

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

Что нужно сделать:

Проанализируем настройки драйвера в 1С. Нажмем кнопку Тест устройства в карточке оборудования. Если при сканировании в окне теста появляется две строки с одним и тем же кодом, значит, проблема в драйвере или режиме порта. Попробуйте перевести сканер в режим USB CDC Host (считав соответствующий код из инструкции) и убедитесь, что в Windows установлен соответствующий драйвер (Zebra CDC Driver). При необходимости можно воспользоваться руководством по переводу сканера Symbol в режим эмуляции COM.

Причина 4. Параметры таймаута в драйвере 1С

В настройках драйвера «1С:Сканер штрихкода» или драйверов от АТОЛ есть параметр Таймаут (в миллисекундах). Он определяет время, в течение которого драйвер собирает приходящие от порта символы в одну строку.

Если таймаут установлен слишком маленьким (например, 5–10 мс), драйвер может «разорвать» один штрихкод на две части. Первая часть будет обработана как полноценный код, а оставшиеся символы — как второе событие.

Рекомендация: Установите таймаут в диапазоне 50–100 мс. Этого достаточно, чтобы даже при медленной передаче через COM-порт данные склеились в одну посылку.

Причина 5. Особенности обработки QR-кодов

Если проблема возникает только при сканировании 2D или QR-кодов (актуально для новых моделей сканеров Zebra), выясним ситуацию с невидимыми символами. QR-коды часто содержат символы-разделители (GS) или префиксы идентификации символики.

Драйвер 1С может быть настроен так, что он реагирует на управляющий символ внутри кода как на завершение ввода. В итоге одна часть кода попадает в обработку, а остаток генерирует второе «пустое» событие.

Решение: С помощью утилиты Zebra 123Scan проверьте параметры Transmit Code ID. Его следует отключить (значение None). Также стоит проверить, не включена ли функция ADF (Advanced Data Formatting), которая может дублировать данные по правилу «Send all data that remains».

Причина 6. Работа в терминальном режиме (RDP)

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

  1. Локальный драйвер на клиентской машине перехватывает штрихкод.
  2. Проброшенный COM-порт передает те же данные на сервер.
  3. Если на сервере запущена еще одна копия драйвера или настроена эмуляция клавиатуры, происходит дублирование.

В этом случае рекомендуется использовать только один способ доставки данных: либо через «Внешнее событие» с пробросом порта, либо через текстовый ввод (но тогда нужно отключить обработку внешних событий в 1С).

Пример кода для отладки события

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


Процедура ВнешнееСобытие(Источник, Событие, Данные)
    Сообщить("Источник: " + Источник + "; Событие: " + Событие + "; Данные: " + Данные);
    // Стандартная обработка
    // ...
КонецПроцедуры

Если при одном сканировании вы видите два сообщения в окне сообщений, значит, проблема в аппаратной настройке суффикса или дублировании устройств. Если сообщение одно, но товар добавляется дважды — проблему нужно искать в логике кода 1С (например, в процедуре ОбработкаШтрихкода).

Резюме по решению проблемы

Подводя итог, выполним следующие шаги для гарантированного устранения двойного считывания:

  1. Сбросим сканер на заводские настройки (штрихкод Set Factory Defaults).
  2. Настроим суффикс CR (код 13), исключив LF.
  3. Проверим список оборудования в 1С на наличие дубликатов для текущего рабочего места.
  4. Отрегулируем таймаут в настройках драйвера в 1С до 100 мс.

Эти действия в 95% случаев решают проблему некорректного поведения сканера Symbol LS2208 и аналогичных моделей в среде 1С.

← На главную