При формировании печатных форм часто возникает необходимость защитить документ от несанкционированного копирования, пометить его статусом (например, «Образец», «Копия», «Аннулировано») или добавить фирменный логотип в качестве подложки. Разберем по шагам, как правильно реализовать вывод водяного знака в ТабличныйДокумент, где хранить графические данные и с какими нюансами платформы предстоит столкнуться при печати.
Прежде всего проанализируем распространенное заблуждение относительно имени свойства. В платформе 1С:Предприятие у объекта ТабличныйДокумент отсутствует свойство с именем ФоновыйРисунок. Корректное свойство называется ФоноваяКартинка. Кроме того, данное свойство принимает не строковый путь к файлу на диске, а объект типа Картинка.
Рассмотрим вариант, когда водяной знак является постоянным для всей конфигурации. В этом случае изображение целесообразно загрузить в дерево метаданных конфигурации в ветку Общие картинки.
Если мы добавили объект метаданных с именем ВодЗнак, обращение к нему в коде выполняется через глобальный контекст БиблиотекаКартинок. Посмотрим на пример кода:
// Устанавливаем изображение из состава общих картинок конфигурации
ТабДок.ФоноваяКартинка = БиблиотекаКартинок.ВодЗнак;
Этот способ наиболее прост в реализации, однако он требует внесения изменений в структуру конфигурации, что не всегда подходит при разработке расширений или внешних печатных форм.
Выясним, как поступить, если печатная форма создается как внешний отчет или обработка и менять типовую конфигурацию нельзя. В этом случае удобно сохранить файл водяного знака непосредственно внутри обработки в виде двоичного макета.
Разберем по шагам последовательность действий:
ВодянойЗнак.Картинка на основании полученного макета и передадим его табличному документу:
// Получаем двоичные данные макета и преобразуем их в картинку
МакетФона = ЭтотОбъект.ПолучитьМакет("ВодянойЗнак");
ТабДок.ФоноваяКартинка = Новый Картинка(МакетФона);
Такой подход обеспечивает автономность обработки — изображение встроено в файл печатной формы и не потеряется при переносе на другую информационную базу.
Если фоновое изображение должно динамически изменяться администратором без изменения конфигурации и макетов, файл можно сохранить в известном каталоге на сервере. Рассмотрим программную загрузку с диска:
// Загрузка изображения с диска по указанному пути
ПутьКФайлу = "C:\Bases\Resources\watermark.png";
ТабДок.ФоноваяКартинка = Новый Картинка(ПутьКФайлу);
Обратим внимание: при выполнении кода на стороне сервера указанный путь должен быть доступен пользователю операционной системы, от имени которого запущен сервер 1С:Предприятия.
Проанализируем технические нюансы работы свойства ФоноваяКартинка, которые важно учитывать при верстке отчетов:
ПроверитьВывод.ТабДок.ФиксированныйФон = Истина;. Заметим, что на печатную версию документа этот параметр не влияет.Если требуется строго центрировать водяной знак на листе или масштабировать его под размер страницы, используют добавление графического объекта в коллекцию рисунков таблицы. Посмотрим на практический пример программного позиционирования:
// Добавляем новый рисунок в документ
Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Картинка = БиблиотекаКартинок.ВодЗнак;
// Задаем параметры отображения и координаты в миллиметрах
Рисунок.РазмерКартинки = РазмерКартинки.АвтоРазмер;
Рисунок.Лево = 20;
Рисунок.Верх = 50;
Рисунок.Ширина = 150;
Рисунок.Высота = 150;
Важно помнить: любые объекты из коллекции Рисунки по умолчанию накладываются поверх сетки ячеек документа. Если ячейки макета содержат собственную заливку (например, белый фон), рисунок под ними скрыть не удастся, а располагаясь сверху, непрозрачный рисунок перекроет текст. Поэтому для водяных знаков следует использовать файлы формата PNG с высокой степенью прозрачности основного слоя.