Как установить фоновый рисунок или водяной знак в табличный документ 1С?

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

При формировании печатных форм часто возникает необходимость защитить документ от несанкционированного копирования, пометить его статусом (например, «Образец», «Копия», «Аннулировано») или добавить фирменный логотип в качестве подложки. Разберем по шагам, как правильно реализовать вывод водяного знака в ТабличныйДокумент, где хранить графические данные и с какими нюансами платформы предстоит столкнуться при печати.

Прежде всего проанализируем распространенное заблуждение относительно имени свойства. В платформе 1С:Предприятие у объекта ТабличныйДокумент отсутствует свойство с именем ФоновыйРисунок. Корректное свойство называется ФоноваяКартинка. Кроме того, данное свойство принимает не строковый путь к файлу на диске, а объект типа Картинка.

Способ 1. Использование встроенной библиотеки картинок

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

Если мы добавили объект метаданных с именем ВодЗнак, обращение к нему в коде выполняется через глобальный контекст БиблиотекаКартинок. Посмотрим на пример кода:


// Устанавливаем изображение из состава общих картинок конфигурации
ТабДок.ФоноваяКартинка = БиблиотекаКартинок.ВодЗнак;

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

Способ 2. Хранение изображения в макете внешней обработки

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

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

  1. В дереве метаданных обработки добавим новый макет, выберем тип Двоичные данные и загрузим файл фонового изображения. Дадим макету понятное имя, например, ВодянойЗнак.
  2. В коде формирования печатной формы инициализируем объект Картинка на основании полученного макета и передадим его табличному документу:

// Получаем двоичные данные макета и преобразуем их в картинку
МакетФона = ЭтотОбъект.ПолучитьМакет("ВодянойЗнак");
ТабДок.ФоноваяКартинка = Новый Картинка(МакетФона);

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

Способ 3. Загрузка файла из файловой системы

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


// Загрузка изображения с диска по указанному пути
ПутьКФайлу = "C:\Bases\Resources\watermark.png";
ТабДок.ФоноваяКартинка = Новый Картинка(ПутьКФайлу);

Обратим внимание: при выполнении кода на стороне сервера указанный путь должен быть доступен пользователю операционной системы, от имени которого запущен сервер 1С:Предприятия.

Особенности и ограничения свойства «ФоноваяКартинка»

Проанализируем технические нюансы работы свойства ФоноваяКартинка, которые важно учитывать при верстке отчетов:

  1. Границы вывода: Фоновое изображение отображается исключительно в пределах фактически заполненных ячеек табличного документа. Если печатная форма занимает только половину страницы, оставшаяся часть листа останется пустой. Чтобы фон закрыл весь лист, на печать программно выводят пустые строки, контролируя высоту страницы методом ПроверитьВывод.
  2. Замощение области: По умолчанию платформа распределяет картинку мозаикой, повторяя её по вертикали и горизонтали, если размер изображения меньше размера области документа. Растянуть изображение или спозиционировать его ровно по центру штатными свойствами фона нельзя.
  3. Фиксация при прокрутке: Если необходимо, чтобы на экране пользователя фон не скроллился вместе с таблицей, можно установить свойство ТабДок.ФиксированныйФон = Истина;. Заметим, что на печатную версию документа этот параметр не влияет.

Альтернативный подход: размещение знака через коллекцию «Рисунки»

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


// Добавляем новый рисунок в документ
Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Картинка = БиблиотекаКартинок.ВодЗнак;

// Задаем параметры отображения и координаты в миллиметрах
Рисунок.РазмерКартинки = РазмерКартинки.АвтоРазмер;
Рисунок.Лево = 20;
Рисунок.Верх = 50;
Рисунок.Ширина = 150;
Рисунок.Высота = 150;

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

← На главную