Как настроить сканер штрихкодов в пустой конфигурации 1С и заставить работать внешнее событие

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

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

В этой статье мы подробно разберем, как правильно реализовать механизм подключения сканера, почему простого вызова ЗагрузитьВнешнююКомпоненту() недостаточно и какие настройки драйвера являются критическими для возникновения события в 1С.

Разница между режимами работы: Клавиатурный vs COM-порт

Прежде всего, проанализируем, как ваш сканер передает данные в компьютер. Существует два основных режима:

  1. Режим эмуляции клавиатуры (HID): Сканер прикидывается клавиатурой. Когда вы считываете штрихкод, символы "печатаются" в то поле, где стоит курсор. В этом режиме внешнее событие в 1С по умолчанию не возникает, так как операционная система не отличает сканер от пользователя, нажимающего клавиши.
  2. Режим эмуляции COM-порта (RS-232 / Virtual COM): Сканер передает данные в конкретный порт. 1С "слушает" этот порт через внешнюю компоненту и, как только данные поступают, генерирует ВнешнееСобытие. Это самый надежный и правильный способ работы с оборудованием.

Рассмотрим подробнее ситуацию, когда используется клавиатурный сканер и старый драйвер АТОЛ (например, версия 6.6, файл Scaner1C.dll), который умеет "перехватывать" клавиатурный ввод и превращать его в событие 1С.

Шаг 1: Программная инициализация и активация устройства

Одной загрузки библиотеки в память недостаточно. Чтобы драйвер начал перехватывать данные, необходимо создать объект и явно включить устройство. Разберем этот процесс на примере кода для платформы 1С 8.х:


// В модуле формы или глобальном модуле
Перем ОбъектСканер;

Процедура ПодключитьОборудование()
    ПутьКДрайверу = "C:\Drivers\Scaner1C.dll";
    Если ЗагрузитьВнешнююКомпоненту(ПутьКДрайверу) Тогда
        // Создаем экземпляр объекта драйвера
        Попытка
            ОбъектСканер = Новый COMОбъект("AddIn.Scaner45");
            
            // Очень важный момент: активация устройства
            ОбъектСканер.УстройствоВключено = 1;
            ОбъектСканер.Включить(1);
            
            Сообщить("Сканер успешно подключен и активирован!");
        Исключение
            Сообщить("Не удалось создать объект драйвера. Проверьте регистрацию DLL.");
        КонецПопытки;
    Иначе
        Сообщить("Файл драйвера не найден по указанному пути.");
    КонецЕсли;
КонецПроцедуры

Если вы не установите свойство УстройствоВключено = 1, драйвер будет находиться в режиме ожидания и не будет генерировать никаких событий, даже если штрихкод физически считывается.

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

Для того чтобы драйвер АТОЛ (или любой другой) понял, что набор символов является именно штрихкодом, а не случайным нажатием клавиш пользователем, используются специальные маркеры — префиксы и суффиксы. Как правило, сканеры по умолчанию настроены на передачу суффикса "Возврат каретки" (Enter, код 13).

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

Рекомендация:

Шаг 3: Проблема прав доступа и реестра в Windows 7/10/11

Часто пользователи жалуются: "Я настроил сканер, выбрал 'Клавиатура', нажал 'ОК', но после перезапуска 1С настройки сбросились на COM1". Это происходит из-за того, что старые компоненты (особенно АТОЛ 6.х) пытаются записывать настройки в ветку реестра HKEY_LOCAL_MACHINE, к которой у обычного пользователя нет прав доступа.

Проанализируем ситуацию: если настройки не сохраняются, выполните следующие действия:

  1. Закройте 1С.
  2. Нажмите правой кнопкой мыши на ярлык 1С и выберите "Запуск от имени администратора".
  3. Снова зайдите в настройки сканера, установите нужные параметры (Порт: Клавиатура, Суффикс: 13).
  4. Нажмите "ОК" и штатно закройте программу.

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

Шаг 4: Обработка события в коде формы

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


Процедура ВнешнееСобытие(Источник, Событие, Данные)
    // Источник — обычно "Scanner", Событие — "BarCodeValue"
    Если Событие = "BarCodeValue" Тогда
        Штрихкод = СокрЛП(Данные);
        Сообщить("Считан штрихкод: " + Штрихкод);
        
        // Здесь мы можем вызвать функцию поиска товара по штрихкоду
        // НайтиТоварПоШтрихкоду(Штрихкод);
        
        // После обработки события важно очистить буфер драйвера (если требуется)
        ОбъектСканер.ОчиститьВход();
        ОбъектСканер.ПосылкаДанных = 1;
    КонецЕсли;
КонецПроцедуры

Если вы работаете в 1С v7.7, структура будет аналогичной, но инициализацию лучше выносить в глобальный модуль в процедуру ПриНачалеРаботыСистемы, чтобы сканер был доступен во всех формах базы.

Альтернативный вариант: Использование ScanOpos.dll

Если у вас возникают непреодолимые сложности с драйвером АТОЛ (например, из-за платных лицензий в новых версиях или конфликтов с x64 платформой), стоит рассмотреть стандартную компоненту от 1С — ScanOpos.dll. Она работает стабильнее в режиме эмуляции COM-порта.

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

Итоги и контрольный список

Если внешнее событие в пустой конфигурации не срабатывает, проверьте следующие пункты:

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

← На главную