В практике автоматизации торговых точек и складов часто возникает классическая системная неполадка: при сканировании штрихкода в терминальной сессии (RDP) драйвер торгового оборудования генерирует сразу несколько внешних событий (два или три сообщения подряд), разбивая один штрихкод на части. При этом локально на компьютере (например, в блокнот) штрихкод считывается идеально — одним целым куском.
Давайте подробно проанализируем эту ситуацию на примере сканера Aokia AK-928 и старого бесплатного драйвера АТОЛ 6.5.3, работающих в конфигурации «1С:Управление торговым предприятием» (УТП), и найдем самые надежные способы устранения проблемы.
Прежде всего, проясним важную деталь, упомянутую в обсуждении. Изначально штрихкод длиной 19 символов ошибочно определялся как стандарт EAN13. Как справедливо заметили участники обсуждения, стандарт EAN13 по определению содержит только 13 цифр (12 значащих и 1 контрольный). В процессе диагностики выяснилось, что реальный тип штрихкода на этикетке — это Code128, который отлично поддерживает передачу длинных буквенно-цифровых последовательностей.
---
Для того чтобы решить проблему, нам нужно понять физику процесса. Данное поведение обусловлено совместной работой двух факторов: режимом эмуляции клавиатуры сканера и задержками протокола RDP.
Code128 на 19 символов, он пытается мгновенно отправить эти 19 нажатий клавиш в операционную систему.Локально сетевые задержки отсутствуют, поэтому локальный блокнот успевает принять все символы подряд без единого разрыва.
---
Если вы хотите оставить сканер в режиме клавиатурного ввода, самым быстрым решением будет увеличение времени ожидания в настройках самого драйвера на сервере. Разберем этот процесс по шагам:
30 или 50 миллисекунд.Важное предупреждение: не устанавливайте таймаут слишком большим (более 500 мс). При высоком значении драйвер будет долго «задумываться» перед отправкой штрихкода в 1С. Кроме того, обычный быстрый ввод пользователя с физической клавиатуры может начать ложно распознаваться драйвером как попытка сканирования.
---
Работа сканера штрихкодов «в разрыв клавиатуры» по RDP признана устаревшим и нестабильным решением. Самым надежным вариантом является перевод устройства в режим эмуляции COM-порта (USB-Virtual COM). В этом режиме данные передаются не как нажатия клавиш, а как цельный буфер данных через виртуальный последовательный порт. Сетевые задержки RDP при этом перестают влиять на целостность пакета.
Рассмотрим детально, как выполнить эту настройку:
COM3).mstsc.exe на локальном ПК, перейдите во вкладку «Локальные ресурсы», в блоке «Локальные устройства и ресурсы» нажмите кнопку «Подробнее...» и установите флажок напротив пункта «Порты».COM3 будет проброшен на сервер под именем COM3 (или под другим свободным номером, например, COM4).COM-порт.При таком подходе данные всегда будут приходить одним пакетом, независимо от сетевых лагов и пинга.
---
Иногда исправить ситуацию с задержками клавиатурного ввода можно простой регулировкой параметров клиента удаленного рабочего стола на локальном компьютере:
mstsc.exe, но не подключайтесь сразу к серверу.Это заставит Windows оптимизировать сетевой буфер обмена клавиатурными нажатиями и значительно снизит вероятность разрыва длинных штрихкодов, а также решит проблему с периодической хаотичной сменой регистра букв (когда строчные буквы в коде внезапно становятся заглавными).
---
Если нет возможности использовать эмуляцию COM-порта, можно попробовать перенастроить поведение самого сканера при передаче символов в режиме клавиатуры. Для этого обратитесь к руководству вашего оборудования:
---
Драйверы АТОЛ линейки 6.x давно устарели, не поддерживаются разработчиком и часто некорректно работают на современных операционных системах и платформах 1С. Рассмотрим две альтернативы, которые избавят вас от необходимости использовать этот софт:
В современных конфигурациях разработчики рекомендуют использовать бесплатный сертифицированный драйвер «1С:Сканер штрихкода». Он работает по технологии NativeAPI, полностью бесплатен, регулярно обновляется и содержит встроенные гибкие механизмы настройки таймаута клавиатуры, которые работают на порядок стабильнее старых компонент АТОЛ.
В платформе 1С реализован альтернативный механизм работы со сканером «в разрыв клавиатуры», который вообще не требует установки специальных драйверов торгового оборудования на стороне сервера:
F7), а в конце штрихкода отправлял суффикс (клавишу Enter).F7 вызывает штатное диалоговое окно поиска и ввода штрихкода.Enter. Этот метод полностью исключает влияние драйвера АТОЛ на процесс разбора данных.Для наглядности, в программном коде обычных форм обработка внешнего события при использовании COM-порта или специализированного драйвера выглядит следующим образом:
Процедура ВнешнееСобытие(Источник, Событие, Данные)
// Проверим, что событие пришло от сканера штрихкода
Если ПолучитьПолучателяСобытия(Источник) = "СканерШтрихкода" Тогда
// Очистим считанные данные от возможных пробелов и лишних символов
ОчищенныйШтрихкод = СокрЛП(Данные);
// Передаем обработанный штрихкод в процедуру поиска товара
ОбработатьШтрихкод(ОчищенныйШтрихкод);
КонецЕсли;
КонецПроцедуры
Использование предложенных подходов — особенно переход на эмуляцию COM-порта (Способ 2) или тонкая регулировка чувствительности (Способ 1) — позволит вам полностью избавиться от проблем разрыва кодов Code128 на удаленном рабочем столе и сделает работу пользователей быстрой и комфортной.