Как правильно настроить считыватель магнитных карт MSR90 в 1С:УНФ и убрать лишние символы?

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

При подключении торгового оборудования мы часто сталкиваемся с тем, что сканеры или считыватели магнитных карт передают в программу "мусорные" символы вместе с полезными данными. Проанализируем типичную ситуацию: считыватель MSR90 подключен к 1С:УНФ (Управление нашей фирмой) в режиме клавиатуры. При попытке найти сертификат по номеру, программа выдает ошибку: Не найден сертификат по номеру: %025010004,. То есть 1С не отсекает служебные символы, а воспринимает их как часть штрихкода или номера карты.

Давайте подробно разберем по шагам, почему это происходит, выясним причину такого поведения драйверов и рассмотрим несколько надежных способов решения этой задачи.

Проанализируем причину появления лишних символов

Магнитные карты имеют три дорожки записи, и по стандарту каждая из них начинается с определенного служебного символа (префикса):

  1. Первая дорожка начинается с символа % (ASCII-код 37).
  2. Вторая дорожка начинается с символа ; (ASCII-код 59).
  3. Третья дорожка начинается с символа + (ASCII-код 43).

Суффиксом (закрывающим символом) по стандарту обычно выступает знак вопроса ? (ASCII-код 63), после которого также передается команда Enter (возврат каретки, ASCII 13 и 10).

В нашей ситуации пользователь попытался настроить обрезку первой дорожки, указав в настройках драйвера 1С: префикс 37 и суффикс 44 (запятая). Однако программа не обрезала символ %. Причина кроется в особенностях работы библиотеки подключаемого оборудования (БПО). В современных драйверах 1С часто требуется указывать сам строковый символ, а не его десятичный ASCII-код. Если драйвер ждет строку %, а мы пишем туда цифры 37, он не находит совпадений и пропускает весь "мусор" прямо в поле ввода.

Решение 1: Корректное заполнение настроек драйвера в 1С

Рассмотрим, как правильно прописать настройки отсечения, если мы хотим решить вопрос исключительно средствами 1С:

  1. Перейдем в раздел настроек подключаемого оборудования в 1С:УНФ.
  2. Откроем карточку нашего считывателя магнитных карт.
  3. В поле Префикс вместо числа 37 введем непосредственно сам символ %.
  4. В поле Суффикс нужно указать тот символ, который реально закрывает строку (скорее всего это ? или ваша запятая ,), а также обязательно указать символ перевода строки (Enter), чтобы 1С поняла, что ввод завершен.

Чтобы 1С могла перехватить ввод в режиме эмуляции клавиатуры, внешнее событие должно генерироваться корректно. Обычно в коде это обрабатывается примерно так:


Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
    Если Событие = "MagneticCard" Тогда
        // Переменная Данные содержит уже очищенный номер карты
        // без префиксов и суффиксов, если драйвер настроен верно
        ОбработатьСчитываниеКарты(Данные);
    КонецЕсли;
КонецПроцедуры

Решение 2: Аппаратная настройка считывателя MSR90 (Рекомендуемый способ)

Самый надежный способ, который избавит вас от конфликтов с драйверами 1С — это настройка самого "железа". Рассмотрим подробнее, как прошить считыватель, чтобы он изначально отдавал чистый номер без префиксов.

  1. Скачайте и установите официальную утилиту для считывателя — MagSwipe Configuration Utility.
  2. Подключите считыватель к компьютеру и запустите программу.
  3. Перейдите в раздел настроек дорожек (Track Settings).
  4. Найдите параметры Start Sentinels (префиксы) и End Sentinels (суффиксы) для всех трех дорожек.
  5. Отключите их передачу (снимите галочки или выберите опцию Disable).
  6. Убедитесь, что в качестве завершающего действия (Postamble/Suffix) установлен только Enter (CR/LF).
  7. Сохраните настройки в устройство (кнопка Write to Device).

Теперь ридер будет аппаратно отсекать служебные знаки. При прокатывании карты он отправит в компьютер только чистый номер 025010004 и нажмет Enter. В 1С настраивать префиксы больше не придется.

Решение 3: Перевод в режим эмуляции COM-порта

Обратите внимание на то, что считыватель был подключен в режиме Порт: Клавиатура. В этом режиме данные передаются так, как если бы вы быстро набирали их на клавиатуре. Из-за этого возникают проблемы с раскладкой (например, в русской раскладке вместо % может набраться цифра 5, а вместо ? — запятая).

Рекомендуется перевести считыватель в режим эмуляции COM-порта (виртуальный RS-232). Для этого:

  1. Через ту же утилиту конфигурации или с помощью управляющих штрихкодов из инструкции переведите устройство в режим USB-COM.
  2. Установите драйвер виртуального COM-порта (VCP Driver) для вашей операционной системы.
  3. В диспетчере устройств появится новый COM-порт (например, COM3).
  4. В настройках оборудования 1С выберите подключение через COM-порт и укажите соответствующий номер.

В режиме COM-порта 1С общается с устройством напрямую. Данные не "проливаются" в открытые текстовые поля, исключаются проблемы с языковой раскладкой Windows, а внешнее событие генерируется со 100% стабильностью.

Рекомендации по самостоятельной диагностике

Если вы сомневаетесь, какие именно символы отправляет ваш ридер, проведем простой тест:

  1. Откройте обычный текстовый редактор (например, Блокнот).
  2. Обязательно переключите раскладку клавиатуры на английскую (EN).
  3. Прокатайте магнитную карту через считыватель.

Посмотрим на результат. Вы увидите точную строку, которую отдает устройство, например: %025010004? и курсор перейдет на новую строку. Именно эти крайние символы (знак процента и знак вопроса) вам нужно будет использовать при настройке драйвера в 1С, если вы решите не использовать аппаратное отключение.

Используя комплексный подход (перевод устройства в режим COM-порта и аппаратное отключение служебных символов), вы навсегда забудете об ошибках поиска сертификатов и дисконтных карт в 1С:УНФ.

← На главную