Почему сканер не считывает штрихкод, распечатанный на принтере этикеток из 1С?

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

При автоматизации складского учета и розничных продаж часто возникает ситуация: штрихкод формата EAN-13 успешно генерируется в 1С по нажатию кнопки «Присвоить штрихкод», отправляется на печать через термопринтер этикеток, но оптический сканер наотрез отказывается его считывать. При этом фабричные штрихкоды на товарах или книгах тот же самый сканер распознает мгновенно. Если отправить этот же макет из 1С на обычный офисный лазерный принтер, штрихкод читается без проблем.

Проанализируем физику процесса, выясним первопричину сбоя и разберем по шагам, как настроить параметры оборудования и конфигурации для гарантированного считывания кодов.

В чем заключается корень проблемы: геометрические искажения

Когда сканер считывает штрихкод EAN-13, для него важны не только сами черные полосы, но и точное соотношение их ширины, а также ширина белых промежутков между ними. В спецификации EAN-13 информация заложена именно в относительной ширине четырех базовых модулей.

Если при печати на обычном офисном принтере с разрешением 600 или 1200 dpi линии получаются идеально четкими, то на термопринтерах (например, популярных моделях TSC или Zebra) стандартное разрешение термоголовки составляет всего 203 dpi (около 8 точек на миллиметр), реже — 300 dpi. В таких условиях любая погрешность масштабирования или некорректный нагрев термоголовки приводит к тому, что соседние штрихи «слипаются», тонкие линии утолщаются, а белые зазоры перекрываются. В итоге сканер фиксирует нарушение контрольной суммы и отбрасывает считанную последовательность.

Рассмотрим основные факторы, приводящие к деформации полос штрихкода:

  1. Избыточный нагрев (Darkness / Density): если интенсивность или контрастность прожига термобумаги завышена, термочувствительный слой этикетки расширяется под воздействием температуры, и тонкие белые линии заплывают черным фоном.
  2. Полутоновое сглаживание (Dithering): при попытке драйвера Windows сгладить графическое изображение штрихкода края линий формируются сеткой из отдельных точек, нарушая четкую границу штриха.
  3. Интерполяция растра при печати через RDP: при пробросе удаленного принтера изображение может дополнительно сжиматься и масштабироваться драйверами терминального сервера (например, EasyPrint), в результате чего штрихи приобретают разную ширину.
  4. Слишком высокая скорость печати: термоголовка на высокой скорости не успевает остывать, из-за чего за штрихами образуется смазанный шлейф.
  5. Отсутствие свободных зон (Quiet Zones): штрихкод прижат вплотную к границам этикетки, из-за чего сканер не видит стартовые и стоповые маркеры (по бокам должно оставаться не менее 3–4 мм чистого белого поля).

Шаг 1. Настройка контрастности и интенсивности в драйвере принтера

Разберем первоочередное действие, решившее проблему в разобранной ситуации. Нам необходимо скорректировать параметры нагрева термоголовки:

  1. Откроем на рабочей станции или сервере раздел «Устройства и принтеры».
  2. Перейдем в «Свойства принтера» нужного термопринтера (например, TSC TDP-225) и откроем вкладку «Параметры печати» (Printing Preferences).
  3. Найдем параметры, отвечающие за плотность (Darkness / Density / Плотность) и температуру нагрева. Если установлено максимальное значение, снизим его до средних или чуть ниже средних показателей (например, со значений 12–15 до 7–9).
  4. Перейдем на вкладку «Графика» (Dithering) и переключим режим полутонов в положение «Нет» (None) или «Монохромный» (1-bit / Black and White), чтобы исключить точечное сглаживание краев.
  5. Снизим скорость печати (Print Speed) до 2–3 дюймов в секунду (ips). Это позволит термоэлементам головки остывать вовремя, формируя резкие границы штрихов.

Шаг 2. Оптимизация макета этикетки в 1С

Посмотрим на параметры формирования печатной формы в 1С. Если штрихкод выводится в виде картинки в табличный документ, драйвер операционной системы пытается растянуть пиксели под физическую сетку головки принтера.

Для корректного вывода выполним следующие настройки макета:

  1. В параметрах страницы табличного документа зададим физический размер этикетки строго в миллиметрах (например, 58×40 мм или 43×25 мм) и уберем флаг автоматической подгонки по ширине листа.
  2. В свойствах ячейки, содержащей рисунок со штрихкодом, переключим режим отображения из значения Растягивать или Пропорционально в режим Реальный размер.
  3. Обеспечим свободные поля по краям штрихового рисунка не менее 3–5 мм со всех сторон, чтобы сканер мог зафиксировать начало и конец последовательности.
  4. По возможности повернем штрихкод так, чтобы его линии располагались перпендикулярно направлению движения ленты («частокол»). На термопринтерах такая ориентация обеспечивает существенно более резкую геометрию полос, чем печать «лесенкой».

Шаг 3. Использование прямых команд принтера (TSPL / ZPL)

Если печать выполняется в терминальной среде (RDP) и стандартный драйвер продолжает искажать толщину штрихов, рассмотрим альтернативный и наиболее надежный способ — прямую отправку команд на языке управления принтером (например, TSPL для TSC или ZPL для Zebra).

В этом сценарии 1С не формирует тяжелый графический растр, а передает текстовый пакет команд прямо в порт принтера или raw-очередь печати. Принтер рассчитывает ширину каждого штриха аппаратно в точках головки, полностью исключая ошибки сглаживания:


Команда = "SIZE 58 mm, 40 mm" + Символы.ПС;
Команда = Команда + "GAP 2 mm, 0 mm" + Символы.ПС;
Команда = Команда + "DIRECTION 1" + Символы.ПС;
Команда = Команда + "CLS" + Символы.ПС;
// Печать штрихкода EAN-13: координаты X, Y, тип, высота, печать текста, угол, узкий модуль, широкий модуль
Команда = Команда + "BARCODE 30,50,""EAN13"",80,1,0,2,2,""" + ШтрихкодТовара + """" + Символы.ПС;
Команда = Команда + "PRINT 1,1" + Символы.ПС;

Такой подход обеспечивает идеальное качество оттиска, максимальную скорость работы даже через RDP-соединения с низкой пропускной способностью и стопроцентную считываемость любыми моделями сканеров.

← На главную