Как программно вставить изображение в макет Word из 1С?

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

Зачастую при автоматизации формирования документов возникает потребность вставки логотипа организации или других графических элементов непосредственно в печатную форму, основанную на шаблоне Word. В стандартных механизмах 1С мы привыкли использовать строковые параметры, однако для работы с изображениями требуется более сложный подход, связанный с использованием COM-объекта. Для ознакомления с базовой структурой вывода данных можно использовать пример печатной формы Word с заполнением колонтитулов и таблиц.

Подготовка шаблона Word

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

  1. Создайте в вашем DOC-файле таблицу с одной пустой ячейкой в том месте, где должен появиться логотип.
  2. Настройте свойства таблицы: уберите границы, занулите отступы и удалите заливку. Это позволит логотипу гармонично вписаться в текст документа без визуальных искажений.
  3. При использовании этого метода предполагается, что в целевой области документа будет находиться только одна таблица с одной ячейкой, в которую мы и будем программно внедрять изображение.

Реализация логики в коде 1С

Процесс вставки картинки через COM-соединение требует наличия физического файла на диске. Поскольку 1С оперирует данными во временном хранилище, нам необходимо сначала выгрузить данные во временный файл, а затем передать путь к нему в метод Word.

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


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

Разбор используемых методов и параметров

При работе с объектом InlineShapes важно понимать, что именно делает каждый параметр метода AddPicture:

Альтернативный подход: использование закладок

Если структура документа меняется и обращение по индексу Tables(1) становится ненадежным, рекомендуем использовать механизм закладок Bookmarks. Для этого:

  1. Откройте шаблон в Word.
  2. Выделите место, где должен быть логотип, перейдите на вкладку «Вставка» и выберите «Закладка». Присвойте ей уникальное имя, например, ЛоготипОрганизации.
  3. В коде 1С вместо обращения к таблице используйте следующий синтаксис:

Документ.Bookmarks.Item("ЛоготипОрганизации").Range.InlineShapes.AddPicture(ПутьКФайлу, False, True);

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

Важные рекомендации при работе на сервере

При выполнении кода на сервере 1С помните, что метод ПолучитьФайлы может быть недоступен из-за отсутствия интерактивного интерфейса. В таких случаях используйте метод ДвоичныеДанные.Записать(ПутьКФайлу). Также убедитесь, что учетная запись, от имени которой запущена служба сервера 1С, имеет права на чтение и запись в папку временных файлов системы. Постоянное создание экземпляров COM-объекта может замедлять формирование отчетов, поэтому старайтесь минимизировать количество вызовов Word.Application, если печатаете большие пакеты документов.

← На главную