Как настроить сканер штрихкода в разрыв клавиатуры в 1С 8.3 при конфликте разрядности платформ

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

При настройке торгового оборудования в среде 1С:Предприятие 8.3 системные администраторы часто сталкиваются с аппаратными и программными конфликтами. Один из наиболее распространенных сценариев — интеграция сканера штрихкодов, работающего в режиме эмуляции клавиатуры («в разрыв клавиатуры»), в старых конфигурациях, таких как Управление торговлей 10.3, функционирующих на современных серверах под управлением 64-битных операционных систем Windows Server.

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

Выясняем причину: почему 1С 8.3 «не видит» ScanOPOS

Проанализируем техническую суть проблемы. Устаревший драйвер ScanOPOS (внешняя компонента ScanOPOS.dll) изначально разрабатывался как 32-битная библиотека (x86) на базе технологии COM/ActiveX. Когда на сервере (например, Windows Server 2008 R2 x64) разворачивается 64-битная версия платформы 1С:Предприятие 8.3 (x86-64), запускается 64-битный клиентский процесс.

По законам архитектуры операционных систем Windows, 64-битный исполняемый процесс физически не способен загрузить в свое адресное пространство 32-битную DLL-библиотеку. Именно поэтому при попытке зарегистрировать или выбрать старый ScanOPOS в интерфейсе 1С система выдает ошибку или просто «не видит» установленную компоненту, в то время как на старой 32-битной платформе 1С 8.2 все функционировало без сбоев.

Решение 1: Переход на 32-битную платформу (классический путь)

Самый простой и быстрый способ восстановить работоспособность связки — переустановить клиентское приложение 1С:Предприятие, выбрав 32-разрядную версию платформы (x86). Рассмотрим этот процесс по шагам:

  1. Выполняем деинсталляцию текущей 64-битной версии платформы 1С с рабочего места пользователя или терминального сервера через панель управления Windows.
  2. Скачиваем с портала технологической поддержки 1С дистрибутив тонкого или толстого клиента аналогичного релиза, но строго в 32-битной редакции (обозначается как x86 или просто «Технологическая платформа для Windows»).
  3. Производим установку 32-битной платформы на сервер.
  4. 32-битное приложение 1С успешно запускается на 64-битной Windows благодаря встроенной подсистеме эмуляции WoW64 (Windows on Windows 64-bit).
  5. Внутри 32-битного сеанса 1С компонента ScanOPOS.dll регистрируется и загружается стандартным образом. Настройка торгового оборудования завершается успехом.

Однако этот подход имеет очевидный минус: 32-битный процесс ограничен адресным пространством в 2 или 4 ГБ оперативной памяти, что может приводить к ошибкам нехватки памяти при формировании «тяжелых» отчетов в крупных базах данных. Поэтому разберем более технологичные альтернативы.

Решение 2: Переход на современный драйвер «1С:Сканер штрихкода (NativeApi)»

Если нам критически важно сохранить работу именно в 64-битной версии платформы 1С, мы можем отказаться от использования морально устаревшего COM-драйвера ScanOPOS. Современным стандартом разработки внешних компонент для 1С является технология NativeApi.

Актуальный драйвер 1С:Сканер штрихкода (NativeApi) поставляется в виде кроссплатформенного архива, содержащего библиотеки под различные операционные системы и разрядности, включая x86 и x64. Рассмотрим, как его внедрить:

  1. Скачиваем последнюю версию драйвера 1С:Сканер штрихкода из раздела обновлений торгового оборудования на сайте поддержки 1С.
  2. Для конфигурации Управление торговлей 10.3 нам потребуется обновленная обработка обслуживания торгового оборудования (обычно имеет имя вида 1ССканерШтрихкодаNative.epf или поставляется в составе шаблона конфигурации).
  3. В режиме «1С:Предприятие» переходим в справочник «Подключение и настройка торгового оборудования», добавляем новую обработку обслуживания, загрузив файл .epf, и на ее основе создаем новое устройство.
  4. При первом обращении к сканеру 1С автоматически распакует и зарегистрирует нужную (в данном случае 64-битную) библиотеку NativeApi, подходящую под разрядность текущего сеанса.

Решение 3: Подключение сканера без драйверов (через префикс F7)

Поскольку физически сканер в режиме «в разрыв клавиатуры» определяется операционной системой как обычная клавиатура, мы можем настроить его работу вообще без использования специализированных драйверов 1С. Выясним, как это реализовать.

В типовых конфигурациях 1С на обычных формах (к которым относится и Управление торговлей 10.3) во всех документах поступления, реализации и справочниках предусмотрена стандартная кнопка «Поиск по штрихкоду», которая вызывается горячей клавишей F7. Мы можем переложить задачу нажатия этой клавиши на сам сканер.

Разберем по шагам алгоритм настройки:

  1. Берем бумажное руководство пользователя (руководство по программированию), которое шло в комплекте со сканером, либо скачиваем его PDF-версию с сайта производителя.
  2. Находим раздел настройки префиксов и суффиксов (Prefix/Suffix Settings).
  3. Сканируем управляющий штрихкод «Сброс настроек к заводским» (Reset to Default).
  4. Сканируем штрихкод «Добавить префикс» (Add Prefix) и вводим значение, соответствующее клавише F7 (в таблице символов клавиатуры руководства этот код обычно обозначается как $07 или специальным шестнадцатеричным значением).
  5. Сканируем штрихкод «Добавить суффикс» (Add Suffix) и задаем значение клавиши Enter (код возврата каретки Carriage Return / CR, обычно обозначается как $0D или #13).
  6. Сканируем штрихкод «Сохранить настройки» (Save/Write Settings).

Теперь проверим результат работы. При сканировании товара в 1С устройство мгновенно посылает сигнал нажатия кнопки F7, программа открывает небольшое модальное окно поиска штрихкода, далее сканер «печатает» цифры штрихкода и завершает ввод нажатием клавиши Enter. Окно закрывается, и товар автоматически добавляется в табличную часть документа. Этот метод универсален, стабилен и абсолютно не зависит от разрядности платформы или операционной системы.

Решение 4: Рекомендуемый метод для терминального сервера (RDP)

Если пользователи работают на удаленном сервере терминалов (RDP), использование клавиатурного режима сопряжено со множеством проблем: зависимость от раскладки клавиатуры (символы могут искажаться, если включен русский язык), потеря символов при сетевых задержках и сбои регистра символов. Для терминального режима мы рекомендуем перевести сканер в режим Virtual COM Port.

Давайте рассмотрим, как правильно настроить эту схему:

  1. Сканируем из руководства настроечный штрихкод перевода сканера в режим «USB Virtual COM Port».
  2. На локальном компьютере пользователя устанавливаем официальный драйвер виртуального COM-порта от производителя сканера (например, Honeywell, Zebra, Datalogic). В диспетчере устройств Windows должен появиться новый последовательный порт, например, COM3.
  3. В свойствах ярлыка подключения к удаленному рабочему столу (RDP-клиент) переходим на вкладку «Локальные ресурсы», нажимаем кнопку «Подробнее» в группе «Локальные устройства и ресурсы» и устанавливаем галочку напротив пункта «Порты». Это обеспечит проброс (маппинг) локального порта COM3 в терминальную сессию на сервере.
  4. Запускаем терминальную сессию. На сервере в командной строке можно проверить успешность проброса командой change port /query.
  5. В 1С открываем настройки торгового оборудования, выбираем обработку работы со сканером через COM-порт, указываем номер порта (проброшенный COM3, на сервере он может отображаться как COM3 или под другим номером) и задаем параметры передачи данных.

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

Проанализируем пример того, как типовая конфигурация обрабатывает внешнее событие от сканера, работающего через COM-порт или драйвер NativeApi:


Процедура ВнешнееСобытие(Источник, Событие, Данные)
    
    // Проверим, что событие пришло именно от нашего сканера штрихкодов
    Если ПолучитьСигналОтСканера(Источник, Событие) Тогда
        
        ОчиститьСообщения();
        ШтрихкодТовара = СокрЛП(Данные);
        
        // Вызываем процедуру поиска и обработки полученного штрихкода
        ОбработатьШтрихкод(ШтрихкодТовара);
        
    КонецЕсли;
    
КонецПроцедуры

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

Таким образом, мы рассмотрели все возможные варианты решения проблемы несовместимости оборудования: от простого изменения разрядности платформы 1С до перевода сканера на современные драйверы NativeApi и использования преимуществ виртуальных последовательных портов.

← На главную