Зачастую при автоматизации формирования документов возникает потребность вставки логотипа организации или других графических элементов непосредственно в печатную форму, основанную на шаблоне Word. В стандартных механизмах 1С мы привыкли использовать строковые параметры, однако для работы с изображениями требуется более сложный подход, связанный с использованием COM-объекта. Для ознакомления с базовой структурой вывода данных можно использовать пример печатной формы Word с заполнением колонтитулов и таблиц.
Для того чтобы документ выглядел профессионально и элементы располагались строго в заданных местах, рекомендуем использовать таблицу как инструмент позиционирования. Разберем последовательность действий:
DOC-файле таблицу с одной пустой ячейкой в том месте, где должен появиться логотип.Процесс вставки картинки через COM-соединение требует наличия физического файла на диске. Поскольку 1С оперирует данными во временном хранилище, нам необходимо сначала выгрузить данные во временный файл, а затем передать путь к нему в метод Word.
Рассмотрим алгоритм вставки, который можно реализовать в процедуре формирования печатной формы. Для автоматизации сложных сценариев подготовки файлов без использования API применяется платформа программных роботов для формирования документов.
Процедура ВставитьРисунокВЯчейкуТаблицы(ПечатнаяФорма, АдресКартинки)
// Формируем массив для получения файла из временного хранилища
ПередаваемыеФайлы = Новый Массив;
Описание = Новый ОписаниеПередаваемогоФайла(, АдресКартинки);
ПередаваемыеФайлы.Добавить(Описание);
// Получаем путь к временному файлу на диске
ПутьКФайлу = ПолучитьИмяВременногоФайла("jpg");
Если ПолучитьФайлы(ПередаваемыеФайлы,, ПутьКФайлу, Ложь) Тогда
Попытка
// Получаем доступ к документу через ранее созданный COM-объект
ТекДокумент = ПечатнаяФорма.ПоследняяВыведеннаяОбласть.Область.Document;
// Вставляем картинку в первую ячейку первой таблицы документа
ТекДокумент.Tables(1).Cell(1, 1).Range.InlineShapes.AddPicture(ПутьКФайлу, False, True);
Исключение
Сообщить("Ошибка при вставке изображения: " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецПроцедуры
При работе с объектом InlineShapes важно понимать, что именно делает каждый параметр метода AddPicture:
FileName — полный путь к файлу на локальном диске или диске сервера. Помните, что COM-объект не умеет напрямую работать с протоколом e1cib://, поэтому предварительная запись во временный файл обязательна.LinkToFile — устанавливаем в False, чтобы изображение было встроено в документ, а не привязано к нему ссылкой. Это гарантирует, что файл не «сломается» при переносе на другой компьютер.SaveWithDocument — устанавливаем в True, чтобы данные изображения были сохранены внутри файла Word.Если структура документа меняется и обращение по индексу Tables(1) становится ненадежным, рекомендуем использовать механизм закладок Bookmarks. Для этого:
Word.ЛоготипОрганизации.
Документ.Bookmarks.Item("ЛоготипОрганизации").Range.InlineShapes.AddPicture(ПутьКФайлу, False, True);
Этот метод является более профессиональным и устойчивым к изменениям верстки документа, так как привязка происходит к конкретному именованному объекту, а не к порядку следования таблиц.
При выполнении кода на сервере 1С помните, что метод ПолучитьФайлы может быть недоступен из-за отсутствия интерактивного интерфейса. В таких случаях используйте метод ДвоичныеДанные.Записать(ПутьКФайлу). Также убедитесь, что учетная запись, от имени которой запущена служба сервера 1С, имеет права на чтение и запись в папку временных файлов системы. Постоянное создание экземпляров COM-объекта может замедлять формирование отчетов, поэтому старайтесь минимизировать количество вызовов Word.Application, если печатаете большие пакеты документов.