Почему при сканировании акцизной марки в 1С:Розница возникает ошибка «Данные по коду не найдены» и как её исправить?

Программист 1С v8.3 (Управляемые формы) 1С:Розница Торговля и дистрибуция
← На главную

Приветствуем вас! В процессе автоматизации розничной торговли алкогольной продукцией одной из самых неприятных и частых проблем, с которой могут столкнуться кассиры и технические специалисты, является сбой при считывании акцизных марок ЕГАИС. Типичный сценарий выглядит следующим образом: в Рабочем месте кассира (РМК) сканируется обычный штрихкод (EAN-13) бутылки, программа успешно находит товар и открывает модальное окно запроса акцизной марки. Но при первом считывании 2D-кода марки система возвращает ошибку «Данные по коду не найдены». При этом, если кассир сканирует ту же самую марку повторно, она без проблем добавляется в чек.

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

Причина 1: Баг платформы 1С:Предприятие и механизм «двойного внешнего события»

Рассмотрим детально, что происходит на программном уровне при использовании сканера штрихкодов. Большинство торговых точек подключают сканеры в режиме эмуляции клавиатуры (Keyboard Wedge). В этом режиме операционная система Windows воспринимает сканер как обычную клавиатуру, которая очень быстро вводит символы.

Каждый отсканированный штрихкод завершается специальным управляющим символом — суффиксом возврата каретки (клавиша Enter или символ CR с кодом 13). Проанализируем цепочку событий при сканировании марки:

  1. Сканер считывает акцизную марку и отправляет поток символов в систему.
  2. Драйвер торгового оборудования 1С (например, 1С:Сканер штрихкода (NativeApi)) перехватывает этот поток символов, формирует пакет данных и генерирует в платформе предопределенное событие ВнешнееСобытие.
  3. Платформа 1С открывает форму ввода акцизной марки и помещает туда считанный код.
  4. Суть бага платформы: Начиная с версий платформы 8.3.12 и выше, алгоритм обработки клавиатурного ввода был изменен. Платформа сначала корректно отрабатывала событие сканирования, но сразу же за ним повторно интерпретировала завершающий символ Enter (суффикс) как еще одно, отдельное нажатие клавиши кассиром. Это приводило к генерации второго, «ложного» внешнего события с пустыми или искаженными данными.
  5. В результате этого «события-призрака» форма ввода марки моментально пыталась обработать пустую строку, закрывалась или выдавала ошибку «Данные по коду не найдены». При повторном физическом сканировании клавиатурный буфер уже был пуст, и марка наконец вставала в чек корректно.

Для наглядности посмотрим, как выглядит упрощенная схема обработки данных в модуле управляемого приложения 1С:


&НаКлиенте
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
    // При баге платформы 8.3.12+ это событие вызывалось дважды за одно сканирование.
    // Первое событие передавало правильные "Данные" (код марки).
    // Второе событие передавало пустую строку или некорректный символ возврата каретки.
    Если Источник = "СканерШтрихкода" Тогда
        ОбработатьПолученныйШтрихкод(Данные);
    КонецЕсли;
КонецПроцедуры

Решение 1: Обновление конфигурации и подбор стабильной версии платформы

Если вы столкнулись с этой проблемой на релизах конфигурации 1С:Розница 2.2 (до версии 2.2.9 включительно) и на платформе версии 8.3.12 или выше, самым простым и официальным решением является обновление программного обеспечения:

  1. Обновление конфигурации: Перейдите на релиз 1С:Розница 2.2.10.19 или более свежий. Начиная с версии 2.2.10 разработчики 1С существенно переработали код библиотек подключаемого оборудования (БПО). В результате двойное срабатывание обработчика внешнего события было устранено на уровне программного кода конфигурации.
  2. Откат на стабильную платформу: Если у вас нет возможности оперативно обновить конфигурацию 1С:Розница (например, из-за наличия серьезных доработок и кастомизации кода), техническая поддержка 1С рекомендует использовать стабильную платформу 8.3.10.2772. На этой версии платформы механизм клавиатурного ввода работает корректно, и двойного вызова события не происходит.

Решение 2: Перевод сканера в режим эмуляции COM-порта (виртуальный RS-232)

Выясним наиболее надежный с технической точки зрения способ решения проблем со сканированием штрихкодов в 1С. Это перевод сканера в режим виртуального COM-порта (USB-to-Serial / VCP). В этом режиме сканер перестает имитировать нажатия клавиш клавиатуры, а передает данные напрямую в драйвер 1С через выделенный порт Windows.

При использовании COM-порта операционная система и платформа 1С четко разграничивают данные сканера и нажатия клавиш клавиатуры. Проблема ложного нажатия Enter исчезает навсегда. Выполним настройку по шагам:

  1. Найдите инструкцию (руководство пользователя) к вашей модели сканера (например, Honeywell, Zebra, Datalogic).
  2. Найдите в инструкции управляющий штрихкод перевода интерфейса в режим виртуального COM-порта. Обычно он называется «Enable Honeywell USB Serial», «USB CDC Host» или «Emulate RS-232». Отсканируйте его.
  3. Скачайте и установите на компьютер официальный драйвер виртуального COM-порта от производителя вашего сканера. После этого в Диспетчере устройств Windows в разделе «Порты (COM и LPT)» должен появиться новый порт, например, COM3.
  4. Откройте 1С:Розницу, перейдите в раздел «Администрирование» — «Подключаемое оборудование».
  5. Выберите ваш сканер штрихкодов, нажмите кнопку «Настроить». В открывшемся окне измените тип порта с «Клавиатура» на ваш виртуальный порт (например, COM3).
  6. Протестируйте работу устройства. Теперь марка будет считываться с первого раза, мгновенно и без ошибок.

Решение 3: Тонкая настройка суффиксов и таймаута в драйвере 1С

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

Причиной некорректного разбора штрихкода часто является слишком маленький таймаут клавиатурного ввода. Двумерные акцизные марки (PDF417 или DataMatrix) содержат огромное количество символов (до 150 знаков). Сканер в режиме клавиатуры отправляет эти символы пачками с микроскопическими задержками. Если таймаут в 1С настроен неверно, драйвер считает, что сканирование завершено раньше времени, «разрывает» марку на две части и генерирует два события вместо одного.

Выполним корректировку настроек:

  1. В 1С перейдите в форму настройки сканера штрихкода («Администрирование» — «Подключаемое оборудование» — «Настройка»).
  2. Найдите параметр «Таймаут клавиатурного ввода» (или «Чувствительность»). По умолчанию там может быть установлено значение в 50 мс.
  3. Увеличьте это значение до 150–200 миллисекунд. Это позволит драйверу гарантированно дождаться окончания передачи всей длинной строки акцизной марки перед отправкой события в 1С.
  4. Сбросьте настройки суффикса в самом физическом сканере с помощью управляющего штрихкода из инструкции (снимите добавление суффикса CR / LF), либо жестко пропишите в настройках драйвера 1С конкретный суффикс (обычно это 13 для клавиши Enter) и префикс, чтобы драйвер мог четко определять границы передаваемых данных.

Решение 4: Устранение влияния раскладки клавиатуры Windows

Проанализируем еще одну неочевидную проблему, приводящую к ошибке «Данные по коду не найдены». Так как сканер в режиме клавиатуры передает символы последовательным нажатием клавиш, на результат сканирования напрямую влияет текущий язык ввода (раскладка), активный на компьютере в момент продажи.

Акцизные марки состоят из латинских букв, цифр и спецсимволов. Если у кассира в Windows включена русская раскладка клавиатуры, то при сканировании латинские буквы заменяются на кириллицу (например, латинская буква A превратится в русскую Ф, буква B в И и так далее). 1С получает искаженную строку, сверяет её с данными ЕГАИС и возвращает ошибку поиска кода.

Для исправления этой ситуации применим следующие меры:

  1. Настройка передачи через Alt-коды (Universal Keyboard): Во многих современных 2D-сканерах есть функция эмуляции ввода символов через Alt-коды (передача символа путем имитации зажатой клавиши Alt и набора числового кода на цифровой клавиатуре). Найдите в руководстве к вашему сканеру штрихкод с названием «Alt Mode», «Enable Alt Mode» или «Universal Keyboard Worksheet» и считайте его. После этого сканер будет передавать символы корректно независимо от того, какой язык выбран на кассе.
  2. Программный перевод в 1С: При использовании современных версий Библиотеки подключаемого оборудования (БПО) драйвер 1С умеет автоматически декодировать русские символы обратно в латиницу, но для этого конфигурация «Розница» должна быть обновлена до актуального релиза.

Решение 5: Нарушение связей марок в регистрах ЕГАИС

Если вы обновили и платформу, и конфигурацию, настроили сканер через виртуальный COM-порт, но при сканировании конкретных бутылок все равно спорадически возникает ошибка «Данные по коду не найдены», причина может крыться в некорректном сопоставлении данных в самой базе 1С.

При помарочном учете алкоголя (ЕГАИС 3.0) каждая акцизная марка при поступлении ТТН должна быть записана в базу данных и связана с конкретной номенклатурной позицией. Посмотрим на упрощенную схему связей:

  1. При подтверждении накладной в системе заполняется регистр сведений МаркиЕГАИС.
  2. Каждая марка связывается со справочником ШтрихкодыУпаковокТоваров.
  3. Если в процессе приемки произошел программный сбой, марка могла записаться в базу без привязки к конкретной номенклатуре (поле «Номенклатура» осталось пустым). При продаже на кассе 1С считывает марку, видит ее в регистре, но не может понять, какому именно товару она принадлежит, выдавая ошибку сопоставления.

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

Резюме по устранению неполадки

Подводя итоги нашего разбора, составим краткий чек-лист для быстрого устранения проблемы двойного сканирования:

  1. Проверьте текущую версию конфигурации 1С:Розница. Если она ниже 2.2.10.19, запланируйте обновление.
  2. Если обновление невозможно, переведите платформу 1С:Предприятие на стабильный релиз 8.3.10.2772.
  3. Наилучшим решением является отказ от режима эмуляции клавиатуры и перевод сканера в режим виртуального COM-порта (RS-232).
  4. При работе в режиме клавиатуры обязательно увеличьте таймаут клавиатурного ввода в драйвере 1С до 150–200 мс и активируйте в сканере режим передачи символов через Alt-коды для защиты от смены раскладки Windows.

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

← На главную