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

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

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

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

Особенности работы со слоями в табличном документе

Проанализируем структуру табличного документа 1С. В платформе действует строгое разделение визуальных слоев:

  1. Нижний слой — сетка ячеек таблицы. Все данные, которые мы пишем непосредственно в ячейки, всегда располагаются на самом базовом уровне.
  2. Верхний слой — коллекция Рисунки. Сюда входят любые вставленные графические объекты, диаграммы, а также специальные графические объекты типа «Текст».

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

Для решения задачи вывода текста поверх фонового шаблона ценника в платформе 1С существуют два практических подхода.

Способ 1. Использование фонового свойства ячейки и графических текстовых блоков

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

Разберем реализацию по шагам:

  1. Выделяем диапазон ячеек макета, соответствующий размеру ценника, и при необходимости объединяем их.
  2. Открываем палитру свойств выделенной ячейки и находим свойство Картинка. Загружаем туда графический макет подложки ценника. Теперь изображение находится на нижнем слое таблицы.
  3. Создаем текстовые поля для вывода информации. Для этого переходим в главное меню: Таблица — Рисунки — Текст и рисуем прямоугольную область поверх нужного участка ценника (например, там, где должно быть наименование или цена).
  4. Настраиваем внешний вид текстового объекта в палитре свойств: устанавливаем свойство Линия в значение Нет, а для свойства Цвет фона задаем значение Авто (прозрачный). Это исключит перекрытие подложки белым прямоугольником.
  5. Задаем имя объекту (например, НаименованиеТовара и ЦенаТовара) в свойстве Имя.

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


// Пример заполнения текста напрямую через коллекцию Рисунки
ТабДок.Рисунки.НаименованиеТовара.Текст = Выборка.НаименованиеДляЦенника;
ТабДок.Рисунки.ЦенаТовара.Текст = Формат(Выборка.Цена, "ЧДЦ=2; ЧГ=0");

Такой способ удобен, когда структура макета жестко фиксирована и требуется точечное позиционирование надписей поверх фоновой графики.

Способ 2. Использование параметров внутри графических текстовых объектов

Рассмотрим более универсальный и привычный для разработчиков 1С вариант. Платформа позволяет использовать параметры не только в ячейках таблицы, но и внутри графических объектов типа «Текст». Это избавляет от необходимости адресоваться к каждому рисунку по имени в результирующем документе.

Разберем последовательность действий:

  1. Помещаем фоновое изображение в свойство Картинка ячейки макета или располагаем графическую подложку на заднем плане (используя пункт контекстного меню Порядок — На задний план).
  2. Добавляем графический объект Текст поверх фонового изображения.
  3. В палитре свойств текстового объекта находим пункт Заполнение и переключаем его со значения Текст на значение Параметр.
  4. В поле Параметр указываем имя переменной, например Номенклатура или Цена.
  5. Убеждаемся, что у текстового блока отключена рамка и включен прозрачный фон.

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


// Получаем область макета ценника
ОбластьЦенника = Макет.ПолучитьОбласть("СтрокаЦенника");

// Заполняем параметры области, включая графические текстовые блоки
ОбластьЦенника.Параметры.Номенклатура = СтрокаТаблицы.Номенклатура.НаименованиеПолное;
ОбластьЦенника.Параметры.Цена = СтрокаТаблицы.Цена;

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

Этот способ существенно упрощает код формирования отчета или обработки печати ценников, так как обработка параметров происходит автоматически при выводе области.

Важные технические нюансы и ограничения

Проанализируем подводные камни, с которыми можно столкнуться при печати ценников с графическими элементами:

  1. Нагрузка на оперативную память: Если в документе выводится несколько сотен или тысяч ценников, тиражирование тяжелых растровых изображений в каждой ячейке приведет к резкому раздуванию размера документа. Это может вызвать переполнение памяти или существенные задержки при отправке на печать. Рекомендуется максимально сжимать графические исходники перед загрузкой в макет.
  2. Разрешение печати (DPI): Растровая графика, отлично выглядящая на экране с плотностью 96 DPI, при выводе на офисный принтер (300–600 DPI) или специализированный термопринтер (203 DPI) может стать размытой. Подготавливайте размер изображения в пикселях с учетом физического разрешения целевого печатающего устройства.
  3. Альтернатива верстки сеткой: Если фирменный стиль ценника позволяет, надежнее воссоздать его структуру штатными ячейками макета (настроить цветные фоны, границы ячеек и шрифты), а отдельным компактным изображением выводить только логотип. Это обеспечит идеальную векторную четкость текстов и минимальный вес печатной формы.
← На главную