При работе со старыми конфигурациями на платформе 1С 7.7 в современных операционных системах (Windows 10/11) системные администраторы и программисты часто сталкиваются с парадоксальной ситуацией. Сканер штрихкодов, подключенный через виртуальный COM-порт, отлично проходит «Тест устройства» в настройках торгового оборудования, но при попытке сканирования в самой программе ничего не происходит — процедура ОбработкаВнешнегоСобытия просто не вызывается. Особенно остро эта проблема проявляется при использовании драйвера ScanOpos 8.0.4.1 и сканеров маркировки (например, Newland), где критически важна передача спецсимволов GS (ASCII 29).
В этой статье мы подробно разберем причины такого поведения системы, проанализируем технические нюансы работы драйверов и предложим пошаговый алгоритм устранения ошибки.
Проанализируем сначала, почему «Тест устройства» работает успешно. В этом режиме драйвер открывает порт и просто выводит в окно все данные, которые поступают из буфера последовательного порта в реальном времени. Ему не важно, закончено ли сообщение или нет.
Однако механизм ОбработкаВнешнегоСобытия в 1С 7.7 работает иначе. Для того чтобы драйвер сгенерировал внешнее событие и «пробросил» его в платформу, он должен получить четкий сигнал о завершении передачи данных. Таким сигналом является суффикс. Рассмотрим ситуацию: если сканер физически настроен на передачу только кода штрихкода, а в настройках драйвера 1С ожидается суффикс (например, CR — возврат каретки, код 13), драйвер будет бесконечно ждать этого символа. Данные в порт пришли, но событие не создается, так как пакет данных считается неполным.
Выясним, передает ли ваш сканер суффикс и какой именно. Большинство современных сканеров Newland по умолчанию могут быть настроены в режим эмуляции клавиатуры или COM-порта без суффикса. Для работы с 1С 7.7 через ScanOpos выполните следующие действия:
#13 для CR).Если суффикс не настроен должным образом, процедура ОбработкаВнешнегоСобытия никогда не получит управление, даже если в тесте данные отображаются корректно.
Версия драйвера 8.0.4.1 была выпущена для поддержки требований «Честного ЗНАКА» и корректной обработки DataMatrix. Рассмотрим нюансы её работы под Windows 10 x64. Платформа 1С 7.7 является 32-битным приложением, поэтому ей требуются соответствующие компоненты среды выполнения.
Проанализируем системное окружение. Библиотеки ScanOpos.dll восьмых версий часто требуют наличия Microsoft Visual C++ Redistributable 2015-2019. Важно установить именно x86 (32-битную) версию пакета, даже если у вас 64-битная Windows. Без этих библиотек COM-объект драйвера может инициализироваться частично: методы открытия порта будут работать, а обратные вызовы (events) — блокироваться системой.
Также проверьте регистрацию компоненты. Рекомендуется регистрировать её принудительно через командную строку от имени администратора:
C:\Windows\SysWOW64\regsvr32.exe "C:\ПутьКПапке1С\ScanOpos.dll"
Если штатный драйвер ScanOpos продолжает работать нестабильно, разберем альтернативный вариант, который часто упоминается как наиболее надежный для «семерки» — библиотеку Scaner1C.dll. Это модифицированная версия драйвера, лишенная многих проблем с виртуальными COM-портами.
Посмотрим, как изменить код для работы с альтернативной библиотекой. В глобальном модуле (или в специализированной обработке обслуживания) необходимо проверить инициализацию объекта:
Процедура ПриНачалеРаботыСистемы()
Если ЗагрузитьВнешнююКомпоненту("Scaner1C.dll") <> 1 Тогда
Предупреждение("Компонента сканера не найдена!");
КонецЕсли;
КонецПроцедуры
Библиотека Scaner1C.dll лучше справляется с передачей спецсимволов и стабильнее удерживает соединение с виртуальными портами, которые создают драйверы Newland CDC.
Разберем ситуацию с драйверами эмуляции. Сканеры Newland при подключении через USB в режиме Virtual COM требуют установки Newland CDC Driver. Выясним причину возможных конфликтов: Windows 10 может автоматически подтянуть стандартный драйвер usbser.sys, который не всегда корректно транслирует управляющие сигналы, необходимые драйверу 1С для активации события.
Рекомендации по настройке порта:
Наконец, проанализируем сам программный код в 1С. Убедитесь, что форма, в которой вы ожидаете данные, имеет включенную возможность приема внешних событий. Типовая структура процедуры в 1С 7.7 должна выглядеть следующим образом:
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
// Проанализируем источник события
Если Источник = "Scanner" Тогда
// Очистим данные от возможных лишних символов
ШтрихКод = СокрЛП(Данные);
// Здесь мы можем добавить логику обработки GS-символов для маркировки
// Для ScanOpos 8.x символ GS приходит как ASCII 29
Сообщить("Считан штрихкод: " + ШтрихКод);
// Вызов основной функции поиска товара
ОбработатьШтрихкод(ШтрихКод);
КонецЕсли;
КонецПроцедуры
Важный момент: если вы используете старый драйвер АТОЛ (например, версии 6.x), который также популярен в среде 7.7, помните, что он может требовать платной лицензии для работы с современными устройствами. В то время как Scaner1C.dll или корректно настроенный ScanOpos 8.x позволяют решить задачу бесплатно.
Подведем итог нашему исследованию. Если сканер «виден» в тесте, но «молчит» в программе, наиболее вероятная причина — отсутствие суффикса, который служит триггером для создания события. Если же настройка суффикса не помогает, стоит переключиться на использование Scaner1C.dll, так как она более адаптирована под Windows 10 и виртуальные порты. Не забывайте также проверять разрядность установленных библиотек Visual C++, так как 1С 7.7 критически зависит от 32-битных компонентов.