При настройке торгового оборудования в среде 1С:Предприятие 8.3 системные администраторы часто сталкиваются с аппаратными и программными конфликтами. Один из наиболее распространенных сценариев — интеграция сканера штрихкодов, работающего в режиме эмуляции клавиатуры («в разрыв клавиатуры»), в старых конфигурациях, таких как Управление торговлей 10.3, функционирующих на современных серверах под управлением 64-битных операционных систем Windows Server.
В этой статье мы подробно разберем, почему возникает проблема совместимости платформы 1С и старых драйверов 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-разрядную версию платформы (x86). Рассмотрим этот процесс по шагам:
WoW64 (Windows on Windows 64-bit).ScanOPOS.dll регистрируется и загружается стандартным образом. Настройка торгового оборудования завершается успехом.Однако этот подход имеет очевидный минус: 32-битный процесс ограничен адресным пространством в 2 или 4 ГБ оперативной памяти, что может приводить к ошибкам нехватки памяти при формировании «тяжелых» отчетов в крупных базах данных. Поэтому разберем более технологичные альтернативы.
Если нам критически важно сохранить работу именно в 64-битной версии платформы 1С, мы можем отказаться от использования морально устаревшего COM-драйвера ScanOPOS. Современным стандартом разработки внешних компонент для 1С является технология NativeApi.
Актуальный драйвер 1С:Сканер штрихкода (NativeApi) поставляется в виде кроссплатформенного архива, содержащего библиотеки под различные операционные системы и разрядности, включая x86 и x64. Рассмотрим, как его внедрить:
1С:Сканер штрихкода из раздела обновлений торгового оборудования на сайте поддержки 1С.Управление торговлей 10.3 нам потребуется обновленная обработка обслуживания торгового оборудования (обычно имеет имя вида 1ССканерШтрихкодаNative.epf или поставляется в составе шаблона конфигурации)..epf, и на ее основе создаем новое устройство.Поскольку физически сканер в режиме «в разрыв клавиатуры» определяется операционной системой как обычная клавиатура, мы можем настроить его работу вообще без использования специализированных драйверов 1С. Выясним, как это реализовать.
В типовых конфигурациях 1С на обычных формах (к которым относится и Управление торговлей 10.3) во всех документах поступления, реализации и справочниках предусмотрена стандартная кнопка «Поиск по штрихкоду», которая вызывается горячей клавишей F7. Мы можем переложить задачу нажатия этой клавиши на сам сканер.
Разберем по шагам алгоритм настройки:
$07 или специальным шестнадцатеричным значением).$0D или #13).Теперь проверим результат работы. При сканировании товара в 1С устройство мгновенно посылает сигнал нажатия кнопки F7, программа открывает небольшое модальное окно поиска штрихкода, далее сканер «печатает» цифры штрихкода и завершает ввод нажатием клавиши Enter. Окно закрывается, и товар автоматически добавляется в табличную часть документа. Этот метод универсален, стабилен и абсолютно не зависит от разрядности платформы или операционной системы.
Если пользователи работают на удаленном сервере терминалов (RDP), использование клавиатурного режима сопряжено со множеством проблем: зависимость от раскладки клавиатуры (символы могут искажаться, если включен русский язык), потеря символов при сетевых задержках и сбои регистра символов. Для терминального режима мы рекомендуем перевести сканер в режим Virtual COM Port.
Давайте рассмотрим, как правильно настроить эту схему:
COM3.COM3 в терминальную сессию на сервере.change port /query.COM3, на сервере он может отображаться как COM3 или под другим номером) и задаем параметры передачи данных.При таком подходе данные от сканера передаются напрямую в порт в обход клавиатурного буфера, что полностью нивелирует сетевые задержки RDP и языковую раскладку. Обработка события в коде 1С в данном случае перехватывается асинхронно.
Проанализируем пример того, как типовая конфигурация обрабатывает внешнее событие от сканера, работающего через COM-порт или драйвер NativeApi:
Процедура ВнешнееСобытие(Источник, Событие, Данные)
// Проверим, что событие пришло именно от нашего сканера штрихкодов
Если ПолучитьСигналОтСканера(Источник, Событие) Тогда
ОчиститьСообщения();
ШтрихкодТовара = СокрЛП(Данные);
// Вызываем процедуру поиска и обработки полученного штрихкода
ОбработатьШтрихкод(ШтрихкодТовара);
КонецЕсли;
КонецПроцедуры
Использование этого кода позволяет обрабатывать сканирование в фоновом режиме, даже если фокус ввода пользователя в данный момент не установлен на поле ввода штрихкода.
Таким образом, мы рассмотрели все возможные варианты решения проблемы несовместимости оборудования: от простого изменения разрядности платформы 1С до перевода сканера на современные драйверы NativeApi и использования преимуществ виртуальных последовательных портов.