Почему в 1С:Розница акцизные марки ЕГАИС сканируются обрезанными или в нижнем регистре и как это исправить?

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

При оформлении розничных продаж алкогольной продукции в программе 1С:Розница пользователи нередко сталкиваются с ситуацией, когда двумерный штрихкод акцизной марки считывается не полностью (например, только первые 40 символов из 68) либо передается в нижнем регистре. В результате документ с некорректным кодом отправляется в ЕГАИС, что приводит к отказам со стороны системы и ошибкам фиксации чека.

Разберем детально, по каким причинам происходит подобное искажение данных при сканировании, как устроена структура марок и какими способами можно предотвратить отправку некорректных кодов в ЕГАИС.

Структура акцизных марок и признаки поврежденных данных

Для понимания сути ошибки проанализируем формат штрихкодов алкогольной продукции:

  1. Старые акцизные марки (PDF417): содержат 68 символов (только цифры) либо старые варианты по 40 символов.
  2. Новые акцизные марки (DataMatrix): содержат строго 68 символов (цифры и буквы латинского алфавита верхнего регистра) или 150 символов (для помарочного учета специального образца).

Рассмотрим структуру стандартной новой марки формата 68 символов:

Пример корректного кода: 20N00001CGUMZYCB99J1NKN31105001000056NQQMS5VP4HTF5SB46ZSQQJD8BNJP891

  1. 20 — номер версии прикладного софта ЕГАИС (2 символа).
  2. 00001CGUMZYCB99J — зашифрованный в кодировке Base36 код алкогольной продукции / алкокод (14 символов).
  3. 1NKN31105001 — номер заявки на печать марок (12 символов).
  4. 000056 — порядковый номер марки в заявке (6 символов).
  5. NQQMS5VP4HTF5SB46ZSQQJD8BNJP891 — защитный криптографический блок / электронная подпись (34 символа).

Если в 1С фиксируется строка вида 22N00002V64D85QI3O7831Y61026066004646EFL (ровно 40 символов), это означает, что сканер или драйвер передачи данных потерял защитную последовательность и оборвал прием строки.

Причины возникновения ошибки

Выясним основные аппаратные и программные факторы, вызывающие сбои:

  1. Таймаут драйвера «1С:Сканеры штрихкода»: при подключении сканера через эмуляцию COM-порта (виртуальный USB-COM) драйвер ожидает непрерывный поток байтов. Если микроконтроллер сканера делает минимальную паузу между передачей первой части данных и защитного блока, драйвер считает сеанс завершенным по таймауту и передает в 1С только принятую часть.
  2. Буферизация и прошивка 2D-сканера: некоторые бюджетные сканеры имеют ограниченный буфер FIFO или ограничения длины считываемого кода в настройках декодирования DataMatrix/PDF417.
  3. Конфликт клавиатурных перехватчиков: если сканер работает в режиме клавиатуры (HID), установленные на кассовом ПК программы автоматического переключения раскладки (например, Punto Switcher) могут менять регистр символов или «проглатывать» часть потока нажатий клавиш.
  4. Настройки модификации регистра в сканере: в конфигурации самого сканера может быть активирована опция принудительного перевода текста в нижний регистр (Force Lowercase).

Способ 1. Настройка параметров подключения и оборудования

Разберем по шагам, как правильно сконфигурировать сканер и торговое оборудование в 1С:

  1. Перевод сканера в режим USB HID POS (или USB-POS): вместо эмуляции виртуального COM-порта переключите сканер в режим USB POS с помощью управляющего штрихкода из инструкции к вашей модели. В этом режиме данные передаются монолитным пакетом через стандартный системный интерфейс, что полностью исключает разрывы потока по таймауту.
  2. Увеличение таймаута в 1С: если используется режим виртуального COM-порта, откройте раздел Администрирование → Подключаемое оборудование, выберите экземпляр сканера, перейдите в Параметры подключения и увеличьте значение параметра Таймаут (время ожидания окончания передачи) со стандартных значений до 100–150 мс.
  3. Обновление компоненты БПО: убедитесь, что используется актуальная версия драйвера 1С:Сканеры штрихкода (NativeApi) из последней версии Библиотеки подключаемого оборудования.
  4. Сброс и прошивка сканера: отсканируйте сервисные коды сброса к заводским настройкам (Factory Default), затем примените настроечные штрихкоды для оптимизации работы с ЕГАИС (включение полного набора спецсимволов и отключение преобразования регистра).

Способ 2. Программная валидация марок в условиях РИБ через расширение

Типовая конфигурация 1С:Розница не всегда содержит жесткие блокировки на неполную длину марки при сканировании. Если у вас развернута распределенная информационная база (РИБ) с множеством удаленных торговых точек, снимать конфигурацию с поддержки не требуется. Достаточно реализовать проверку через Расширение конфигурации (.cfe).

Рассмотрим пример функции валидации марки перед ее добавлением в чек или обработчик акцизов:


&НаКлиенте
Функция МаркаКорректна(Знач Штрихкод)
    
    // Приводим марку к верхнему регистру
    Штрихкод = ВРег(СокрЛП(Штрихкод));
    
    ДлинаМарки = СтрДлина(Штрихкод);
    
    // Проверяем допустимую длину акцизной марки ЕГАИС
    Если ДлинаМарки <> 68 И ДлинаМарки <> 150 Тогда
        ТекстОшибки = СтрШаблон("Считана некорректная акцизная марка (длина %1 симв.). Повторите сканирование!", ДлинаМарки);
        ПоказатьПредупреждение(, ТекстОшибки);
        Возврат Ложь;
    КонецЕсли;
    
    Возврат Истина;

КонецФункции

Подключим перехват события обработки штрихкода в форме РМК (Рабочего места кассира) с помощью директивы &Вместо или &Перед:


&НаКлиенте
&Перед("ОбработатьШтрихкод")
Процедура Расш_ОбработатьШтрихкод(Штрихкод, Отказ)
    
    // Проверяем, является ли считанный код акцизной маркой
    Если СтрНачинаетсяС(Штрихкод, "2") Или СтрДлина(Штрихкод) > 30 Тогда
        Штрихкод = ВРег(СокрЛП(Штрихкод));
        
        Если НЕ МаркаКорректна(Штрихкод) Тогда
            Отказ = Истина;
            Возврат;
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры

Преимущества внедрения через расширение в РИБ:

  1. Расширение автоматически реплицируется по всем узлам распределенной базы данных при очередной синхронизации.
  2. Основная конфигурация остается на типовой поддержке без необходимости ручного обновления каждого периферийного узла.
  3. Кассир физически не сможет добавить в чек обрезанную марку, так как при первой же попытке программа заблокирует операцию и потребует повторного сканирования.
← На главную