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