При оформлении розничных продаж алкогольной продукции в программе 1С:Розница пользователи нередко сталкиваются с ситуацией, когда двумерный штрихкод акцизной марки считывается не полностью (например, только первые 40 символов из 68) либо передается в нижнем регистре. В результате документ с некорректным кодом отправляется в ЕГАИС, что приводит к отказам со стороны системы и ошибкам фиксации чека.
Разберем детально, по каким причинам происходит подобное искажение данных при сканировании, как устроена структура марок и какими способами можно предотвратить отправку некорректных кодов в ЕГАИС.
Для понимания сути ошибки проанализируем формат штрихкодов алкогольной продукции:
Рассмотрим структуру стандартной новой марки формата 68 символов:
Пример корректного кода: 20N00001CGUMZYCB99J1NKN31105001000056NQQMS5VP4HTF5SB46ZSQQJD8BNJP891
20 — номер версии прикладного софта ЕГАИС (2 символа).00001CGUMZYCB99J — зашифрованный в кодировке Base36 код алкогольной продукции / алкокод (14 символов).1NKN31105001 — номер заявки на печать марок (12 символов).000056 — порядковый номер марки в заявке (6 символов).NQQMS5VP4HTF5SB46ZSQQJD8BNJP891 — защитный криптографический блок / электронная подпись (34 символа).Если в 1С фиксируется строка вида 22N00002V64D85QI3O7831Y61026066004646EFL (ровно 40 символов), это означает, что сканер или драйвер передачи данных потерял защитную последовательность и оборвал прием строки.
Выясним основные аппаратные и программные факторы, вызывающие сбои:
Разберем по шагам, как правильно сконфигурировать сканер и торговое оборудование в 1С:
Таймаут (время ожидания окончания передачи) со стандартных значений до 100–150 мс.1С:Сканеры штрихкода (NativeApi) из последней версии Библиотеки подключаемого оборудования.Типовая конфигурация 1С:Розница не всегда содержит жесткие блокировки на неполную длину марки при сканировании. Если у вас развернута распределенная информационная база (РИБ) с множеством удаленных торговых точек, снимать конфигурацию с поддержки не требуется. Достаточно реализовать проверку через Расширение конфигурации (.cfe).
Рассмотрим пример функции валидации марки перед ее добавлением в чек или обработчик акцизов:
&НаКлиенте
Функция МаркаКорректна(Знач Штрихкод)
// Приводим марку к верхнему регистру
Штрихкод = ВРег(СокрЛП(Штрихкод));
ДлинаМарки = СтрДлина(Штрихкод);
// Проверяем допустимую длину акцизной марки ЕГАИС
Если ДлинаМарки <> 68 И ДлинаМарки <> 150 Тогда
ТекстОшибки = СтрШаблон("Считана некорректная акцизная марка (длина %1 симв.). Повторите сканирование!", ДлинаМарки);
ПоказатьПредупреждение(, ТекстОшибки);
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции
Подключим перехват события обработки штрихкода в форме РМК (Рабочего места кассира) с помощью директивы &Вместо или &Перед:
&НаКлиенте
&Перед("ОбработатьШтрихкод")
Процедура Расш_ОбработатьШтрихкод(Штрихкод, Отказ)
// Проверяем, является ли считанный код акцизной маркой
Если СтрНачинаетсяС(Штрихкод, "2") Или СтрДлина(Штрихкод) > 30 Тогда
Штрихкод = ВРег(СокрЛП(Штрихкод));
Если НЕ МаркаКорректна(Штрихкод) Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Преимущества внедрения через расширение в РИБ: