Как повернуть штрихкод или изображение в макете 1С на 45 градусов без внешних компонент?

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

При автоматизации складской логистики нередко возникает задача печати этикеток со штрихкодами ячеек, расположенными под углом 45 градусов. Такое диагональное размещение позволяет сотрудникам с терминалами сбора данных (ТСД) точно считывать нужный штрихкод при плотном расположении ячеек на стеллажах, снижая вероятность случайного сканирования соседней метки.

Однако при реализации подобной задачи в 1С разработчики сталкиваются с ограничениями платформы: объект РисунокТабличногоДокумента не предоставляет встроенного метода для произвольного угла поворота внедренного растрового изображения. Кроме того, стандартная компонента генерации штрихкодов от 1С поддерживает поворот исключительно с шагом в 90 градусов (0°, 90°, 180°, 270°). Разберем доступные способы решения этой задачи без использования сторонних внешних компонент.

Способ 1. Использование специализированного шрифта штрихкода и свойства «ОриентацияТекста»

Наиболее простое и быстрое решение для табличного документа — вывод закодированной строки штрихкода в обычную ячейку с использованием специального шрифта (например, Code 128, Code 39 или EAN-13) и программным заданием угла поворота.

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

  1. Установим на клиентские рабочие места (или на сервер печати) TrueType-шрифт штрихкода (например, Code128.ttf).
  2. В макете печатной формы выберем ячейку и укажем для нее установленный шрифт штрихкода.
  3. Программно сформируем контрольную последовательность символов (с учетом контрольного символа, стартового и стопового знаков шрифта) и передадим ее в параметр ячейки, установив угол наклона.

Посмотрим на пример программного заполнения области макета:


Область = Макет.ПолучитьОбласть("СтрокаШтрихкода");
Область.Параметры.ШтрихкодЯчейки = СформироватьСтрокуШтрихкодаCode128("ZONE-A-12-04");

// Устанавливаем поворот текста ячейки на 45 градусов
Область.Область("R1C1").ОриентацияТекста = 45;

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

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

Способ 2. Динамическая генерация векторного изображения в формате SVG

Начиная с платформы 8.3, табличный документ поддерживает работу с векторной графикой в формате SVG. Это позволяет динамически формировать код штрихкода на языке разметки XML/SVG, применяя встроенную трансформацию поворота rotate.

Разберем, как реализовать этот подход программно без внешних библиотек:

  1. Формируем XML-структуру SVG-изображения, где полосы штрихкода строятся набором тегов <rect> или <path>.
  2. Оборачиваем группу элементов в тег с трансформацией <g transform="rotate(45, cx, cy)">.
  3. Преобразуем полученную строку в двоичные данные и инициализируем объект Картинка.
  4. Помещаем созданную картинку в РисунокТабличногоДокумента.

Посмотрим на пример кода формирования такой картинки:


ТекстSVG = 
"<svg xmlns=""http://www.w3.org/2000/svg"" width=""200"" height=""200"">" +
"  <g transform=""rotate(45 100 100)"" fill=""#000000"">" +
"    <rect x=""20"" y=""20"" width=""4"" height=""80"" />" +
"    <rect x=""30"" y=""20"" width=""2"" height=""80"" />" +
"    <rect x=""36"" y=""20"" width=""6"" height=""80"" />" +
"  </g>" +
"</svg>";

ДвоичныеДанныеSVG = ПолучитьДвоичныеДанныеИзСтроки(ТекстSVG, КодировкаТекста.UTF8);
КартинкаШтрихкода = Новый Картинка(ДвоичныеДанныеSVG);

Рисунок = Область.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Картинка = КартинкаШтрихкода;
Рисунок.РазмерКартинки = РазмерКартинки.АвтоРазмер;

Преимущество метода: векторный формат гарантирует четкость линий при печати на термотрансферных принтерах с любым разрешением (DPI).

Способ 3. Предварительная подготовка статических изображений

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

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

Технические риски и особенности считывания повернутых штрихкодов

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

  1. Искажение геометрии при растеризации: при печати линейных (1D) штрихкодов под углом 45° на принтерах с низким разрешением (203 dpi) полосы штрихкода неизбежно попадают на границы дискретной сетки пикселей. Это вызывает ступенчатость линий, искажает ширину штрихов и может привести к ошибкам считывания лазерными сканерами.
  2. Использование двумерных кодов (2D): если специфика бизнес-процесса позволяет использовать коды DataMatrix или QR Code, физически поворачивать изображение на 45 градусов не требуется. Современные 2D-сканеры и терминалы сбора данных с матричными считывателями считывают двумерные штрихкоды под любым углом ориентации луча.
← На главную