При обновлении конфигурации 1С:Розница до редакции 2.3.9 и выше многие пользователи сталкиваются с неприятной проблемой: сканеры штрихкодов, которые годами работали стабильно, начинают «резать» коды. Особенно это заметно при работе с маркировкой Честный Знак (DataMatrix) и акцизными марками ЕГАИС. Штрихкод считывается не полностью, либо программа выдает ошибку, что код не найден в базе, так как в систему попадает лишь его часть.
В этой статье мы подробно разберем, почему это происходит, проанализируем изменения в архитектуре программы и найдем несколько рабочих способов решения проблемы, от программных настроек в 1С до манипуляций с самим оборудованием.
Давайте проанализируем ситуацию. В последних релизах 1С:Розница произошло масштабное обновление модуля Библиотека подключаемого оборудования (БПО). Основное изменение коснулось перехода на новые версии драйверов (версия 10.х и выше) и преимущественное использование технологии NativeApi вместо старых COM-компонент.
Основная проблема заключается в алгоритме обработки данных, поступающих через виртуальный COM-порт. Коды маркировки DataMatrix содержат гораздо больше символов, чем обычные штрихкоды EAN-13. Драйвер 1С:Сканер штрихкода версии 10 ожидает поступления всех символов кода в течение очень короткого промежутка времени. Если пакет данных от сканера задерживается хотя бы на несколько миллисекунд (что часто бывает из-за загруженности USB-шины или специфики работы эмуляции COM-порта), драйвер считает, что передача завершена, и «отдает» в 1С обрубок кода — проблему решит компонента для распознавания поврежденных кодов маркировки. Оставшаяся часть кода либо отбрасывается, либо приходит следующим событием, что окончательно сбивает программу с толку.
Первым делом рассмотрим самый простой способ, который не требует перенастройки самого сканера. В интерфейсе 1С для оборудования предусмотрен параметр, регулирующий время ожидания данных.
Рассмотрим подробнее установку значений. Часто по умолчанию там стоит 50 или 75 мс. Как показывает практика, для стабильной работы с длинными кодами маркировки этого недостаточно — поможет инструмент проверки и верификации кодов маркировки. Попробуем последовательно увеличивать это значение:
Важный нюанс: Слишком большой таймаут может привести к тому, что при очень быстром сканировании нескольких разных товаров коды будут «склеиваться» в одну строку. Поэтому наша задача — найти золотую середину (обычно это 120–150 мс).
Если манипуляции с таймаутом в режиме COM-порта не помогают, проанализируем альтернативный вариант подключения — для этого подойдёт приложение для использования смартфона как ТСД и сканера. Режим эмуляции клавиатуры (HID-Keyboard) работает на уровне операционной системы иначе. Данные попадают в буфер клавиатуры, и 1С перехватывает их через префикс (обычно это символ F7 или другой заданный символ).
Для перехода на этот режим выполним следующие шаги:
COM-порта на Клавиатура.Минусы этого подхода: Как отмечают пользователи на форумах, в режиме клавиатуры может наблюдаться замедление реакции системы, а если в момент сканирования фокус ввода находится не в поле подбора товара, данные могут «улететь» в открытое окно поиска или другое текстовое поле. Однако, этот метод практически на 100% избавляет от проблемы «разрезания» длинных кодов маркировки.
Часто программисты пытаются подгрузить старый драйвер (версии 9.х или 8.х) через справочник Драйверы оборудования, но 1С упорно продолжает использовать версию 10. Это происходит из-за того, что современная БПО ищет в системе наиболее актуальную версию по внутреннему идентификатору.
Чтобы заставить программу работать со старой компонентой, проанализируем ситуацию с кэшем. 1С распаковывает внешние компоненты в локальную папку пользователя. Выясним путь к этой папке:
%AppData%\Roaming\1C\1cv8\ExtCompT
Попробуем выполнить следующие действия:
ExtCompT..zip — для этого есть панель централизованного управления кассами и драйверами БПО.Однако помните, что новые релизы 1С:Розница 2.3 могут использовать методы, которых просто нет в старых драйверах. Если после замены драйвера при попытке теста устройства вы видите ошибку Метод не найден, значит, БПО больше не поддерживает старую компоненту и придется использовать Решение 1 или Решение 2.
Иногда корень проблемы лежит в том, что сканер передает символы слишком быстро для текущей загрузки процессора или USB-контроллера. Для сканеров Honeywell и других профессиональных моделей существует настройка Inter-character Delay (межсимвольная задержка).
Разберем, как это работает: сканер после считывания DataMatrix начинает «выплевывать» символы в порт. Если мы добавим задержку в 2–5 миллисекунд между каждым символом, общий поток данных станет более равномерным, и драйвер 1С успеет корректно обработать весь пакет без разрывов.
Для настройки найдите в сервисном руководстве штрихкоды:
Подводя итог, можно сказать, что нестабильная работа сканеров в новых версиях 1С — это следствие ужесточения требований драйверов к скорости передачи данных. Рассмотрим пошаговый план действий для системного администратора:
CR (Enter) и префикс.Совместными усилиями, подбирая параметры задержки и режимы подключения, можно добиться стабильного считывания даже самых сложных марок ЕГАИС и кодов маркировки в обновленной 1С:Рознице — есть готовая обработка для автоматизации сканирования и фиксации марок.