Приветствуем вас! В процессе автоматизации розничной торговли алкогольной продукцией одной из самых неприятных и частых проблем, с которой могут столкнуться кассиры и технические специалисты, является сбой при считывании акцизных марок ЕГАИС. Типичный сценарий выглядит следующим образом: в Рабочем месте кассира (РМК) сканируется обычный штрихкод (EAN-13) бутылки, программа успешно находит товар и открывает модальное окно запроса акцизной марки. Но при первом считывании 2D-кода марки система возвращает ошибку «Данные по коду не найдены». При этом, если кассир сканирует ту же самую марку повторно, она без проблем добавляется в чек.
В этой статье мы подробно разберем, почему возникает необходимость дважды сканировать акцизную марку, проанализируем внутренние механизмы платформы 1С и драйверов оборудования, а также рассмотрим по шагам все возможные методы решения этой проблемы.
Рассмотрим детально, что происходит на программном уровне при использовании сканера штрихкодов. Большинство торговых точек подключают сканеры в режиме эмуляции клавиатуры (Keyboard Wedge). В этом режиме операционная система Windows воспринимает сканер как обычную клавиатуру, которая очень быстро вводит символы.
Каждый отсканированный штрихкод завершается специальным управляющим символом — суффиксом возврата каретки (клавиша Enter или символ CR с кодом 13). Проанализируем цепочку событий при сканировании марки:
1С:Сканер штрихкода (NativeApi)) перехватывает этот поток символов, формирует пакет данных и генерирует в платформе предопределенное событие ВнешнееСобытие.8.3.12 и выше, алгоритм обработки клавиатурного ввода был изменен. Платформа сначала корректно отрабатывала событие сканирования, но сразу же за ним повторно интерпретировала завершающий символ Enter (суффикс) как еще одно, отдельное нажатие клавиши кассиром. Это приводило к генерации второго, «ложного» внешнего события с пустыми или искаженными данными.Для наглядности посмотрим, как выглядит упрощенная схема обработки данных в модуле управляемого приложения 1С:
&НаКлиенте
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
// При баге платформы 8.3.12+ это событие вызывалось дважды за одно сканирование.
// Первое событие передавало правильные "Данные" (код марки).
// Второе событие передавало пустую строку или некорректный символ возврата каретки.
Если Источник = "СканерШтрихкода" Тогда
ОбработатьПолученныйШтрихкод(Данные);
КонецЕсли;
КонецПроцедуры
Если вы столкнулись с этой проблемой на релизах конфигурации 1С:Розница 2.2 (до версии 2.2.9 включительно) и на платформе версии 8.3.12 или выше, самым простым и официальным решением является обновление программного обеспечения:
1С:Розница 2.2.10.19 или более свежий. Начиная с версии 2.2.10 разработчики 1С существенно переработали код библиотек подключаемого оборудования (БПО). В результате двойное срабатывание обработчика внешнего события было устранено на уровне программного кода конфигурации.1С:Розница (например, из-за наличия серьезных доработок и кастомизации кода), техническая поддержка 1С рекомендует использовать стабильную платформу 8.3.10.2772. На этой версии платформы механизм клавиатурного ввода работает корректно, и двойного вызова события не происходит.Выясним наиболее надежный с технической точки зрения способ решения проблем со сканированием штрихкодов в 1С. Это перевод сканера в режим виртуального COM-порта (USB-to-Serial / VCP). В этом режиме сканер перестает имитировать нажатия клавиш клавиатуры, а передает данные напрямую в драйвер 1С через выделенный порт Windows.
При использовании COM-порта операционная система и платформа 1С четко разграничивают данные сканера и нажатия клавиш клавиатуры. Проблема ложного нажатия Enter исчезает навсегда. Выполним настройку по шагам:
COM3.COM3).Если перевести сканер в режим COM-порта по техническим причинам невозможно, разберем альтернативный способ исправления клавиатурного режима работы через тонкую настройку параметров драйвера.
Причиной некорректного разбора штрихкода часто является слишком маленький таймаут клавиатурного ввода. Двумерные акцизные марки (PDF417 или DataMatrix) содержат огромное количество символов (до 150 знаков). Сканер в режиме клавиатуры отправляет эти символы пачками с микроскопическими задержками. Если таймаут в 1С настроен неверно, драйвер считает, что сканирование завершено раньше времени, «разрывает» марку на две части и генерирует два события вместо одного.
Выполним корректировку настроек:
50 мс.150–200 миллисекунд. Это позволит драйверу гарантированно дождаться окончания передачи всей длинной строки акцизной марки перед отправкой события в 1С.CR / LF), либо жестко пропишите в настройках драйвера 1С конкретный суффикс (обычно это 13 для клавиши Enter) и префикс, чтобы драйвер мог четко определять границы передаваемых данных.Проанализируем еще одну неочевидную проблему, приводящую к ошибке «Данные по коду не найдены». Так как сканер в режиме клавиатуры передает символы последовательным нажатием клавиш, на результат сканирования напрямую влияет текущий язык ввода (раскладка), активный на компьютере в момент продажи.
Акцизные марки состоят из латинских букв, цифр и спецсимволов. Если у кассира в Windows включена русская раскладка клавиатуры, то при сканировании латинские буквы заменяются на кириллицу (например, латинская буква A превратится в русскую Ф, буква B в И и так далее). 1С получает искаженную строку, сверяет её с данными ЕГАИС и возвращает ошибку поиска кода.
Для исправления этой ситуации применим следующие меры:
Если вы обновили и платформу, и конфигурацию, настроили сканер через виртуальный COM-порт, но при сканировании конкретных бутылок все равно спорадически возникает ошибка «Данные по коду не найдены», причина может крыться в некорректном сопоставлении данных в самой базе 1С.
При помарочном учете алкоголя (ЕГАИС 3.0) каждая акцизная марка при поступлении ТТН должна быть записана в базу данных и связана с конкретной номенклатурной позицией. Посмотрим на упрощенную схему связей:
МаркиЕГАИС.ШтрихкодыУпаковокТоваров.В этом случае вам потребуется запустить тестирование и исправление информационной базы, либо использовать групповую обработку для восстановления связей между справочником номенклатуры и регистром сведений акцизных марок.
Подводя итоги нашего разбора, составим краткий чек-лист для быстрого устранения проблемы двойного сканирования:
2.2.10.19, запланируйте обновление.8.3.10.2772.150–200 мс и активируйте в сканере режим передачи символов через Alt-коды для защиты от смены раскладки Windows.Применение этих рекомендаций позволит вам полностью избавиться от ошибок при продаже алкогольной продукции, ускорит работу кассиров на торговых точках и исключит штрафные санкции со стороны контролирующих органов.