Как изменить размер шрифта штрихкода в 1С и исправить его отображение в виде черного пятна при повороте

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

При оформлении печатных форм этикеток, ценников и накладных в системе «1С:Предприятие» разработчики регулярно сталкиваются с капризным поведением графических компонентов штрихкодирования. Две наиболее частые проблемы — это самопроизвольный сброс размера шрифта подписи штрихкода до минимального (обычно до 6-го или 8-го размера) и превращение штрихкода в нечитаемое сплошное «черное пятно» при попытке развернуть его на 90 градусов.

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

Часть 1. Почему сбрасывается размер шрифта в макете и как это исправить

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

1. Ошибка выбора объекта в палитре свойств Конфигуратора

Когда мы кликаем по области штрихкода в макете, платформа по умолчанию открывает свойства графического контейнера — объекта типа Рисунок. Если изменять настройки шрифта в этой панели, мы меняем шрифт самого контейнера 1С, который никак не влияет на параметры отображения встроенного ActiveX-элемента. Чтобы добраться до истинных настроек отображения цифр, выполним следующие шаги:

  1. Откроем макет с рисунком штрихкода в Конфигураторе.
  2. Выделим штрихкод и откроем палитру свойств (клавиша Alt + Enter).
  3. В самом верху окна свойств найдем выпадающий список выбора элементов. Вместо значения «Рисунок» выберем строку «Элемент управления "1С:Печать штрихкодов"» (или аналогичное имя ActiveX-объекта).
  4. В контекстном меню самого штрихкода на макете выберем пункт «Свойства объекта». В открывшемся окне настроек перейдем на вкладку «Оформление» и установим требуемый размер шрифта там.

2. Срабатывание автоматического масштабирования (Защита от обрезания текста)

В компоненте 1С:Печать штрихкодов реализован строгий защитный алгоритм контроля геометрических пропорций. Если физический размер рамки рисунка в макете слишком мал для того, чтобы в него физически поместились полосы штрихкода и крупный текст под ними, компонента принудительно сжимает шрифт до минимально допустимого размера (6–8 пунктов). Это делается для того, чтобы цифры гарантированно влезли в границы и не обрезались.

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

Часть 2. Как правильно изменить шрифт штрихкода программно

Попытки переопределить свойства шрифта напрямую через присвоение значений, например:

ЭтикеткаОбласть.Рисунки.Штрихкод.Объект.Шрифт.Size = 10;

не принесут желаемого результата, поскольку свойство Шрифт у COM/ActiveX объектов возвращает интерфейс, закрытый для прямой перезаписи отдельных свойств из среды 1С.

Для корректного программного управления оформлением у объекта штрихкода существует специализированный метод УстановитьШрифт(). Разберем его синтаксис подробнее. Метод принимает следующие параметры:

Посмотрим на практический пример правильной программной установки параметров шрифта перед выводом области макета на печать:


// Получаем область макета, где расположен наш рисунок
ОбластьМакета = Макет.ПолучитьОбласть("ОбластьШтрихкода");

// Задаем значение штрихкода
ОбластьМакета.Рисунки.Штрихкод.Объект.Сообщение = "4601234567890";

// Настраиваем шрифт программно: шрифт Arial, размер 12, обычная толщина (400), без эффектов
ОбластьМакета.Рисунки.Штрихкод.Obj.УстановитьШрифт("Arial", 12, 400, Ложь, Ложь, Ложь);

// Выводим готовую область в результирующий табличный документ
ТабДокумент.Вывести(ОбластьМакета);

Часть 3. Работа с современной нативной внешней компонентой в 1С 8.3

Технология ActiveX постепенно уходит в прошлое, так как она не поддерживается на x64-платформах сервера и тонкого клиента в средах Linux и macOS. В современных типовых конфигурациях 1С (УНФ, ERP, КА, УТ) генерация штрихкодов реализуется через нативную внешнюю компоненту AddIn.КартинкаШтрихкода.Barcode.

Эта компонента не встраивается как элемент управления, а генерирует бинарную картинку штрихкода в формате PNG/BMP, которая затем динамически помещается в обычный пустой рисунок на макете табличного документа.

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


// 1. Инициализируем структуру параметров для генератора
ПараметрыГенерации = Новый Структура;
ПараметрыГенерации.Вставить("Ширина", 400); // в пикселях
ПараметрыГенерации.Вставить("Высота", 150); // в пикселях
ПараметрыГенерации.Вставить("ТипКода", 1);   // EAN13
ПараметрыГенерации.Вставить("Штрихкод", "4601234567890");
ПараметрыГенерации.Вставить("ОтображатьТекст", Истина);
ПараметрыГенерации.Вставить("РазмерШрифта", 14); // точный размер текста под кодом

// 2. Получаем картинку штрихкода из компоненты генерации БСП
КартинкаШтрихкода = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыГенерации);

// 3. Выводим полученную картинку в область макета
ОбластьЭтикетки = Макет.ПолучитьОбласть("СтрокаЭтикетки");
ОбластьЭтикетки.Рисунки.ИзображениеШК.Картинка = КартинкаШтрихкода;

ТабДокумент.Вывести(ОбластьЭтикетки);

Полезный лайфхак для получения высокой четкости на узких этикетках

Если выводится этикетка малого физического размера (например, 30х20 мм или 58х40 мм), то при генерации картинки "пиксель-в-пиксель" текст под штрихами часто получается размытым и нечитаемым. Применим проверенную хитрость:

  1. Зададим в параметрах генерации заведомо завышенные размеры разрешения (например, ширину 1200 и высоту 500 пикселей) и очень крупный шрифт (например, 28 или 32).
  2. В самом макете 1С для свойства рисунка «Размер картинки» (PictureSize) установим значение «Пропорционально» (Proportional).
  3. При формировании печатной формы платформа с высоким качеством сожмет изображение высокого разрешения под реальные физические границы рамки на бумаге. Штрихи и текст при этом сохранят идеальную резкость и читаемость для сканеров.

Часть 4. Устранение проблемы слияния штрихкода в «черное пятно» при повороте на 90 градусов

Перейдем ко второй важнейшей технической проблеме. При попытке развернуть штрихкод вертикально (передав параметр угла поворота 90 или 270 градусов во внешнюю компоненту), на печати вместо полос штрихкода выводится сплошная черная область.

Выясним физическую причину этого явления. Штрихкод критически чувствителен к дискретности растровой сетки. Каждая линия штрихкода должна занимать целое число пикселей при рендеринге на принтере. Когда штрихкод расположен стандартно (горизонтально), его полосы ориентированы вертикально, а ширина картинки отвечает за разрешение этих полос.

При повороте на 90 градусов вертикальные полосы укладываются горизонтально. То есть теперь высота исходной области рендеринга становится шириной, в которую должны уместиться все линии штрихкода. Если область рисунка в макете узкая по ширине (или вы передали компоненте слишком маленькую ширину для развернутого штрихкода), генератор пытается «ужать» толщину линий до значений меньше 1 пикселя. Из-за этого соседние черные линии сливаются, образуя сплошное черное пятно.

Пошаговое решение проблемы:

  1. При повороте штрихкода на 90 градусов обязательно меняйте местами значения ширины и высоты, передаваемые в параметры генерации внешней компоненты.
  2. Значительно увеличьте геометрические размеры принимающего рисунка на макете. При вертикальном расположении штрихкода его высота на макете должна быть большой, чтобы вместить всю длину полос кода.
  3. Обязательно проверьте, чтобы у рисунка на макете было включено свойство пропорционального сжатия, иначе платформа исказит пропорции штрихов при заполнении рамки.

Проанализируем пример правильной подготовки параметров для вертикального штрихкода:


ПараметрыВертикальногоШК = Новый Структура;
// Меняем параметры местами: теперь ширина небольшая, а высота — максимальная
ПараметрыВертикальногоШК.Вставить("Ширина", 150); 
ПараметрыВертикальногоШК.Вставить("Высота", 500); 
ПараметрыВертикальногоШК.Вставить("УголПоворота", 90); // Поворот на 90 градусов
ПараметрыВертикальногоШК.Вставить("ТипКода", 1);      // EAN13
ПараметрыВертикальногоШК.Вставить("Штрихкод", "4601234567890");

// Генерация изображения
КартинкаВертикальная = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыВертикальногоШК);

// Заполнение рисунка на макете
Область = Макет.ПолучитьОбласть("ВертикальныйШтрихкод");
Область.Рисунки.ПовернутыйШК.РазмерКартинки = РазмерКартинки.Пропорционально;
Область.Рисунки.ПовернутыйШК.Картинка = КартинкаВертикальная;

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

← На главную