Как исправить низкое качество и плохую читаемость штрихкодов в 1С:УТ 11.4 и 11.5

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

Многие пользователи и технические специалисты после обновления конфигураций «1С:Управление торговлей» с версии 11.3 на 11.4 и выше сталкиваются с неприятной проблемой: штрихкоды на этикетках и ценниках становятся размытыми, «ступенчатыми» или просто перестают считываться сканерами. Даже незначительное изменение масштаба при печати (на 1–2%) приводит к полной нечитаемости кода. Рассмотрим подробно причины этой ситуации и разберем все доступные способы решения — от простых настроек до программной корректировки работы компоненты печати.

Почему портится качество штрихкода при печати

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

Кроме того, критическую роль играет разрешение (DPI). Если штрихкод генерируется для стандартного мониторного разрешения (96 DPI), а печатается на термопринтере с разрешением 203 DPI или 300 DPI, происходит пересчет точек. Если ширина штриха не кратна физической точке принтера, возникает эффект «дрожания» — одни полоски становятся чуть шире других, что делает код невалидным для сканера.

Способ 1. Настройка параметров макета этикетки

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

  1. Откроем шаблон этикетки в режиме редактирования.
  2. Выделим объект штрихкода. В правой панели свойств найдем параметр Тип размера (или Размер). Установим значение Пропорционально. Это позволит избежать нелинейных искажений при растягивании объекта.
  3. В последних релизах конфигураций (например, УТ 11.4.13 и выше) в параметрах объекта штрихкода появился пункт Уровень четкости. Рекомендуется установить его в значение 2 или выше. Это заставляет компоненту генерировать изображение с избыточным разрешением, которое при сжатии принтером сохраняет четкость границ.
  4. Проверим наличие рамок. Иногда рамка вокруг штрихкода или самой этикетки сбивает фокусировку сканера. Попробуем убрать все границы (рамки) у объекта штрихкода.

Способ 2. Программное повышение уровня четкости (для разработчиков)

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

Нам необходимо найти процедуру, отвечающую за формирование параметров штрихкода (обычно это СформироватьПечатныеФормыЭтикетокИЦенниковТоваров в модуле менеджера обработки ПечатьЭтикетокИЦенников). Разберем, как изменить расчет ширины и высоты:


// Стандартный код:
ПараметрыШтрихкода.Вставить("Ширина", Окр(Рисунок.Ширина / КоличествоМиллиметровВПикселе));
ПараметрыШтрихкода.Вставить("Высота", Окр(Рисунок.Высота / КоличествоМиллиметровВПикселе));

// Модифицированный код с повышением четкости:
УровеньЧеткости = 2; // Коэффициент масштабирования разрешения
ПараметрыШтрихкода.Вставить("Ширина", Окр(Рисунок.Ширина / КоличествоМиллиметровВПикселе) * УровеньЧеткости);
ПараметрыШтрихкода.Вставить("Высота", Окр(Рисунок.Высота / КоличествоМиллиметровВПикселе) * УровеньЧеткости);

Такой подход заставляет 1С передавать в принтер более плотную картинку, что нивелирует огрехи масштабирования драйвера принтера. Чтобы избежать ручной правки модулей конфигурации, можно использовать расширение для печати этикеток на термопринтеры через БПО в УТ 11.5.

Способ 3. Использование шрифта EanGnivc

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

Важный нюанс: Нельзя просто написать цифры штрихкода и назначить им шрифт. Штрихкод EAN-13 требует наличия стартовых/стоповых символов и контрольного символа, рассчитанного по особому алгоритму. Для реализации этого метода выполним следующие шаги:

  1. Установим шрифт EanGnivc в операционную систему на сервере и рабочих станциях.
  2. В макете этикетки добавим текстовое поле (ячейку или текстовый рисунок). При вопросе системы «Добавить как картинку?» обязательно отвечаем Нет.
  3. В свойствах этого поля выбираем шрифт EanGnivc.
  4. В программном коде формирования этикетки используем функцию преобразования обычного набора цифр в спецстроку для шрифта. Обычно такая функция есть в общих модулях, связанных со штрихкодированием (например, МенеджерОборудованияВызовСервера.СформироватьТекстШтрихкодаEAN13).

Способ 4. Настройка драйвера принтера и масштаба печати

Зачастую проблема кроется не в 1С, а в том, как драйвер принтера обрабатывает поступающую графику. Проанализируем настройки печати:

Во-первых, всегда проверяйте Масштаб страницы в диалоге печати 1С. Он должен быть строго 100%. Любое использование опции «По ширине страницы» или ручное изменение масштаба (даже на 101%) мгновенно «ломает» сетку штрихкода. Размеры этикетки нужно подгонять физическим размером ячеек в макете, а не масштабированием при печати.

Во-вторых, зайдите в настройки драйвера вашего принтера (Zebra, TSC, Xprinter и др.):

Резюме и рекомендации

Подведем итог нашему исследованию. Если после обновления УТ 11 вы столкнулись с плохой печатью штрихкодов, рекомендуем действовать в следующем порядке:

  1. Обновите платформу 1С:Предприятие до актуальной (не ниже 8.3.15) и конфигурацию до последней версии — разработчики 1С постоянно выпускают патчи для компоненты печати.
  2. В макете установим размер Пропорционально и, если доступно, Уровень четкости 2.
  3. Проверим, чтобы в настройках принтера было отключено сглаживание и масштаб в 1С стоял ровно 100%.
  4. В крайнем случае, заменим компоненту Native API на использование шрифта EanGnivc, предварительно программно подготовив строку кода.

Применяя эти методы в комплексе, мы добьемся идеальной читаемости этикеток на любом торговом оборудовании.

← На главную