При переходе рабочих мест с 1С:Предприятие 7.7 «Торговля и склад» на современную операционную систему Windows 10 (x64) часто возникает проблема подключения торгового оборудования. Попытка зарегистрировать привычные внешние компоненты, такие как ScanOPOS.dll или scaner1c.dll (драйвер устройств ввода АТОЛ), завершается ошибками regsvr32, а сканеры в режиме клавиатуры (USB HID) перестают генерировать предопределенное событие ОбработкаВнешнегоСобытия.
Разберем детально, почему возникают эти сложности, как правильно зарегистрировать библиотеки в 64-битной системе и какие варианты подключения сканера обеспечивают стабильную работу в 1С 7.7.
Платформа 1С 7.7 является исключительно 32-битным (x86) приложением. При работе в 64-разрядной Windows 10 возникают две ключевые проблемы:
regsvr32 из строки «Выполнить» или обычной консоли вызывает 64-битную версию утилиты из каталога System32, которая не может зарегистрировать 32-битную внешнюю компоненту.ScanOPOS.dll) скомпилированы в старых версиях Visual C++ и требуют наличия системных файлов msvcr71.dll, mfc71.dll, msvcp71.dll. В Windows 10 эти библиотеки по умолчанию отсутствуют, из-за чего regsvr32 выдает ошибку с кодом 0x80020009 или 0x8007007e (модуль не найден).Рассмотрим по шагам, как корректно зарегистрировать библиотеку в 64-битной Windows 10:
msvcr71.dll и mfc71.dll (версии x86).C:\Windows\SysWOW64 либо поместим их в одну папку рядом с регистрируемой библиотекой (например, в C:\1C_Drivers\ или каталог базы).regsvr32.exe:
C:\Windows\SysWOW64\regsvr32.exe "C:\1C_Drivers\scaner1c.dll"
или для компоненты ScanOPOS:
C:\Windows\SysWOW64\regsvr32.exe "C:\1C_Drivers\ScanOPOS.dll"
После этого операционная система выдаст сообщение об успешной регистрации модуля в реестре.
Проанализируем специфику передачи данных со сканера. Сканер, работающий как обычная клавиатура (HID Keyboard), просто посылает символы в то поле ввода, где в текущий момент находится курсор. Если фокус стоит не в поле поиска, данные попадут в случайное место или вызовут ошибку интерфейса. Чтобы в 1С 7.7 срабатывала процедура ОбработкаВнешнегоСобытия(), оборудованию требуется генерировать системное внешнее событие.
Для реализации этой логики есть два проверенных пути:
Это самый стабильный и надежный вариант работы в современных ОС:
COM3).ScanOPOS.dll (рекомендуется взять обновленную версию библиотеки из дистрибутивов 1С 8.x, например версию 8.1.x.x, так как она полностью обратно совместима и стабильнее работает в Windows 10) и укажем номер созданного COM-порта и скорость передачи данных.В этом режиме 1С будет перехватывать штрихкод в любом открытом окне программы через процедуру модуля:
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
Если Источник = "Scaner" Тогда
Штрихкод = СокрЛП(Данные);
// Обработка полученного штрихкода
КонецЕсли;
КонецПроцедуры
Если модель сканера не поддерживает эмуляцию COM-порта, используем бесплатную версию драйвера АТОЛ: Драйвер устройств ввода 6.5.3:
scaner1c.dll вместе с библиотеками mfc71.dll через SysWOW64\regsvr32.exe, как описано выше.F7 или непечатный символ) и суффикс (Enter или #13).Если нет возможности устанавливать сторонние драйверы торгового оборудования, перехват клавиатурного сканера можно реализовать с помощью универсальной библиотеки FormEx (formex.dll):
formex.dll в каталог информационной базы или платформы BIN.ПриНачалеРаботыСистемы() через ЗагрузитьВнешнююКомпоненту().