При работе с подакцизным алкоголем в конфигурации 1С:Розница (включая релизы ветки 2.2 и выше) пользователи часто сталкиваются с критической проблемой: новые акцизные марки, запрошенные из ЕГАИС и распечатанные на обычном офисном принтере, наотрез отказываются считываться 2D-сканерами на кассе. При этом визуально марка выглядит абсолютно четкой, без смазанных линий и дефектов. Попытки напечатать марку на другом принтере (струйном или лазерном) чаще всего не приносят результата, а временным решением становится нецелесообразное увеличение масштаба штрихкода до размеров половины листа А4.
В этой статье мы подробно разберем, почему возникает эта техническая сложность, проанализируем физические и программные причины плохой читаемости двухмерных кодов формата PDF417 и рассмотрим пошаговые методы устранения проблемы — от быстрой настройки параметров печати до доработки макета 1С и калибровки торгового оборудования.
Для начала проанализируем физику процесса считывания штрихкода сканером. Двухмерный код PDF417, который используется на акцизных марках ЕГАИС, состоит из чередования черных и белых прямоугольных элементов (микромодулей) строго определенной ширины. Сканер считывает разницу контрастов между этими элементами.
Когда мы отправляем штрихкод на печать из 1С на обычный офисный лазерный или струйный принтер формата А4, в дело вступают следующие негативные факторы:
Растягивать, то при изменении размеров ячеек таблицы штрихкод деформируется. Нарушение математических пропорций PDF417 даже на доли миллиметра делает марку нечитаемой.Первым делом нам необходимо исключить программное искажение геометрии штрихкода самой платформой 1С. Для этого выполним доработку макета печатной формы. Нам потребуется войти в конфигуратор и внести точечные изменения.
Разберем этот процесс по шагам:
Растягивать. Нам необходимо принудительно установить значение Реальный размер или Пропорционально. Это заставит платформу выводить штрихкод пиксель-в-пиксель без интерполяции под границы сетки ячеек.QuietZone (или «Свободная зона») в значение истины, либо просто увеличим белые отступы в макете вокруг картинки.Если мы формируем штрихкод программно, то перед выводом области на печать убедимся, что параметры объекта заданы корректно. Рассмотрим пример программной настройки параметров двухмерного штрихкода:
ОбластьМакета = Макет.ПолучитьОбласть("ОбластьШтрихкода");
РисунокШтрихкод = ОбластьМакета.Рисунки.ШтрихкодМарки;
// Устанавливаем тип кода PDF417
РисунокШтрихкод.Объект.ТипКода = 11;
// Отключаем отображение текстовой расшифровки под кодом
РисунокШтрихкод.Объект.ОтображатьТекст = Ложь;
// Задаем максимальный уровень коррекции ошибок для надежности
РисунокШтрихкод.Объект.УровеньКоррекцииОшибок = 4;
Если макет настроен правильно, но принтер все равно размывает границы, нам необходимо отключить «интеллектуальные» функции улучшения графики в операционной системе Windows. Мы должны заставить лазерный принтер печатать штрихкод максимально жестко, контрастно и без полутонов.
Выполним следующую последовательность действий:
Как показывает практика автоматизации розничной торговли, формат PDF417 физически сложнее для распознавания обычными сканерами, особенно на матовой офисной бумаге. Если правила ЕГАИС и текущие механизмы УТМ позволяют передавать марку в виде строки, кассовой программе абсолютно неважно, в каком графическом виде сканер передаст расшифрованный штрихкод в систему.
Формат DataMatrix гораздо более устойчив к качеству печати, замятиям бумаги и низкому разрешению принтера по сравнению с PDF417. Мы можем переопределить генерацию печатной формы в 1С, чтобы она кодировала ту же самую строку акцизной марки в формат DataMatrix. На обычных офисных принтерах читаемость таких кодов приближается к 100%.
Для реализации этого метода потребуется изменить тип кода в свойствах компоненты печати штрихкодов на значение, соответствующее DataMatrix (в компоненте 1CBarCode это обычно тип кода 16), либо воспользоваться встроенными возможностями платформы 1С 8.3 для генерации двухмерных кодов без использования внешних библиотек.
Если штатная компонента печати штрихкодов 1С продолжает генерировать нечитаемый код на уровне платформы, мы можем обойти эту проблему с помощью внешних веб-сервисов генерации штрихкодов. Этот метод гарантирует получение математически точного векторного или растрового изображения штрихкода высокого разрешения, которое не будет искажаться драйвером принтера.
Проанализируем алгоритм работы этого решения:
Рассмотрим пример кода, реализующий получение качественного изображения марки через HTTP-соединение:
Функция ПолучитьКартинкуМаркиССервиса(СтрокаМарки) Экспорт
// Кодируем строку марки для передачи в URL
КодированнаяСтрока = КодироватьСтроку(СтрокаМарки, СпособКодированияСтроки.URLКодирование);
СерверГенерации = "barcode.tec-it.com";
АдресЗапроса = "/barcode.ashx?data=" + КодированнаяСтрока + "&code=PDF417&dpi=300&resolution=High";
Попытка
HTTPСоединение = Новый HTTPСоединение(СерверГенерации, 443, , , , , Новый ЗащищенноеСоединениеOpenSSL());
HTTPЗапрос = Новый HTTPЗапрос(АдресЗапроса);
HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);
Если HTTPОтвет.КодСостояния = 200 Тогда
Возврат HTTPОтвет.ПолучитьТелоКакКартинку();
Иначе
ЗаписатьЛогОшибки("Ошибка сервиса генерации штрихкодов. Код: " + HTTPОтвет.КодСостояния);
Возврат Неопределено;
КонецЕсли;
Исключение
ЗаписатьЛогОшибки("Не удалось подключиться к серверу генерации штрихкодов.");
Возврат Неопределено;
КонецПопытки;
КонецФункции
Полученную картинку мы легко можем подставить в макет печатной формы в качестве обычного рисунка. Такие марки будут считываться мгновенно даже самыми простыми и дешевыми сканерами на кассовых узлах.
Иногда корень проблемы кроется не в качестве печати, а в настройках считывающего оборудования. Большинство 2D-сканеров «из коробки» настроены на распознавание глянцевых поверхностей (стекло бутылок, жестяные банки) и имеют встроенные алгоритмы подавления бликов. При попытке считать плотный код PDF417 с обычной матовой бумаги эти алгоритмы могут мешать корректному распознаванию.
Для исправления ситуации выполним следующие шаги по калибровке сканера:
Системный подход, сочетающий в себе проверку геометрических пропорций макета печатной формы в 1С, отключение размытия в драйвере принтера и правильную калибровку сканирующего оборудования, гарантирует стопроцентное считывание вновь распечатанных акцизных марок без необходимости покупки дорогостоящих термотрансферных принтеров этикеток.