При автоматизации складского учета или розничной торговли часто возникает ситуация, когда оборудование работает нестабильно в терминальной среде. Одной из специфических проблем является «проглатывание» или обрезка части штрихкода (например, передаются только последние 6 цифр из 13) при использовании беспроводного сканера Атол Импульс в связке с 1С через RDP. Примечательно, что при подключении по кабелю или при проверке в обычном блокноте проблема может не проявляться, но в учетной системе данные приходят искаженными.
В этой статье мы подробно разберем причины возникновения такой ошибки и проанализируем несколько способов ее решения: от простой корректировки параметров драйвера до изменения режима работы самого устройства.
Давайте разберем физику процесса. Когда сканер настроен в режиме эмуляции клавиатуры (HID), он отправляет считанные данные в систему как последовательность нажатий клавиш. В случае с беспроводным соединением и работой через протокол RDP возникает дополнительное звено — передача пакетов по сети. Если канал связи нестабилен или загружен, пакеты с «нажатиями клавиш» могут приходить с задержкой или теряться. 1С, ожидая поток данных, может интерпретировать задержку как окончание ввода и начать обрабатывать только ту часть штрихкода, которая успела «проскочить» в буфер.
Это самый быстрый и часто самый эффективный способ, который помог участникам обсуждения. Если вы используете классический драйвер Атол для подключения оборудования, нам необходимо увеличить время ожидания между приходом символов.
Рассмотрим пошагово, как это сделать:
Проанализируем более надежный технический подход. Режим клавиатуры (HID) всегда будет уязвим в RDP-среде из-за особенностей обработки клавиатурных прерываний. Перевод сканера в режим Virtual COM Port позволяет передавать штрихкод не посимвольно, а единым пакетом (событием), что исключает его разрыв.
Для реализации этого метода выполним следующие действия:
При таком подходе 1С будет использовать механизм ExternalEvent (Внешнее событие), который работает гораздо стабильнее «клавиатурного» ввода.
Если перевод в COM-режим по каким-то причинам невозможен, мы можем замедлить сам сканер. У Атол Импульс есть внутренний параметр Inter-character Delay (межсимвольная задержка).
Посмотрим, как это работает: сканер будет имитировать нажатия клавиш не мгновенно, а с микропаузой (например, 20–50 мс между каждой цифрой). Это позволит сетевому протоколу RDP успевать упаковывать каждый символ в пакеты и доставлять их на сервер без потерь.
Алгоритм действий:
Иногда 1С «теряет» начало или конец штрихкода из-за некорректной настройки префиксов. В среде RDP крайне важно, чтобы 1С понимала начало ввода данных со сканера. Рассмотрим программную настройку в 1С:
Рекомендуется запрограммировать сканер на передачу префикса (например, клавиши F7) и суффикса (клавиши Enter). В настройках драйвера 1С укажем соответствующие значения. Это заставит систему принудительно открывать окно ввода или фокусироваться на поле до того, как основной поток цифр поступит в буфер.
Пример настройки префикса в коде (если вы пишете обработку внешнего события самостоятельно):
Процедура ВнешнееСобытие(Источник, Событие, Данные)
// Данные — это считанный штрихкод
Если Событие = "BarCodeValue" Тогда
Штрихкод = СокрЛП(Данные);
// Проанализируем длину считанного кода
Если СтрДлина(Штрихкод) < 13 Тогда
Сообщить("Внимание: считан неполный код! Длина: " + СтрДлина(Штрихкод));
КонецЕсли;
// Дальнейшая логика поиска товара
КонецЕсли;
КонецПроцедуры
Выясним, какие настройки сети могут влиять на качество ввода. Если вы используете стандартное подключение Windows, попробуйте следующие оптимизации:
Подводя итог, можно сказать, что в большинстве случаев проблема решается именно увеличением чувствительности до 500 мс в настройках драйвера Атол. Это компенсирует сетевые задержки RDP и гарантирует корректную передачу всей строки данных штрихкода в 1С.