При работе с торговым оборудованием в «1С:Предприятие» системные администраторы и пользователи часто сталкиваются с неприятной ситуацией: при одном физическом сканировании штрихкода система ведет себя так, будто код был считан дважды. В справочнике товаров это вызывает сообщение о том, что штрихкод уже существует, а в рабочем месте кассира (РМК) — ошибки обработки или удвоение количества товара в чеке. Рассмотрим подробно причины этого поведения и способы их устранения на примере популярного сканера Symbol LS2208.
Проанализируем самую распространенную программную ошибку. Часто в конфигурации «1С:Розница» или «1С:Управление торговлей» для одного и того же рабочего места (компьютера) создается несколько записей для сканера штрихкода. Это может произойти при миграции настроек или ошибке ручного ввода.
Как проверить и исправить:
РабочееМесто) создано два устройства, которые ссылаются на один и тот же порт (например, COM3), 1С будет инициализировать два экземпляра драйвера. Каждый из них «поймает» сигнал от порта и сгенерирует внешнее событие ВнешнееСобытие().Разберем ситуацию, когда в системе создано несколько рабочих мест для одного и того же сетевого имени компьютера. 1С может подтягивать настройки из разных карточек, создавая «фантомные» подключения. Убедитесь, что активна только одна карточка оборудования для текущего сеанса.
Сканеры штрихкодов передают данные пакетом, в конце которого обычно идет специальный управляющий символ — суффикс. Чаще всего это символы CR (Carriage Return — возврат каретки, код 13) и LF (Line Feed — перевод строки, код 10). Если сканер настроен передавать оба символа, а драйвер 1С ожидает только один, система может интерпретировать LF как второе, пустое или дублирующее сканирование.
Для исправления на сканере Symbol LS2208 необходимо перенастроить суффиксы. Выясним причину: 1С реагирует на суффикс CR как на сигнал окончания ввода. Если следом идет LF, он инициирует новое событие обработки.
Пошаговая инструкция по настройке суффикса:
CR).После этих манипуляций сканер перестанет добавлять лишний символ перевода строки, и «двоение» в 1С должно прекратиться. Для такой задачи можно использовать готовую памятку со штрихкодами для быстрой настройки префикса и суффикса сканеров Symbol.
Рассмотрим более глубокую техническую ситуацию. Современные USB-сканеры могут работать в двух режимах:
Если сканер работает в режиме клавиатуры, но при этом в 1С он добавлен как COM-устройство через специализированный драйвер (например, 1C:Сканер штрихкода), может возникнуть эффект «эха». Программа получает данные один раз через эмуляцию клавиатуры (в фокус поля), и второй раз — через событие драйвера.
Что нужно сделать:
Проанализируем настройки драйвера в 1С. Нажмем кнопку Тест устройства в карточке оборудования. Если при сканировании в окне теста появляется две строки с одним и тем же кодом, значит, проблема в драйвере или режиме порта. Попробуйте перевести сканер в режим USB CDC Host (считав соответствующий код из инструкции) и убедитесь, что в Windows установлен соответствующий драйвер (Zebra CDC Driver). При необходимости можно воспользоваться руководством по переводу сканера Symbol в режим эмуляции COM.
В настройках драйвера «1С:Сканер штрихкода» или драйверов от АТОЛ есть параметр Таймаут (в миллисекундах). Он определяет время, в течение которого драйвер собирает приходящие от порта символы в одну строку.
Если таймаут установлен слишком маленьким (например, 5–10 мс), драйвер может «разорвать» один штрихкод на две части. Первая часть будет обработана как полноценный код, а оставшиеся символы — как второе событие.
Рекомендация: Установите таймаут в диапазоне 50–100 мс. Этого достаточно, чтобы даже при медленной передаче через COM-порт данные склеились в одну посылку.
Если проблема возникает только при сканировании 2D или QR-кодов (актуально для новых моделей сканеров Zebra), выясним ситуацию с невидимыми символами. QR-коды часто содержат символы-разделители (GS) или префиксы идентификации символики.
Драйвер 1С может быть настроен так, что он реагирует на управляющий символ внутри кода как на завершение ввода. В итоге одна часть кода попадает в обработку, а остаток генерирует второе «пустое» событие.
Решение: С помощью утилиты Zebra 123Scan проверьте параметры Transmit Code ID. Его следует отключить (значение None). Также стоит проверить, не включена ли функция ADF (Advanced Data Formatting), которая может дублировать данные по правилу «Send all data that remains».
Проанализируем ситуацию, если 1С запущена на удаленном сервере. При пробросе портов через RDP локальный компьютер и сервер могут конфликтовать.
В этом случае рекомендуется использовать только один способ доставки данных: либо через «Внешнее событие» с пробросом порта, либо через текстовый ввод (но тогда нужно отключить обработку внешних событий в 1С).
Для программистов 1С полезно будет посмотреть, как именно приходят данные. В модуле обычного приложения или в форме РМК можно временно добавить код в процедуру ВнешнееСобытие, чтобы увидеть, что именно посылает сканер:
Процедура ВнешнееСобытие(Источник, Событие, Данные)
Сообщить("Источник: " + Источник + "; Событие: " + Событие + "; Данные: " + Данные);
// Стандартная обработка
// ...
КонецПроцедуры
Если при одном сканировании вы видите два сообщения в окне сообщений, значит, проблема в аппаратной настройке суффикса или дублировании устройств. Если сообщение одно, но товар добавляется дважды — проблему нужно искать в логике кода 1С (например, в процедуре ОбработкаШтрихкода).
Подводя итог, выполним следующие шаги для гарантированного устранения двойного считывания:
Set Factory Defaults).CR (код 13), исключив LF.Эти действия в 95% случаев решают проблему некорректного поведения сканера Symbol LS2208 и аналогичных моделей в среде 1С.