Как настроить считыватель магнитных карт в «1С:Управление торговлей 10.3» при переходе на платформу 8.3?

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

Перевод старых конфигураций 1С на новые платформы — это частая практика, продиктованная требованиями законодательства. Например, для подключения современных онлайн-касс (54-ФЗ) разработчикам приходится обновлять старые базы «1С:Управление торговлей 10.3» (УТ 10.3), работавшие годами на платформе 8.1, и запускать их под управлением современной платформы «1С:Предприятие 8.3». Однако при таком переходе часто ломается годами отлаженная интеграция с торговым оборудованием. Типичный пример — считыватель магнитных карт (СМК), который внезапно перестает определяться в программе, хотя в системе (в Блокноте) исправно выводит считанные коды.

В этой статье мы подробно разберем, почему возникает данная проблема, проанализируем внутренние механизмы взаимодействия драйверов АТОЛ с платформой 8.3 и найдем несколько путей решения этой технической неполадки.

---

Почему ломается клавиатурный считыватель при обновлении ПО?

Рассмотрим ситуацию: считыватель настроен в режиме эмуляции клавиатуры. При проведении карты в Блокноте появляется строка вида ;2588?. Это говорит о том, что само устройство аппаратно исправно. Однако 1С отказывается реагировать на событие проведения карты. Разберем основные причины такого поведения оборудования:

  1. Ограничения лицензирования новых драйверов АТОЛ. В старых версиях «Драйвера устройств ввода» АТОЛ (линейка 6.x) перехват клавиатурных событий для 1С работал полностью бесплатно. В более свежих релизах компания АТОЛ сделала функцию работы клавиатурного перехвата платной. Без лицензии драйвер переходит в демо-режим, блокируя генерацию внешнего события в 1С или обрезая передаваемые символы.
  2. Влияние раскладки клавиатуры. Считыватель в режиме клавиатурного ввода имитирует быстрое нажатие клавиш. Если на рабочем месте кассира активна русская раскладка, символ префикса ; превратится в букву ж, а суффикс ? — в запятую или другой символ. В результате драйвер 1С не сможет распознать границы посылки данных и проигнорирует событие.
  3. Разрядность платформы. При переходе на платформу 8.3 системные администраторы часто устанавливают 64-битного клиента 1С. Однако большинство старых драйверов торгового оборудования (включая компоненту Scaner1C.dll) написаны под 32-разрядную архитектуру и физически не могут инициализироваться в 64-битном процессе 1С.

---

Решение 1. Откат на старую стабильную версию драйвера

Самый быстрый и рабочий способ, который помог автору темы — это использование проверенной временем бесплатной версии драйвера АТОЛ. Версии «Драйвера устройств ввода» 6.x (например, 6.5.3 или 6.6) не требовали платных лицензий для работы в режиме эмуляции клавиатуры.

Чтобы реализовать этот метод, выполним следующие шаги:

  1. Удалим текущую установленную версию драйвера устройств ввода АТОЛ через панель управления Windows.
  2. Установим старый дистрибутив «Драйверы торгового оборудования АТОЛ» версии 6.x.
  3. В 1С откроем меню Сервис — Торговое оборудование — Подключение и настройка торгового оборудования.
  4. Перейдем на вкладку «Считыватели магнитных карт», добавим новое устройство и укажем путь к старой внешней компоненте Scaner1C.dll.
  5. Проверим работу считывателя через тест устройства. Внешнее событие должно начать стабильно генерироваться в программе.

---

Решение 2. Корректная настройка префиксов и суффиксов в 1С

Если вы вынуждены работать на новых драйверах или хотите гарантировать стабильную работу клавиатурного считывателя вне зависимости от раскладки клавиатуры операционной системы, необходимо настроить префиксы и суффиксы с помощью виртуальных кодов клавиш (Virtual Key Codes). Это позволит драйверу идентифицировать нажатия клавиш на низком уровне.

Проанализируем стандартные параметры для второй дорожки магнитной карты (Track 2):

Выполним пошаговую настройку параметров в окне настроек драйвера 1С:

  1. Запустим «1С:Предприятие» под учетной записью с правами администратора.
  2. Откроем форму настройки параметров СМК.
  3. Вместо текстовых символов в полях префикса и суффикса укажем их числовые коды (например, 186 и 191).
  4. Убедимся, что для суффикса также добавлен код возврата каретки (13), который завершает передачу данных в систему.

---

Решение 3. Перевод считывателя в режим эмуляции COM-порта (Рекомендуется)

Работа торгового оборудования в режиме эмуляции клавиатуры таит в себе множество архитектурных проблем (зависимость от фокуса ввода, перехват другими программами, искажение раскладки). Наиболее надежным решением является перевод СМК в режим виртуального COM-порта (Virtual COM Port).

Рассмотрим алгоритм перевода устройства в режим эмуляции последовательного порта:

  1. Скачаем с сайта производителя вашего считывателя (например, Posiflex, CipherLab) утилиту для программирования устройства.
  2. Подключим СМК к USB-порту компьютера и запустим сервисную утилиту.
  3. Переведем интерфейс устройства из режима KB Emulation в режим USB-to-Serial (Virtual COM) и запишем настройки в память прибора.
  4. Установим в операционной системе Windows драйвер виртуального COM-порта от производителя. После этого в Диспетчере устройств в разделе «Порты (COM и LPT)» должен появиться новый виртуальный порт (например, COM3).
  5. В настройках торгового оборудования 1С выберем порт подключения COM3 вместо клавиатурного интерфейса.

При такой схеме работы драйверу 1С больше не нужно отлавливать нажатия клавиш в операционной системе. Как только карта проводится через ридер, данные напрямую поступают в соответствующий COM-порт, и платформа 1С мгновенно генерирует асинхронное внешнее событие.

---

Технический анализ: как код 1С обрабатывает данные считывателя

Давайте посмотрим, как устроен механизм обработки данных на уровне кода конфигурации УТ 10.3. При успешном сканировании карты драйвер посылает сигнал, который обрабатывается предопределенной процедурой ПриВнешнемСобытии (или ОбработкаВнешнегоСобытия) в модуле формы или в глобальном модуле.

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


Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)

    // Проверяем, что событие пришло именно от торгового оборудования
    Если ПолучитьЭкземплярТО().ПолучитьТипПодключаемогоОборудования(Источник) = Перечисления.ВидыПодключаемогоОборудования.СчитывательМагнитныхКарт Тогда
        
        // Очищаем полученную строку от возможных лишних пробелов и управляющих символов
        ОчищенныеДанные = СокрЛП(Данные);
        
        // Разберем ситуацию, когда данные пришли в формате ";КодКарты?"
        Если Лев(ОчищенныеДанные, 1) = ";" Тогда
            ОчищенныеДанные = Сред(ОчищенныеДанные, 2);
        КонецЕсли;
        
        Если Прав(ОчищенныеДанные, 1) = "?" Тогда
            ОчищенныеДанные = Лев(ОчищенныеДанные, СтрДлина(ОчищенныеДанные) - 1);
        КонецЕсли;
        
        // Вызываем функцию поиска считанной карты в базе данных
        ОбработатьСчитанныйКодКарты(ОчищенныеДанные);
        
    КонецЕсли;

КонецПроцедуры

Если в процессе отладки вы видите, что процедура ОбработкаВнешнегоСобытия вообще не вызывается системой при проведении карты, это однозначно указывает на проблему связи драйвера с устройством в операционной системе, либо на несовместимость разрядности платформы 1С и подключаемой dll-библиотеки торгового оборудования.

Используя приведенные инструкции и методы диагностики, вы сможете оперативно локализовать и устранить проблемы со считывателями магнитных кодов при любых обновлениях платформы и конфигураций семейства 1С.

← На главную