При разработке печатных форм ценников и этикеток часто возникает задача оформить ценник в фирменном стиле: использовать готовую графическую подложку с рамками, логотипами и декоративными элементами, а поверх нее выводить динамические данные — наименование номенклатуры, штрихкод, цену и характеристики. Однако стандартная попытка вставить фоновую картинку в макет и наложить поверх нее текст ячеек приводит к тому, что текст либо скрывается за подложкой, либо при настройке прозрачности фоновые цвета макета искажаются.
Разберем архитектуру слоев в табличном документе платформы 1С, выясним причину такого поведения и пошагово реализуем рабочие способы наложения текста на графический фон ценника.
Проанализируем структуру табличного документа 1С. В платформе действует строгое разделение визуальных слоев:
Рисунки. Сюда входят любые вставленные графические объекты, диаграммы, а также специальные графические объекты типа «Текст».Из-за такой иерархии невозможно разместить обычный графический объект под сеткой ячеек (функция «картинка за текстом», привычная по текстовым редакторам, здесь отсутствует). Если мы просто вставляем изображение в макет через меню вставки, оно неизбежно перекрывает ячейки таблицы. Если же сделать фон ячеек прозрачным, это не переместит их выше рисунка.
Для решения задачи вывода текста поверх фонового шаблона ценника в платформе 1С существуют два практических подхода.
Рассмотрим первый надежный способ. Мы помещаем фон непосредственно внутрь ячейки или объединенного диапазона ячеек, а поверх накладываем графические текстовые поля с прозрачным фоном.
Разберем реализацию по шагам:
Картинка. Загружаем туда графический макет подложки ценника. Теперь изображение находится на нижнем слое таблицы.НаименованиеТовара и ЦенаТовара) в свойстве Имя.Посмотрим на программный код, с помощью которого можно обращаться к созданным объектам напрямую через коллекцию Рисунки сформированного табличного документа:
// Пример заполнения текста напрямую через коллекцию Рисунки
ТабДок.Рисунки.НаименованиеТовара.Текст = Выборка.НаименованиеДляЦенника;
ТабДок.Рисунки.ЦенаТовара.Текст = Формат(Выборка.Цена, "ЧДЦ=2; ЧГ=0");
Такой способ удобен, когда структура макета жестко фиксирована и требуется точечное позиционирование надписей поверх фоновой графики.
Рассмотрим более универсальный и привычный для разработчиков 1С вариант. Платформа позволяет использовать параметры не только в ячейках таблицы, но и внутри графических объектов типа «Текст». Это избавляет от необходимости адресоваться к каждому рисунку по имени в результирующем документе.
Разберем последовательность действий:
Картинка ячейки макета или располагаем графическую подложку на заднем плане (используя пункт контекстного меню Порядок — На задний план).Текст на значение Параметр.Номенклатура или Цена.Теперь мы можем заполнять параметры макета стандартным методом через свойство Параметры выводимой области, точно так же, как при работе с обычными ячейками:
// Получаем область макета ценника
ОбластьЦенника = Макет.ПолучитьОбласть("СтрокаЦенника");
// Заполняем параметры области, включая графические текстовые блоки
ОбластьЦенника.Параметры.Номенклатура = СтрокаТаблицы.Номенклатура.НаименованиеПолное;
ОбластьЦенника.Параметры.Цена = СтрокаТаблицы.Цена;
// Выводим готовую область в итоговый табличный документ
ТабДок.Вывести(ОбластьЦенника);
Этот способ существенно упрощает код формирования отчета или обработки печати ценников, так как обработка параметров происходит автоматически при выводе области.
Проанализируем подводные камни, с которыми можно столкнуться при печати ценников с графическими элементами: