Как подключить нативный драйвер сканера штрихкодов 1С в старой конфигурации без БПО?

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

При работе с устаревшими конфигурациями (например, складскими программами, старыми версиями WMS или самописными решениями) разработчики часто сталкиваются с необходимостью внедрения современного оборудования. Библиотека подключаемого оборудования (БПО) от 1С является стандартом, но её «выдергивание» по частям превращается в бесконечный процесс, что особенно заметно при внедрении мобильных ТСД. Разберем, как избежать этой рутины (по аналогии с тем, как запускаются фоновые задания без БСП) и подключить нативный драйвер сканера напрямую, используя стандартные возможности платформы 1С:Предприятие.

Почему Native API лучше старых COM-драйверов?

Проанализируем технологическую разницу. Старые драйверы (вроде ScanOpos.dll) работали через технологию COM/ActiveX, иногда требуя программ чтения данных из COM. Это требовало обязательной регистрации библиотеки в реестре Windows (через regsvr32), что часто вызывало проблемы с правами доступа. Современные компоненты Native API лишены этих недостатков:

  1. Они кроссплатформенные (работают в Windows, Linux и веб-клиенте).
  2. Не требуют регистрации в системе.
  3. Загружаются платформой динамически прямо из макета конфигурации.
  4. Поддерживают как 32-битные, так и 64-битные клиентские приложения.

Шаг 1. Подготовка драйвера (Общий макет)

Для начала нам необходимо получить сам драйвер (если вы хотите подключить телефон вместо обычного сканера, используйте решение для превращения смартфона в беспроводной сканер для 1С). Рассмотрим самый простой путь: возьмем актуальную версию драйвера из любой современной конфигурации, где есть БПО. Нам нужен Общий макет, который обычно называется Драйвер1ССканерШтрихкода (или аналогично). Этот макет представляет собой zip-архив.

Выгрузим этот архив и добавим его в нашу старую конфигурацию как новый Общий макет с типом Двоичные данные. Назовем его, например, ДрайверСканераНативный.

Шаг 2. Загрузка и подключение компоненты

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

Рассмотрим пример кода для инициализации сканера:


// 1. Копируем файлы из макета в локальный каталог пользователя
РезультатУстановки = УстановитьВнешнююКомпоненту("ОбщийМакет.ДрайверСканераНативный");

Если РезультатУстановки Тогда
    // 2. Подключаем компоненту. "AddIn.InputDevice" - это программный идентификатор из манифеста
    РезультатПодключения = ПодключитьВнешнююКомпоненту("AddIn.InputDevice");
    
    Если РезультатПодключения Тогда
        // 3. Создаем объект драйвера
        ОбъектДрайвера = Новый("AddIn.InputDevice.Scanner");
        Сообщить("Драйвер успешно инициализирован!");
    Иначе
        Сообщить("Не удалось подключить внешнюю компоненту.");
    КонецЕсли;
Иначе
    Сообщить("Ошибка при установке компоненты из макета.");
КонецЕсли;

Шаг 3. Настройка параметров драйвера

Поскольку мы отказались от визуальных форм настройки БПО, нам придется устанавливать параметры сканера программно. Нативные драйверы 1С управляются через XML-строки или прямые методы. Самый надежный способ — использовать метод УстановитьПараметр.

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

Посмотрим на пример установки параметров:


// Установка порта (0 - Клавиатура, 1 - COM1, и так далее)
ОбъектДрайвера.УстановитьПараметр("Port", 0);

// Если используем COM-порт, укажем скорость
ОбъектДрайвера.УстановитьПараметр("BaudRate", 9600);

// Важно! После установки параметров вызываем метод Подключить() самого объекта
Результат = ОбъектДрайвера.Подключить();

Если Результат Тогда
    Сообщить("Сканер готов к работе.");
Иначе
    ОписаниеОшибки = "";
    ОбъектДрайвера.ПолучитьОшибку(ОписаниеОшибки);
    Сообщить("Ошибка подключения сканера: " + ОписаниеОшибки);
КонецЕсли;

Полезный совет: Чтобы узнать полный список доступных параметров конкретной версии драйвера, вызовите метод ОбъектДрайвера.ПолучитьПараметры(). Он вернет XML-структуру со всеми настройками, которые поддерживает данная ВК.

Шаг 4. Обработка внешнего события

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

Разберем, как правильно обработать данные:


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

Важные нюансы и типичные ошибки

Проанализируем ситуации, которые могут возникнуть при «ручном» внедрении драйверов:

  1. Разрядность клиента: Если вы используете 64-битный клиент 1С, убедитесь, что в zip-архиве макета присутствует библиотека для x86_64. Нативные компоненты чувствительны к разрядности.
  2. Имена объектов: В разных версиях БПО программные идентификаторы могут меняться. Если AddIn.InputDevice не работает, откройте zip-архив макета, найдите там файл manifest.xml и посмотрите актуальный progid.
  3. Очистка ресурсов: Не забывайте отключать сканер при закрытии формы, используя метод ОбъектДрайвера.Освободить() или ОбъектДрайвера.Отключить(). Это предотвратит «зависание» порта.
  4. Префиксы и суффиксы: Native-драйверы 1С умеют самостоятельно отсекать лишние символы (например, возврат каретки). Настройте это через УстановитьПараметр("Suffix", 13), чтобы не заниматься очисткой строк в коде 1С.

Использование этого подхода позволяет существенно облегчить конфигурацию. Вместо десятков общих модулей МенеджерОборудования, ПодключаемоеОборудованиеУниверсальныйДрайвер и прочих, вы используете всего один небольшой фрагмент кода, который напрямую взаимодействует с компонентой. Это делает систему более стабильной и простой в поддержке.

← На главную