При подключении считывателей магнитных карт (в частности, моделей марки Posiflex) к конфигурациям на базе обычных форм, таким как «1С:Управление торговлей 10.3», нередко возникает специфическая проблема: при проведении картой в текстовом редакторе («Блокнот») корректно считывается строка вида ;003043?, однако при попытке считать карту в поле ввода 1С вместо реального номера отображается длинная последовательность цифр (например, 059048048051048052051063).
Разберем природу этого поведения и подробно рассмотрим все способы устранения проблемы.
Считыватели магнитных карт, работающие в режиме эмуляции клавиатуры (HID Keyboard), по умолчанию настроены производителем на передачу символов с помощью так называемых Alt-кодов (Alt-Numpad sequence). В этом режиме устройство имитирует зажатие системной клавиши Alt и быстрый набор трехзначного ASCII-кода каждого символа на цифровой клавиатуре:
059 соответствует символу точки с запятой ; (начальный разделитель дорожки).048 соответствует цифре 0.051 соответствует цифре 3.052 соответствует цифре 4.063 соответствует знаку вопроса ? (конечный разделитель дорожки).Такой механизм используется для того, чтобы считывание не зависело от активной раскладки клавиатуры операционной системы (русская или английская). Однако платформа 1С в режиме прямого клавиатурного ввода в поле перехватывает нажатия отдельных цифровых клавиш до того, как операционная система успевает собрать их в единый символ. В результате в реквизит попадает сырая строка ASCII-кодов.
Кроме того, прямой ввод в активное поле формы не является штатным способом работы торгового оборудования в 1С. Рассмотрим варианты правильной настройки системы.
Основной и правильный способ работы с торговым оборудованием в конфигурации «1С:Управление торговлей 10.3» — использование специализированного драйвера устройств ввода и обработчика внешних событий. В этом случае поток данных перехватывается драйвером целиком и передается в программу через процедуру ОбработкаВнешнегоСобытия, независимо от того, где находится курсор.
Разберем по шагам настройку в 1С:
CR / Enter). Это позволит драйверу автоматически отделять быстро поступающие данные ридера от медленного ручного набора с обычной клавиатуры.В коде формы документа или справочника перехват данных выполняется в стандартной предопределенной процедуре:
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
// Проверяем источник события от торгового оборудования
Если Источник = "СчитывательМагнитныхКарт" ИЛИ Источник = "СканерШтрихКода" Тогда
// Получаем прочитанный номер карты
НомерКарты = СокрЛП(Данные);
// Выполняем поиск карты и обработку данных
ОбработатьСчитаннуюКарту(НомерКарты);
КонецЕсли;
КонецПроцедуры
Если требуется, чтобы считыватель передавал обычные скан-коды клавиш (Standard Keyboard Mode) без использования Alt-последовательностей, устройство необходимо перепрограммировать.
Проанализируем порядок действий для ридеров Posiflex:
; и суффикса ?), чтобы избежать проблем с переключением раскладки клавиатуры (в русской раскладке символ ; превращается в букву ж).В некоторых аппаратных ревизиях ридеров Posiflex MR-серии режим передачи данных и интерфейс настраиваются аппаратно с помощью блока микропереключателей (DIP-джамперов), расположенных на плате внутри корпуса или под защитной крышкой.
Посмотрим на особенности аппаратной настройки: