Как настроить клавиатурный сканер штрихкодов для генерации внешнего события в 1С 7.7 через RDP

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При автоматизации торговых точек на базе устаревших, но все еще активно используемых конфигураций 1С:Предприятие 7.7 технические специалисты часто сталкиваются со следующей проблемой: необходимо подключить сканер штрихкодов, работающий исключительно в клавиатурном режиме (эмуляции клавиатуры), но сама конфигурация рассчитана только на обработку данных через предопределенную процедуру ОбработкаВнешнегоСобытия. Ситуация усложняется, если работа ведется в терминальной сессии (через удаленный рабочий стол RDP).

В этой статье мы подробно разберем, как заставить клавиатурный сканер генерировать внешнее событие в 1С 7.7, проанализируем неочевидные тонкости настройки драйверов АТОЛ, рассмотрим альтернативные методы интеграции и развенчаем популярный миф о некоторых моделях сканеров (на примере популярного Zebex Z-3051HS).

Суть проблемы: почему клавиатурный сканер не генерирует внешнее событие?

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

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

Шаг 1. Настройка суффикса на сканере штрихкодов

Для того чтобы драйвер оборудования смог однозначно понять, где заканчивается штрихкод, сканер должен передавать управляющий символ окончания ввода. В качестве такого символа используется суффикс возврата каретки (Carriage Return, обозначается как CR или ASCII-код #13), который имитирует нажатие клавиши Enter.

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

Проанализируем процедуру настройки суффикса на примере сканера Zebex Z-3051HS:

  1. Откройте официальное руководство по программированию (Programming Guide) для вашей модели сканера.
  2. Найдите раздел, посвященный настройке префиксов и суффиксов (обычно называется "Prefix/Suffix Character Setting").
  3. Последовательно считайте управляющие штрихкоды: Start Configuration (Начало настройки) -> Add Suffix (Добавить суффикс) -> управляющий код символа CR (#13) -> End Configuration (Сохранить и выйти). Настройки по умолчанию во многих сканерах идут без предустановленного суффикса, поэтому данная операция обязательна.

Как проверить успешность настройки? Откройте стандартный Блокнот (Notepad) на локальном компьютере и отсканируйте любой штрихкод. Если после вывода цифр курсор автоматически перепрыгнул на новую строку — суффикс настроен корректно.

Шаг 2. Настройка драйвера АТОЛ (версии 6.х)

Для интеграции клавиатурного сканера в 1С 7.7 с генерацией внешнего события традиционно используется Драйвер устройств ввода АТОЛ. Здесь есть важное лицензионное ограничение: современные версии драйверов (8.х и выше) являются платными и в демо-режиме обрезают символы или вносят искусственную задержку в 10 секунд. Для корректной и полностью бесплатной работы нам потребуется старая, но стабильная версия драйвера — 6.5.3 (или любая из веток 6.х, например, 6.8 или 6.12), которая содержит библиотеку Scaner1C.dll. Для упрощения конфигурирования и интеграции оборудования в систему можно использовать внешнюю обработку для настройки параметров подключения сканера.

Рассмотрим подробнее процесс конфигурирования драйвера:

  1. Установите драйвер АТОЛ на компьютере (если работа идет через RDP — драйвер устанавливается на терминальном сервере, где запущена 1С).
  2. Зарегистрируйте библиотеку в системе с помощью команды: regsvr32 "C:\PathToDriver\Scaner1C.dll".
  3. Откройте «Тест драйвера устройств ввода» и перейдите в «Настройки свойств».
  4. В поле «Порт» выберите значение «Клавиатура» (в некоторых версиях — «Клавиатурный порт» или «КВ»).
  5. В поле «Суффикс» укажите значение 13 (соответствует нашему символу возврата каретки CR).
  6. Нажмите кнопку «Поиск оборудования» и отсканируйте штрихкод. В окне поиска должна отобразиться строка с считанным кодом и суффиксом #13 в конце. Это подтверждает, что драйвер видит поток данных со сканера.

Важнейший параметр: Чувствительность клавиатурного сканера

При работе в режиме клавиатуры драйвер АТОЛ должен как-то отличать ввод данных пользователем вручную от сканирования штрихкода. Для этого используется параметр «Чувствительность» (Sensitivity), измеряемый в миллисекундах. Он определяет максимальное время задержки между приходом отдельных символов штрихкода.

Посмотрим на пример логики работы драйвера:

Рекомендуется экспериментально установить значение чувствительности в диапазоне от 30 до 100 мс. Если выставить слишком маленькую чувствительность, то при малейшем сетевом лаге (особенно актуально для RDP) драйвер решит, что ввод прекратился, и не распознает штрихкод как единое целое. Если установить слишком большую чувствительность, то быстрый ручной ввод пользователя на клавиатуре начнет ошибочно перехватываться драйвером и отправляться в процедуру ОбработкаВнешнегоСобытия.

Опровержение мифа: Zebex Z-3051HS и эмуляция COM-порта

В оригинальном обсуждении утверждалось, что модель Zebex Z-3051HS принципиально не поддерживает работу в режиме виртуального COM-порта. Это не так. Данный сканер отлично поддерживает эмуляцию виртуального COM-порта (USB Virtual COM / CDC-ACM).

Давайте проанализируем, почему перевод сканера в режим виртуального COM-порта — это наиболее предпочтительный вариант, особенно при работе через удаленный рабочий стол (RDP):

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

Как перевести сканер в режим виртуального COM-порта?

  1. Скачайте официальный лист программирования для Zebex Z-3051HS.
  2. Считайте штрихкод "USB Virtual COM" (или "CDC Virtual COM").
  3. Установите на локальном компьютере официальный драйвер виртуального COM-порта от Zebex (Zebex VCP Driver). После установки в Диспетчере устройств Windows в разделе «Порты (COM и LPT)» появится виртуальный порт, например, COM3.
  4. Проброс порта через RDP: перед подключением к удаленному рабочему столу откройте клиент mstsc, перейдите на вкладку «Локальные ресурсы», нажмите кнопку «Подробно» в разделе «Локальные устройства и ресурсы» и отметьте галочкой пункт «Порты». После этого порт COM3 локального ПК автоматически пробросится на сервер RDP и будет доступен для 1С 7.7.

Альтернативный вариант 1: Использование компоненты ScanOPOS для клавиатурных сканеров

Стандартная старая внешняя компонента ScanOPOS.dll от фирмы 1С, поставляемая с платформой 7.7, не умела работать с клавиатурными портами напрямую. Однако мало кто знает, что более свежие версии этой библиотеки (выпускаемые для платформы 1С 8.х, начиная с версии 8.0.х) сохранили обратную совместимость с 7.7.

Новые версии ScanOPOS.dll поддерживают выбор порта «Клавиатура». Вы можете зарегистрировать обновленную библиотеку на сервере через regsvr32 и подключить ее стандартным образом в глобальном модуле 1С 7.7. Она также успешно перехватывает поток клавиатуры и генерирует внешнее событие при наличии суффикса #13.

Альтернативный вариант 2: Перехват событий клавиатуры через FormEx

Если в вашей конфигурации 1С 7.7 уже установлена и используется популярная внешняя компонента расширения интерфейса FormEx, вы можете обойтись вообще без установки драйверов торгового оборудования на сервере RDP.

FormEx предоставляет возможность глобального перехвата нажатий клавиш клавиатуры. Мы можем реализовать алгоритм, который замеряет скорость ввода символов и при быстром последовательном вводе цифр, завершающемся клавишей Enter, программно инициирует обработку штрихкода.

Посмотрим на пример реализации такого перехвата в модуле формы или в глобальном модуле:


// Предопределенная процедура FormEx для перехвата нажатий клавиатуры
Процедура ПриНажатииКнопкиКлавиатуры(Контекст, Клавиша, Состояние, Флаги)
    // Код клавиши Enter (суффикс нашего сканера) - 13
    Если Клавиша = 13 Тогда
        // Проверяем накопленный буфер символов
        Если ПустаяСтрока(НакопленныйШтрихкод) = 0 Тогда
            // Программно вызываем обработку штрихкода
            ОбработатьШтрихкод(НакопленныйШтрихкод);
            НакопленныйШтрихкод = "";
            // Отменяем дальнейшую обработку клавиши Enter системой, чтобы избежать лишних переходов
            Контекст.ФлагСтандартнойОбработки = 0;
        КонецЕсли;
    ИначеЕсли (Клавиша >= 48) И (Клавиша <= 57) Тогда
        // Накапливаем только цифры (коды 48-57 для 0-9)
        // Здесь также можно добавить замер времени между нажатиями (для отсечения ручного ввода)
        НакопленныйШтрихкод = НакопленныйШтрихкод + Симв(Клавиша);
    КонецЕсли;
КонецПроцедуры

Данный подход полностью решает проблему "залипания" и зависимости от раскладки клавиатуры в RDP, поскольку коды клавиш перехватываются напрямую на уровне операционной системы до их интерпретации текстовым полем ввода.

Резюме и рекомендации

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

  1. Всегда проверяйте возможность перевода сканера в режим эмуляции COM-порта. Это избавит вас от проблем с раскладками клавиатуры и сетевыми задержками при RDP-соединении.
  2. При работе в клавиатурном режиме обязательно программируйте на сканере суффикс возврата каретки (CR / #13).
  3. Для клавиатурного режима в 1С 7.7 используйте только бесплатную ветку драйверов АТОЛ 6.х и внимательно настраивайте параметр чувствительности (Sensitivity) под пропускную способность вашей RDP-сети.
← На главную