При автоматизации складской логистики нередко возникает задача печати этикеток со штрихкодами ячеек, расположенными под углом 45 градусов. Такое диагональное размещение позволяет сотрудникам с терминалами сбора данных (ТСД) точно считывать нужный штрихкод при плотном расположении ячеек на стеллажах, снижая вероятность случайного сканирования соседней метки.
Однако при реализации подобной задачи в 1С разработчики сталкиваются с ограничениями платформы: объект РисунокТабличногоДокумента не предоставляет встроенного метода для произвольного угла поворота внедренного растрового изображения. Кроме того, стандартная компонента генерации штрихкодов от 1С поддерживает поворот исключительно с шагом в 90 градусов (0°, 90°, 180°, 270°). Разберем доступные способы решения этой задачи без использования сторонних внешних компонент.
Наиболее простое и быстрое решение для табличного документа — вывод закодированной строки штрихкода в обычную ячейку с использованием специального шрифта (например, Code 128, Code 39 или EAN-13) и программным заданием угла поворота.
В отличие от рисунков, ячейка табличного документа поддерживает свойство ОриентацияТекста, в котором можно указать произвольный угол поворота текста в градусах. Рассмотрим по шагам, как настроить такой вывод:
Code128.ttf).Посмотрим на пример программного заполнения области макета:
Область = Макет.ПолучитьОбласть("СтрокаШтрихкода");
Область.Параметры.ШтрихкодЯчейки = СформироватьСтрокуШтрихкодаCode128("ZONE-A-12-04");
// Устанавливаем поворот текста ячейки на 45 градусов
Область.Область("R1C1").ОриентацияТекста = 45;
ТабличныйДокумент.Вывести(Область);
Преимущество метода: не требует генерации тяжелых графических файлов, текст отлично масштабируется и выводится с максимальным разрешением принтера.
Начиная с платформы 8.3, табличный документ поддерживает работу с векторной графикой в формате SVG. Это позволяет динамически формировать код штрихкода на языке разметки XML/SVG, применяя встроенную трансформацию поворота rotate.
Разберем, как реализовать этот подход программно без внешних библиотек:
<rect> или <path>.<g transform="rotate(45, cx, cy)">.Картинка.РисунокТабличногоДокумента.Посмотрим на пример кода формирования такой картинки:
Текст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).
Если набор штрихкодов фиксирован (например, маркируются стационарные зоны склада, количество которых ограничено и известно заранее), оптимальным решением может стать предварительная генерация повернутых растровых файлов.
Изображения сохраняются в хранилище дополнительной информации или внедряются в макет конфигурации, после чего по условию выводятся в табличный документ без выполнения математических преобразований во время печати.
Проанализируем важные нюансы, которые следует учитывать при печати повернутых штрихкодов:
DataMatrix или QR Code, физически поворачивать изображение на 45 градусов не требуется. Современные 2D-сканеры и терминалы сбора данных с матричными считывателями считывают двумерные штрихкоды под любым углом ориентации луча.