Как зарегистрировать внешнюю компоненту ScanOpos.dll и настроить сканер штрихкодов на мобильной платформе 1С?

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

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

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

Различие между технологиями COM и Native API

Рассмотрим первопричину проблемы. Традиционная библиотека ScanOpos.dll, широко известная по работе с 1С 7.7 и ранними версиями 8.x, чаще всего реализована как COM-компонента. Мобильная платформа 1С (включая мобильный клиент под Windows и Android) имеет архитектурные ограничения: она принципиально не поддерживает технологию COM.

Для того чтобы внешняя компонента заработала на мобильном устройстве, она должна быть написана с использованием технологии Native API. Это кроссплатформенный стандарт 1С, который позволяет библиотеке исполняться в различных средах. Если вы пытаетесь загрузить обычную DLL через общий макет, система видит несоответствие интерфейсов и выдает ошибку отсутствия компоненты.

Правильная подготовка внешней компоненты для мобильной платформы

Проанализируем процесс подключения корректной библиотеки. Для мобильных приложений нельзя просто "закинуть" один файл .dll или .so в макет. Платформа ожидает увидеть структурированный ZIP-архив, содержащий манифест и наборы файлов для разных архитектур.

Выясним, что должно входить в состав такого архива:

  1. Файлы библиотек для разных ОС: .dll для Windows (x86/x64), .so для Android (ARM/x86).
  2. Файл описания manifest.xml.

Пример структуры manifest.xml, который позволяет платформе понять, какой файл загружать:


<?xml version="1.0" encoding="UTF-8"?>
<bundle xmlns="http://v8.1c.ru/8.2/uconf/res/compositions">
    <component os="Windows" path="ScanOposWin.dll" type="native" arch="i386"/>
    <component os="Windows" path="ScanOposWin64.dll" type="native" arch="x86_64"/>
    <component os="Android" path="libScanOposArm.so" type="native" arch="arm"/>
</bundle>

Если вы тестируете приложение на Windows-планшете или через мобильный клиент под Windows, 1С будет искать в манифесте секцию os="Windows". Если разрядность вашего мобильного клиента не совпадает с разрядностью библиотеки в манифесте, регистрация также провалится.

Использование БПО для мобильных устройств

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

Для подключения сканера в режиме ТСД выполним следующие шаги:

  1. Скачаем актуальную версию БПО МП с портала ИТС или релизов.
  2. Извлечем из поставки готовую компоненту (обычно это ZIP-архив с префиксом Equipment...).
  3. Добавим этот архив в конфигурацию как Общий макет с типом "Двоичные данные".

Теперь в коде мобильного приложения мы можем обращаться к этой компоненте. Пример инициализации может выглядеть так:


& Результат = УстановитьВнешнююКомпоненту("ОбщийМакет.КомпонентаСканераШтрихкодов");
Если Результат Тогда
    ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаСканераШтрихкодов", "Scanner", ТипВнешнейКомпоненты.Native);
    ОбъектДрайвера = Новый("AddIn.Scanner.ScanOpos");
КонецЕсли;

Решение проблемы "Поле Ссылка/Код не заполнено" (SQLite)

Разберем еще одну проблему, с которой часто сталкиваются при разработке под мобильную платформу (в частности, на версии 2.3.9). При работе с данными может возникать ошибка: "Поле 'Ссылка' не заполнено", даже если вы просто редактируете существующий элемент.

Это связано с особенностями встроенной базы данных SQLite, которую использует мобильное приложение. Платформа 1С на мобильных устройствах крайне чувствительна к составу полей в запросах и кэше. Если вы используете запросы к локальным таблицам, необходимо придерживаться следующих правил:

Рассмотрим пример правильного запроса для мобильной платформы:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |   Номенклатура.Ссылка КАК Ссылка,
    |   Номенклатура.Наименование КАК Наименование,
    |   Номенклатура.Штрихкод КАК Штрихкод
    |ИЗ
    |   Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |   Номенклатура.Штрихкод = &Штрихкод";

Обратите внимание, что даже если нам нужно только наименование, выбор Ссылка помогает платформе корректно идентифицировать объект в локальном кэше при последующих манипуляциях.

Альтернативы прямой регистрации DLL

Проанализируем ситуацию: если ваша цель — "укрепление собственного опыта" и создание надежного решения для ТСД, рассмотрите альтернативные способы получения данных со сканера, которые не требуют мучительной регистрации ScanOpos.dll:

  1. Встроенные средства мультимедиа: Мобильная платформа имеет встроенную функцию СредстваМультимедиа.СканироватьШтрихКод(). Она вызывает камеру устройства и возвращает результат напрямую в 1С без всяких внешних компонент.
  2. Режим эмуляции клавиатуры (Keyboard Wedge): Большинство аппаратных сканеров на ТСД могут передавать штрихкод как поток символов (нажатие клавиш). В этом случае вам достаточно установить фокус в текстовое поле, и данные попадут туда автоматически.
  3. Broadcast Intent (для Android): Самый профессиональный способ для ТСД. Сканер штрихкодов вещает системное событие (Intent), которое мобильная 1С может перехватить. Это требует настройки драйвера самого ТСД, но избавляет от необходимости возиться с библиотеками внутри 1С.

Подведем итог: использование ScanOpos.dll на мобильной платформе — путь тупиковый. Переходите на Native API через БПО МП или используйте штатные возможности мобильной платформы для работы с торговым оборудованием. Это обеспечит стабильность приложения и избавит от ошибок несовместимости типов клиентских приложений.

← На главную