Почему клавиатурный считыватель магнитных карт не обрезает префикс и суффикс в 1С?

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

При подключении торгового оборудования к рабочим местам кассиров часто возникает ситуация: на одном терминале клавиатурный считыватель магнитных карт (MSR) работает штатно, автоматически отсекая служебные символы дорожек (например, знак начала ; и окончания ?), а на втором терминале с аналогичными настройками в поле ввода попадает сырая строка вида ;502408?. В результате программа не распознает карту или требует ручного подтверждения.

Разберем детально, почему возникает такая рассинхронизация в поведении оборудования и как по шагам восстановить правильную обработку данных.

Причины сбоя клавиатурного перехвата данных

Клавиатурный считыватель магнитных карт (работающий в режиме HID Keyboard) эмулирует нажатия клавиш клавиатуры. Для конфигураций 1С и фронт-офисных систем («1С-Рарус: Рестарт», «1С:Розница» и др.) драйвер торгового оборудования должен перехватывать последовательность ввода с помощью системных хуков (Low-Level Keyboard Hook) или механизмов Raw Input.

Если драйвер не успевает распознать последовательность как аппаратное считывание или не находит ожидаемого суффикса, текст передается напрямую в активный элемент формы как обычный ручной ввод с клавиатуры. Выясним основные факторы, влияющие на это:

  1. Несовпадение суффиксов и скрытых управляющих символов: Большинство ридеров после завершения чтения дорожки отправляют непечатаемый символ перевода строки (CR / Enter или LF). Если в настройках драйвера 1С суффикс не указан или не совпадает со служебным кодом ридера, драйвер ожидает продолжения ввода и не инициирует событие внешней компоненты.
  2. Активная языковая раскладка Windows: Клавиатурные устройства передают аппаратные скан-коды клавиш. Если в операционной системе активна русская раскладка (RU), физические символы ; и ? транслируются как ж и ,. В этом случае драйвер-перехватчик не находит заданный префикс ; и пропускает сырой поток.
  3. Межсимвольная задержка (таймаут ввода): Драйвер определяет считывание карты по высокой скорости поступления символов. Если в микропрограмме ридера включена задержка между символами (Intercharacter Delay) либо USB-порт вносит задержку, драйвер считает поток обычным набором текста оператором.
  4. Блокировка системных хуков: Настройки контроля учетных записей (UAC), антивирусы или запуск программы с недостаточными правами могут блокировать функции перехвата глобальных событий клавиатуры.

Шаг 1. Проверка реального вывода считывателя через тестовую утилиту

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

  1. Запустим утилиту от производителя считывателя (например, MSR112A Demo Application) или воспользуемся тестом драйвера торгового оборудования (например, «АТОЛ: Драйвер устройств ввода»).
  2. Проведем картой по считывателю в окне теста.
  3. Посмотрим на шестнадцатеричные (HEX) коды символов в полученном пакете. Если в конце строки присутствуют коды 0x0D (CR, 13) или 0x0A (LF, 10), их обязательно требуется учесть в настройках 1С.

Шаг 2. Настройка префиксов и суффиксов в параметрах оборудования 1С

Перейдем к настройке торгового оборудования в информационной базе. Разберем правильное заполнение параметров обработки обслуживания:

  1. Откроем раздел Подключение и настройка оборудования (или параметры оборудования идентификации в «Рестарт»).
  2. В свойствах считывателя магнитных карт найдем параметры дорожек:

    Для второй дорожки стандартный префикс равен ; (код 59).

    Суффикс дорожки часто состоит из знака окончания ? (код 63) и кода клавиши Enter (код 13 / #13).

  3. Если интерфейс позволяет задавать управляющие коды, укажем суффикс с учетом перевода строки (например, ?#13 или символ перевода каретки).
  4. Сохраним параметры и выполним повторный тест считывания идентификационной карты.

Шаг 3. Корректировка параметров операционной системы

Для гарантированной работы клавиатурного эмулятора настроим системное окружение Windows на проблемном моноблоке:

  1. Установим раскладку клавиатуры English (US) в качестве языка ввода по умолчанию для учетной записи кассира и экрана блокировки.
  2. Отключим сторонние утилиты автопереключения раскладки клавиатуры, если они установлены в системе.
  3. Запустим платформу 1С от имени администратора, чтобы убедиться, что внешняя компонента перехвата клавиатуры зарегистрирована и не блокируется защитными подсистемами.

Шаг 4. Аппаратная перенастройка считывателя (рекомендуемый подход)

Если параметры драйвера подобраны верно, но чтение периодически сбоит, рассмотрим настройку самого считывателя через сервисную утилиту производителя:

  1. Удаление префиксов на уровне ридера: В сервисной программе отключим передачу служебных символов ISO (;, ?, %). В этом случае считыватель будет отдавать только «чистый» номер карты и управляющий суффикс Enter.
  2. Минимизация задержки: Установим параметр Intercharacter Delay на значение 0 или 1 мс.
  3. Перевод в режим Virtual COM (CDC): Самым надежным решением является перевод считывателя из режима клавиатуры в режим виртуального COM-порта. В этом случае данные передаются через последовательный интерфейс напрямую в обработчик внешнего события 1С, полностью исключая зависимость от раскладки клавиатуры, фокуса ввода и межсимвольных задержек.
← На главную