Как подключить сканер штрихкода Mercury 1100PL к 1С 7.7 и настроить внешнее событие

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

Подключение современного торгового оборудования к устаревшим платформам, таким как 1С 7.7, часто превращается в настоящую техническую головоломку. Одной из наиболее распространенных проблем является ситуация, когда сканер успешно работает в современных версиях (1С 8.2 или 8.3), но категорически отказывается генерировать внешнее событие в "семерке". В рамках данной статьи мы подробно разберем, как заставить сканер Mercury 1100PL корректно работать с 1С 7.7, проанализируем программный код инициализации и выясним, почему настройки префиксов и суффиксов играют решающую роль.

Анализ проблемы: почему 1С 7.7 "не видит" сканер

Рассмотрим ситуацию: внешняя компонента Scaner1C.dll загружается без ошибок, объект AddIn.Scaner45 создается, но при сканировании штрихкода процедура ОбработкаВнешнегоСобытия не вызывается. Основная причина кроется в том, как драйвер интерпретирует поток данных от устройства. Если сканер настроен в режиме эмуляции клавиатуры (HID), драйвер должен четко понимать, где начинается и где заканчивается последовательность символов штрихкода. Если эти границы (префиксы и суффиксы) указаны неверно, драйвер просто игнорирует входящие данные, не передавая их в 1С.

Шаг 1: Программная инициализация компоненты

Для начала разберем правильный алгоритм подключения компоненты в коде 1С 7.7. Важно не просто загрузить DLL, но и правильно выставить параметры объекта. Рассмотрим пример кода, который обеспечивает стабильную связь с драйвером:


Если ЗагрузитьВнешнююКомпоненту("Scaner1C.dll") = 0 Тогда
    Сообщить("Не удается загрузить Scaner1C.dll! Работа со сканером невозможна!");
    СтатусВозврата(0);
    Возврат;
Иначе
    Попытка
        // Создаем объект драйвера АТОЛ (версия 6.х)
        Сканер = СоздатьОбъект("AddIn.Scaner45");  
        
        // Включаем устройство
        Сканер.DeviceEnabled = 1;
        
        // Важный параметр: разрешаем передачу событий в 1С
        Сканер.DataEventEnabled = 1;
        
        // Автоматическое отключение после получения данных (опционально)
        Сканер.AutoDisable = 1;
        
        // Для старых версий драйверов иногда требуется OldVersion = 0
        Сканер.OldVersion = 0;
        
        РаботаСоСканеромШтрихКода = 1;
        Сообщить("Сканер штрихкода Mercury подключен успешно.");
    Исключение  
        РаботаСоСканеромШтрихКода = 0;
        Сообщить("Ошибка при инициализации объекта Scaner45!");
    КонецПопытки;
КонецЕсли;

Обратим внимание на свойство DataEventEnabled. Без установки этого флага в значение 1, внешнее событие в систему поступать не будет, даже если сам драйвер "видит" данные в окне поиска оборудования.

Шаг 2: Настройка префиксов и суффиксов в драйвере

Разберем наиболее критическую ошибку, которую совершают при настройке. В параметрах драйвера (Сервис — Параметры — Драйвер устройств ввода) есть поля для ввода Префикса и Суффикса. Проанализируем, как они работают:

  1. Префикс: это символ, который сканер присылает ПЕРЕД штрихкодом. Обычно он не используется (#0).
  2. Суффикс: это символ завершения посылки. Большинство сканеров по умолчанию настроены на добавление символа возврата каретки (CR), что соответствует коду #13.

Типичная ошибка: указание кода #13 в поле "Префикс". В этом случае драйвер ожидает, что штрихкод начнется с "Enter", и когда он приходит в конце, логика парсинга ломается. Более того, наличие префикса #13 может приводить к тому, что при поиске оборудования окно настроек будет просто закрываться, так как система воспринимает этот символ как нажатие кнопки "ОК".

Правильное решение: убедитесь, что поле префикса пустое (или содержит значение "Нет"), а в поле суффикса выбран код #13 (CR). Это позволит драйверу корректно "отрезать" штрихкод от служебных символов и передать его в ОбработкаВнешнегоСобытия.

Шаг 3: Выбор режима работы сканера (USB-HID vs USB-COM)

Хотя многие используют режим клавиатуры (USB-HID), для 1С 7.7 крайне рекомендуется перевести Mercury 1100PL в режим USB-Virtual COM. Выясним, почему это важно:

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

Шаг 4: Настройка чувствительности (Sensitive)

Проанализируем параметр Sensitive (чувствительность). В коде для 1С 7.7 часто встречается значение 300. Однако для современных сканеров, таких как Mercury, работающих через USB, это значение может быть избыточным. Если сканер в режиме клавиатуры передает символы слишком быстро, драйвер может не успеть их "склеить" в одну строку.

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

Шаг 5: Технические нюансы современных ОС

Если вы работаете в Windows 7, 10 или 11, следует учитывать ограничения безопасности. Проанализируем два важных момента:

  1. Регистрация DLL: Компоненту Scaner1C.dll необходимо зарегистрировать в системе вручную через командную строку от имени администратора: regsvr32 "C:\ПутьКПапке\Scaner1C.dll".
  2. Права доступа: 1С 7.7 должна запускаться с правами администратора, чтобы иметь возможность взаимодействовать с драйверами торгового оборудования и перехватывать прерывания от USB-портов.
  3. DEP (Data Execution Prevention): В некоторых случаях система предотвращения выполнения данных может блокировать работу старых DLL. Если всё настроено верно, но событие не срабатывает, попробуйте добавить файл 1cv7s.exe в список исключений DEP.

Итоги и рекомендации

Подводя итог, для успешного подключения Mercury 1100PL к 1С 7.7 мы рекомендуем придерживаться следующего алгоритма:

Во-первых, используйте "последнюю бесплатную" версию драйверов АТОЛ (например, 6.5.3), так как более новые версии требуют лицензирования и могут работать в демо-режиме с задержками.

Во-вторых, строго следите за настройками суффиксов. В 90% случаев проблема отсутствия внешнего события в 1С 7.7 при использовании Scaner1C.dll связана именно с тем, что символ #13 ошибочно занесен в префиксы или вовсе отсутствует в настройках драйвера, хотя сканер его передает.

В-третьих, всегда проверяйте работоспособность через "Поиск оборудования" в настройках драйвера. Если там штрихкод отображается корректно и с правильным суффиксом, значит, проблема в программном коде инициализации 1С (проверьте DataEventEnabled и DeviceEnabled).

Соблюдение этих шагов позволит интегрировать современный сканер в проверенную временем систему 1С 7.7 и обеспечить надежную работу склада или торговой точки.

← На главную