Как напечатать читаемый штрихкод EAN-13 на маленькой этикетке 35х13 мм из 1С?

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

Размещение полноценного штрихкода формата EAN-13 на ограниченном пространстве этикетки размером 35х13 мм — это классическая задача «впихнуть невпихуемое». Основная сложность заключается не столько в масштабировании картинки, сколько в обеспечении считываемости кода сканерами после печати. Рассмотрим подробно, как решить эту задачу, избежав проблем с размытием линий и неверными пропорциями.

Понимаем физические ограничения: магия точек (DPI)

Прежде чем приступать к программному коду, проанализируем физику процесса. Большинство принтеров этикеток начального уровня (например, Godex DT4 или популярные модели TSC) имеют разрешение 203 dpi (точек на дюйм). Это означает, что на 1 мм ширины приходится примерно 8 точек (дюз) принтера. Размер одной точки составляет 0,125 мм.

Стандартный штрихкод EAN-13 состоит из 95 модулей (узких полос или пробелов). Чтобы штрихкод гарантированно считался, ширина каждого модуля должна быть кратна целой точке принтера. Проанализируем два варианта:

Важный вывод: Если при формировании изображения штрихкод получается «дробным» (например, модуль равен 2,34 точки), драйвер принтера начнет округлять ширину линий. В итоге одна линия будет шириной в 2 точки, а другая в 3. Для сканера это будет выглядеть как ошибка, и штрихкод не зачтется.

Проблема растрового масштабирования (Метод ПолучитьКартинку)

Выясним причину, по которой стандартный метод 1С ПолучитьШтрихкод() или работа через ActiveX часто выдают плохой результат. Когда мы генерируем картинку и растягиваем ее в табличном документе, происходит интерполяция. Драйвер пытается сгладить края, добавляя серые пиксели, которые на термопринтере превращаются в «рваные» края штрихов.

Чтобы этого избежать, проанализируем настройки драйвера принтера. В настройках печати (Printing Preferences) в ОС Windows необходимо найти раздел Graphics (Графика) и установить параметр Dithering (Размытие/Полутона) в значение None или Solid. Это заставит принтер использовать только чистый черный и белый цвета без попыток имитации оттенков.

Использование усечения штрихкода (Truncation)

Согласно стандарту, высота штрихкода EAN-13 должна быть довольно большой. Однако на этикетке высотой 13 мм нам нужно разместить еще и текстовую информацию. Разберем, как сэкономить место:

Большинство современных сканеров (особенно имидж-сканеры) прекрасно справляются с усеченными штрихкодами. Вы можете смело уменьшать высоту полосок до 5–7 мм. Остальное пространство (6–8 мм) можно использовать под наименование товара или цену. Для этого в свойствах объекта «Штрихкод» в 1С следует отключить отображение цифр под кодом, а сами цифры вывести мелким шрифтом в углу или под кодом отдельно.

Программная реализация: прямой вывод через языки принтера (EZPL/TSPL)

Если стандартные средства 1С не позволяют добиться идеальной четкости при пробросе через терминальную сессию (RDP), рассмотрим самый надежный метод — использование «родного» языка принтера. Для Godex это язык EZPL, для TSC — TSPL.

Этот метод исключает искажения драйвера Windows, так как мы отправляем принтеру текстовую команду: «Напечатай EAN-13 в координатах X,Y с шириной модуля 2 точки». Рассмотрим пример формирования такой команды из 1С для отправки в COM-порт или через локальную очередь печати:


// Пример формирования строки на языке EZPL для принтера Godex
Команда = "^Q13,3" + Символы.ВК; // Высота этикетки 13мм, зазор 3мм
Команда = Команда + "^W35" + Символы.ВК; // Ширина этикетки 35мм
Команда = Команда + "^H10" + Символы.ВК; // Интенсивность печати
Команда = Команда + "E,10,2,2,2,40,0,1," + "4601234567890" + Символы.ВК;
// Где: 10,2 - координаты; 2,2 - множитель ширины; 40 - высота штрихов

Отправить такую строку на принтер можно с помощью объекта WScript.Shell или копированием файла в порт принтера:


ПутьКФайлу = "C:\temp\label.txt";
ТекстовыйФайл = Новый ТекстовыйДокумент;
ТекстовыйФайл.УстановитьТекст(Команда);
ТекстовыйФайл.Записать(ПутьКФайлу, КодировкаТекста.ANSI);

// Отправка на принтер через командную строку
ЗапуститьПриложение("cmd /c copy /b " + ПутьКФайлу + " \\ИмяКомпьютера\ИмяПринтера", , Истина);

Особенности печати вдоль и поперек

Проанализируем ситуацию с направлением печати. Штрихкод может выходить из принтера «забором» (линии параллельны движению ленты) или «лестницей» (линии перпендикулярны движению).

Для термопринтеров наилучшим вариантом является печать «забором» (вдоль направления движения). В этом случае четкость краев штрихов зависит только от работы нагревательных элементов термоголовки. Если печатать «лестницей», малейшее проскальзывание ленты или нестабильность мотора мгновенно исказит ширину линий, и код перестанет читаться.

Рекомендации по настройке компоненты 1С

Если использование прямых команд принтера кажется слишком сложным, попробуем оптимизировать работу стандартной компоненты печати штрихкодов:

  1. Векторный формат: Если ваша версия платформы 8.3 поддерживает вывод в SVG, используйте его. Векторные изображения масштабируются драйвером гораздо корректнее растровых BMP.
  2. Минимизация Quiet Zone: Многие компоненты добавляют огромные пустые поля по бокам кода. Если код не влезает, попробуйте программно обрезать эти поля в настройках объекта или перекрыть их соседними ячейками табличного документа.
  3. Ориентация: Если этикетка узкая и высокая, попробуйте повернуть текст и штрихкод на 90 градусов. В свойствах ячейки табличного документа установите параметр ОриентацияТекста = 90.

Подводя итог, скажем: для печати EAN-13 на этикетке 35х13 мм ключевым фактором является соблюдение кратности модуля в 2 точки принтера и отключение дизеринга в настройках драйвера. Это обеспечит стабильное считывание даже самыми простыми сканерами.

← На главную