При работе в типовых конфигурациях 1С, таких как Управление нашей фирмой (УНФ), Управление торговлей (УТ) или Розница, пользователи часто сталкиваются с неприятной ситуацией. При настройке торгового оборудования в форме «Подключение и настройка оборудования» система предлагает установить драйвер — ускорить процесс поможет система централизованной установки драйверов и администрирования кассовых узлов. Вы нажимаете кнопку «Установить драйвер», 1С рапортует об успешной установке, вы сохраняете форму, но при повторном открытии или при попытке отсканировать штрихкод в документе программа выдает ошибку:
При подключении оборудования произошла ошибка: '1С:Сканеры штрихкода (COM)' на Админ(server): Не удалось загрузить драйвер устройства. Проверьте, что драйвер корректно установлен и зарегистрирован в системе.
Самое интересное заключается в том, что запуск программы от имени Администратора не решает проблему на постоянной основе, а сам сканер может продолжать физически работать, но некорректно обрабатывать события в самой 1С. В этой статье мы подробно разберем причины такого поведения системы, выясним, почему «слетает» COM-драйвер, и рассмотрим пошаговые решения этой проблемы.
Прежде чем перейти к устранению неисправности, давайте проанализируем, почему возникает подобный сбой. Исторически драйверы торгового оборудования для 1С разрабатывались с использованием технологии COM (Component Object Model). Эта архитектура имеет ряд жестких ограничений, которые в современных операционных системах и терминальных средах вызывают критические ошибки:
ScanOpos.dll), путь к этому файлу должен быть жестко прописан в системном реестре в ветке HKEY_CLASSES_ROOT. Запись в эту ветку требует повышенных прав администратора. Если у пользователя терминальной сессии урезаны права, 1С физически не может зарегистрировать библиотеку в реестре.C:\Users\ИмяПользователя\AppData\Local\Temp\1C...) и регистрирует библиотеку прямо оттуда. Если на вашем сервере настроена групповая политика очистки папки Temp при выходе пользователя из терминальной сессии (RDP) или настроен автоматический запуск утилит вроде CCleaner, файл драйвера удаляется физически. При следующем запуске 1С обращается к реестру, видит путь к файлу в папке Temp, но самого файла там уже нет. Как результат — драйвер «слетает».Самым простым, современным и надежным способом решения проблемы является отказ от устаревшей технологии COM и переход на NativeAPI. Это собственная кроссплатформенная технология фирмы 1С, которая лишена всех недостатков COM-архитектуры.
Рассмотрим подробнее преимущества NativeAPI:
regsvr32) (поможет интеграция торговых весов без регистрации COM-компонент).Разберем по шагам, как переключить сканер штрихкодов на NativeAPI в 1С:
1С:Сканеры штрихкода (COM), нажмите на него и выберите из выпадающего списка 1С:Сканеры штрихкода (NativeApi).Внешняя компонента успешно установлена.Бывают ситуации, когда из-за использования устаревшего оборудования или сильно кастомизированных старых конфигураций 1С (например, старых релизов УТ 10.3 или УПП) вам необходимо использовать именно COM-версию драйвера — для этого есть комплексное обновление для УТ 10.3 с актуальными драйверами. Чтобы предотвратить постоянное «слетание» компоненты, выполним ее ручную установку в защищенный каталог.
Проанализируем алгоритм ручной регистрации:
ScanOpos.dll. Его можно извлечь из шаблона конфигурации или найти во временной папке после первой установки драйвера из 1С.C:\Program Files (x86)\1C\ScanOpos\ (для 32-битной библиотеки) или C:\Program Files\1C\ScanOpos\ (для 64-битной).ScanOpos.dll в созданную папку.cmd, нажмите правой кнопкой мыши на «Командная строка» и выберите «Запуск от имени администратора».Посмотрим на пример команд для регистрации библиотеки в операционной системе:
rem Для 64-битной операционной системы и 32-битной библиотеки 1С
cd C:\Windows\SysWOW64
regsvr32.exe "C:\Program Files (x86)\1C\ScanOpos\ScanOpos.dll"
rem Для 64-битной библиотеки или на 32-битной ОС
cd C:\Windows\System32
regsvr32.exe "C:\Program Files\1C\ScanOpos\ScanOpos.dll"
После успешного выполнения вы увидите системное сообщение Успешное выполнение DllRegisterServer в.... Теперь путь к библиотеке жестко зафиксирован в системном реестре, файл находится в безопасной папке, защищенной от автоматических «чистильщиков», и драйвер больше не будет сбрасываться при перезапуске сессий пользователей.
После успешной установки драйвера перед вами встанет вопрос выбора правильного режима работы устройства: клавиатурный ввод (USB-HID) или эмуляция последовательного порта (COM-порт). Давайте разберем особенности каждого режима, чтобы вы могли выбрать оптимальный вариант для вашего бизнеса.
В этом режиме сканер распознается компьютером как обычная USB-клавиатура — для этих целей подойдёт мобильное приложение для превращения смартфона в сканер. Когда вы считываете штрихкод, устройство мгновенно «печатает» последовательность символов в то поле ввода, где в данный момент установлен фокус (курсор).
Преимущества:
Недостатки и нюансы настройки:
Enter, код #13 или CR).В этом режиме сканер передает данные в систему через виртуальный последовательный порт (например, COM3, COM4). Драйвер 1С постоянно прослушивает этот порт в фоновом режиме.
Преимущества:
Рассмотрим пример кода, которым платформа обрабатывает получение данных от сканера в режиме COM-порта на уровне управляемой формы:
&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
// Проверяем, что событие пришло от нашего сканера штрихкодов
Если ПолучитьСигналОтУстройства(Источник, Событие) Тогда
Штрихкод = СокрЛП(Данные);
// Вызываем функцию поиска номенклатуры по считанному коду
ОбработатьШтрихкодНаСервере(Штрихкод);
КонецЕсли;
КонецПроцедуры
Недостатки:
Подводя итоги нашего анализа работы со сканером штрихкодов в 1С, сформулируем основные правила для системных администраторов и специалистов 1С:
Enter (считав соответствующий штрихкод из мануала к оборудованию) и укажите этот же суффикс в настройках БПО в 1С. Это обеспечит стабильную работу без сбоев связи.