Типовой совет из интернета на этот случай — «протрите сканер, проверьте настройки принтера, обновите прошивку». Иногда помогает. Но в большинстве случаев, которые я разбирал, код был испорчен раньше: в момент, когда его отправили на печать.
Ниже — разбор причины с замерами. Цифры получены на собственном стенде печати и обратного чтения: генерируем партию этикеток, печатаем в PDF, читаем декодером обратно и смотрим, сколько кодов выжило.
Модуль — это не «размер картинки»
Data Matrix состоит из квадратных ячеек. Одна ячейка называется модулем. Код «Честного ЗНАКа» с GTIN, серийным номером и ключом проверки укладывается в сетку 36×36 модулей.
Дальше начинается то, из-за чего коды перестают читаться.
Термопринтер печатает не миллиметрами, а точками. У самого массового офисного принтера этикеток разрешение 203 dpi, то есть 203 точки на дюйм. Одна точка — 25,4 / 203 = 0,125 мм. Принтер физически не умеет напечатать половину точки: он либо ставит точку, либо нет.
Теперь возьмём типичную ситуацию. Дизайнер сверстал этикетку и задал модуль 0,4 мм — «чтобы код был компактнее». В точках это 0,4 / 0,125 = 3,2 точки. Принтер округляет: часть модулей печатается тремя точками, часть четырьмя. Сетка кода перестаёт быть равномерной, границы ячеек уезжают, и декодер, который ищет строгую решётку, начинает промахиваться.
Внешне этикетка выглядит нормально. Код есть, он чёрный, он ровный. Но сканер берёт его через раз, а на кассе очередь.
Как считать правильно
Модуль должен быть целым числом точек принтера. Не «примерно», а ровно.
| Принтер | Точка | Модуль 3 точки | Модуль 4 точки | Модуль 6 точек |
|---|---|---|---|---|
| 203 dpi | 0,125 мм | 0,375 мм | 0,500 мм | 0,750 мм |
| 300 dpi | 0,085 мм | 0,254 мм | 0,339 мм | 0,508 мм |
Отсюда практическое правило: на 203 dpi берите модуль 0,5 мм — это ровно четыре точки. На 300 dpi ближайшее к тем же 0,5 мм значение — 0,508 мм, шесть точек.
Есть и нижняя граница: модуль тоньше 0,255 мм брать не стоит, код перестаёт читаться устойчиво даже при идеальной печати. И вот тут кроется ловушка округления: на 203 dpi две точки дают 0,25 мм — это уже ниже порога, а три точки сразу 0,375 мм. Промежуточного значения не существует физически. На 300 dpi три точки дают 0,254 мм — тоже впритык под порогом, надёжнее брать четыре.
То есть «сделать код чуть помельче» — не настройка с плавной регулировкой. Вы прыгаете с 0,5 мм сразу на 0,375 мм, а следующий шаг вниз уже за границей читаемости.
При модуле 0,5 мм и сетке 36×36 сам код занимает 18×18 мм. Это надо закладывать в макет с самого начала: на этикетке 58×40 мм он помещается свободно, а вот попытка ужать этикетку до 30×20 мм и «вписать туда код» заканчивается предсказуемо.
Замер
Проверка на партии в 200 этикеток, модуль 0,5 мм, 203 dpi:
- генерация — 2,11 секунды на 200 этикеток (95 этикеток в секунду);
- обратное чтение декодером — 19,58 секунды;
- прочитано 200 из 200.
Это и есть та проверка, которой обычно не делают. Печать «на глаз» проверяют одним кодом, он читается, партию отправляют в продажу — а брак вылезает уже на приёмке у сети.
Что проверить у себя за пять минут
- Узнайте разрешение своего принтера. 203 или 300 dpi — написано в паспорте.
- Посчитайте модуль в точках. Модуль в мм разделить на 0,125 (для 203 dpi) или на 0,085 (для 300). Получилось дробное — вот и причина.
- Возьмите линейку и измерьте напечатанный код. При сетке 36×36 и модуле 0,5 мм сторона должна быть 18 мм. Меньше — значит макет ужали при печати, и модуль уехал вместе с ним.
- Прочитайте напечатанное обратно. Не один код, а десяток из разных мест партии. Если хоть один не читается — в продажу нельзя.
Почему это важнее, чем кажется
Нечитаемый код — это не «неудобство на кассе». Это товар, который нельзя продать легально: касса не пробьёт позицию, а вывод из оборота не пройдёт. Партия физически на складе, а по документам её продать невозможно, пока коды не перепечатаны.
И перепечатка — не всегда выход: если коды уже нанесены на упаковку в типографии, перепечатывать придётся упаковку.
Поэтому проверка модуля стоит пяти минут до печати тиража — и спасает от разбора завалов после.
Замеры получены на собственном стенде генерации и обратного чтения этикеток Data Matrix. Проверить расчёт можно на своём принтере: разделите заданный модуль на размер точки и посмотрите, целое ли число получилось.
Где это ломается в 1С
Теперь главное для тех, кто печатает этикетки из 1С — типовых конфигураций или своих макетов.
Макет с картинкой вместо штрихкода. В самодельных макетах DM часто вставлен как картинка, которую 1С масштабирует под ячейку табличного документа. Ячейка чуть уже — картинка сжалась на 3–7% — модуль перестал быть целым числом точек. Внешне разница невидима. Проверка: откройте макет и посмотрите, задан ли размер картинки жёстко в миллиметрах или она «вписывается» в ячейку.
Компонента печати и параметр «размер модуля». В типовых решениях 1С использует компоненту генерации штрихкода, у которой размер модуля задаётся явно. Если стоит «авто» — компонента подгоняет код под отведённое место, и вы получаете тот самый дробный модуль. Задавайте размер модуля константой, рассчитанной под dpi вашего принтера: 0,5 мм для 203 dpi.
Масштаб в драйвере принтера. Самая коварная точка. Драйвер Windows с настройкой «по размеру страницы» или масштабом 97% превращает идеальный макет в кашу: он пересчитывает ВСЕ размеры, и модуль 4 точки становится модулем 3,88 точки. Проверяйте: в настройках печати масштаб должен быть строго 100%, режим — «фактический размер».
Печать через PDF. Цепочка «1С → PDF → печать из просмотрщика» добавляет второе масштабирование: просмотрщики по умолчанию ставят «вписать в страницу». Либо печатайте из 1С напрямую в драйвер, либо в просмотрщике выставляйте 100%.
Стенд самопроверки за 10 минут
Не верьте глазам — код, который «выглядит нормально», надо читать машиной. Стенд собирается из подручного:
- Напечатайте тестовую партию: 20–30 этикеток с реальными кодами (или тестовыми той же длины: GTIN + серийник + 91/92 группы).
- Сфотографируйте лист телефоном при дневном свете, без вспышки, строго сверху. Или отсканируйте на МФУ в 600 dpi.
- Прогоните снимок через любой офлайн-декодер Data Matrix (libdmtx, zxing). Считается доля прочитанных кодов и — важно — время декодирования каждого.
Здоровая печать: 100% прочитано, время декодирования стабильное. Больной признак: часть кодов читается со второй-третьей попытки декодера — на кассе это и есть «сканер берёт через раз». Если декодер спотыкается уже на идеальном фото, на потёртой этикетке под плёнкой шансов не будет.
Такой же стенд, только автоматический, я собирал для контроля партий перед отправкой на маркировку: генерация → печать в PDF → обратное чтение → отчёт по каждому коду. Из ста этикеток с модулем 0,4 мм на 203 dpi обратно прочитались 83. С модулем 0,5 мм — все сто.
Остальные убийцы кода, по частоте
Риббон и режим печати. Термотрансферная печать со старым риббоном даёт микропропуски — для глаза это «чуть бледнее», для декодера — дырки в модулях. Прямая термопечать на дешёвой бумаге выцветает: код, который читался на складе, через три месяца на солнце у витрины уже мёртв.
Тихая зона. Вокруг DM обязано быть пустое поле шириной минимум в один модуль, лучше два-три. Дизайнеры любят придвинуть рамку или текст вплотную — декодер теряет границу кода.
Печать «на стыке». Если этикетка печатается со смещением и код попадает на перфорацию или край — обсуждать нечего, но в отчётах о браке это стабильные проценты: датчик зазора не откалиброван.
Инверсия и заливка. Белый код на чёрном фоне читают не все сканеры (нужна поддержка инверсии), а «фирменный» серый вместо чёрного снижает контраст ниже порога.
Чек-лист перед запуском партии
- Модуль = целое число точек принтера (203 dpi → 0,5 мм).
- Размер кода в макете задан жёстко, не «авто» и не «вписать».
- Масштаб везде 100%: драйвер, просмотрщик PDF, параметры печати 1С.
- Тихая зона от одного модуля, ничего не придвинуто.
- Контраст: чёрное на белом, без дизайнерских серых.
- Обратное чтение тестовой партии: 100% с первой попытки.
- Риббон/лента — свежие, датчик зазора откалиброван.
Каждый пункт — минута проверки. Партия перепечатанных этикеток — день простоя и деньги. Выбор очевиден, но по опыту разборов до пункта 6 не доходит почти никто: все смотрят на этикетку глазами, а глаза тут не инструмент.
Частые вопросы из разборов
«У соседа тот же принтер — у него читается». Смотрите не на принтер, а на макет и драйвер. Два одинаковых Xprinter с разными настройками масштаба дают противоположный результат. Сравнивать надо выгрузку макета и снимок настроек печати, а не марки железа.
«Поставили 300 dpi — стало хуже». Классика: макет остался со значением модуля под 203 dpi (0,5 мм = 4 точки), а на 300 dpi те же 0,5 мм — уже 5,9 точки. Снова дробь, снова каша. При смене принтера пересчитывайте модуль под новую точку: на 300 dpi берите 0,508 мм.
«Код читается телефоном, но не сканером кассы». Телефонные декодеры агрессивнее: многокадровая съёмка, коррекция перспективы. Кассовый сканер читает один кадр за миллисекунды. Телефон — не контроль качества, а самообман; контроль — только стенд с одиночным кадром.
«Типография напечатала — у них всё профессионально». Типографии отлично держат цвет и приводку, но про целочисленный модуль под конкретный dpi термопринтера думают не всегда: у офсета своя физика. Присылайте типографии требование в явном виде: модуль 0,5 мм, чёрный 100K, тихая зона 3 модуля.
«Можно ли чинить уже напечатанную партию?» Нет. Код с дробным модулем не «дочитывается настройками» — перепечатка. Поэтому и весь смысл в проверке ДО тиража: стенд стоит десять минут, тираж — деньги.
Итог
«Не читается код» — почти никогда не про сканер. В порядке вероятности: дробный модуль, масштабирование по дороге к принтеру, изношенный риббон, съеденная тихая зона. Все четыре причины закладываются в момент подготовки макета и настроек печати — и все четыре проверяются за десять минут стендом обратного чтения, без единой поездки к кассе.
Если после чек-листа код всё равно не читается — вот тогда уже интересно, и это тема отдельного разбора: крипточасть, GS-разделители и то, как учётные системы портят содержимое кода ещё до печати.
Вступайте в нашу телеграмм-группу Инфостарт