Почему сканер в 1С 7.7 работает в тесте драйвера, но не вызывает ОбработкуВнешнегоСобытия?

Программист 1С v7.7 Торговля и дистрибуция
← На главную

При работе со старыми конфигурациями на платформе 1С 7.7 в современных операционных системах (Windows 10/11) системные администраторы и программисты часто сталкиваются с парадоксальной ситуацией. Сканер штрихкодов, подключенный через виртуальный COM-порт, отлично проходит «Тест устройства» в настройках торгового оборудования, но при попытке сканирования в самой программе ничего не происходит — процедура ОбработкаВнешнегоСобытия просто не вызывается. Особенно остро эта проблема проявляется при использовании драйвера ScanOpos 8.0.4.1 и сканеров маркировки (например, Newland), где критически важна передача спецсимволов GS (ASCII 29).

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

Разбор причины: разница между Тестом и Событием

Проанализируем сначала, почему «Тест устройства» работает успешно. В этом режиме драйвер открывает порт и просто выводит в окно все данные, которые поступают из буфера последовательного порта в реальном времени. Ему не важно, закончено ли сообщение или нет.

Однако механизм ОбработкаВнешнегоСобытия в 1С 7.7 работает иначе. Для того чтобы драйвер сгенерировал внешнее событие и «пробросил» его в платформу, он должен получить четкий сигнал о завершении передачи данных. Таким сигналом является суффикс. Рассмотрим ситуацию: если сканер физически настроен на передачу только кода штрихкода, а в настройках драйвера 1С ожидается суффикс (например, CR — возврат каретки, код 13), драйвер будет бесконечно ждать этого символа. Данные в порт пришли, но событие не создается, так как пакет данных считается неполным.

Шаг 1. Проверка и настройка суффикса

Выясним, передает ли ваш сканер суффикс и какой именно. Большинство современных сканеров Newland по умолчанию могут быть настроены в режим эмуляции клавиатуры или COM-порта без суффикса. Для работы с 1С 7.7 через ScanOpos выполните следующие действия:

  1. Откройте руководство программирования вашего сканера и сосканируйте штрихкод "Add CR Suffix" или "Add LF Suffix".
  2. В 1С перейдите в меню Сервис — Настройка торгового оборудования.
  3. В параметрах сканера убедитесь, что в поле «Суффикс» указано соответствующее значение (обычно это #13 для CR).

Если суффикс не настроен должным образом, процедура ОбработкаВнешнегоСобытия никогда не получит управление, даже если в тесте данные отображаются корректно.

Шаг 2. Особенности библиотеки ScanOpos 8.x и системные требования

Версия драйвера 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"

Шаг 3. Использование альтернативной библиотеки Scaner1C.dll

Если штатный драйвер ScanOpos продолжает работать нестабильно, разберем альтернативный вариант, который часто упоминается как наиболее надежный для «семерки» — библиотеку Scaner1C.dll. Это модифицированная версия драйвера, лишенная многих проблем с виртуальными COM-портами.

Посмотрим, как изменить код для работы с альтернативной библиотекой. В глобальном модуле (или в специализированной обработке обслуживания) необходимо проверить инициализацию объекта:


Процедура ПриНачалеРаботыСистемы()
    Если ЗагрузитьВнешнююКомпоненту("Scaner1C.dll") <> 1 Тогда
        Предупреждение("Компонента сканера не найдена!");
    КонецЕсли;
КонецПроцедуры

Библиотека Scaner1C.dll лучше справляется с передачей спецсимволов и стабильнее удерживает соединение с виртуальными портами, которые создают драйверы Newland CDC.

Шаг 4. Специфика виртуальных COM-портов и Newland CDC

Разберем ситуацию с драйверами эмуляции. Сканеры Newland при подключении через USB в режиме Virtual COM требуют установки Newland CDC Driver. Выясним причину возможных конфликтов: Windows 10 может автоматически подтянуть стандартный драйвер usbser.sys, который не всегда корректно транслирует управляющие сигналы, необходимые драйверу 1С для активации события.

Рекомендации по настройке порта:

Шаг 5. Проверка кода ОбработкиВнешнегоСобытия

Наконец, проанализируем сам программный код в 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-битных компонентов.

← На главную