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

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

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

Использование закладок для позиционирования

Одним из самых надежных способов является использование закладок (Bookmark). В шаблоне Word вы заранее расставляете закладки в нужных местах. При формировании документа из 1С мы находим закладку по её имени и помещаем туда файл. Это гарантирует, что объект окажется именно там, где вы запланировали.

Для начала работы необходимо создать объект Word.Application и открыть документ. Далее мы проверяем наличие закладки и выполняем вставку:


// Подключаемся к Word
Word = Новый COMОбъект("Word.Application");
Документ = Word.Documents.Open("C:\ПутьКВашемуШаблону.docx");

// Проверяем, существует ли закладка
Если Документ.Bookmarks.Exists("ИмяВашейЗакладки") Тогда
    
    // Выделяем диапазон закладки
    Закладка = Документ.Bookmarks("ИмяВашейЗакладки");
    Диапазон = Закладка.Range;
    
    // Вставляем файл в диапазон
    ВставленныйОбъект = Диапазон.InlineShapes.AddPicture("C:\ПутьКФайлу.jpg", Ложь, Истина);
    
    // Настраиваем параметры объекта
    ВставленныйОбъект.Height = 100;
    ВставленныйОбъект.Width = 100;
КонецЕсли;

Обратите внимание, что мы используем InlineShapes — это фигуры, которые ведут себя как часть текста. Если вам требуется более гибкое позиционирование, стоит рассмотреть коллекцию Shapes.

Метод поиска и замены текста

Если нет возможности расставлять закладки в шаблоне, можно использовать метод поиска ключевых слов. Мы находим определенную текстовую метку (например, «ПодписьДиректора») и заменяем её на графический объект. Этот подход удобен, так как позволяет редактировать шаблон без участия программиста.

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


Поиск = Документ.Range().Find;
Поиск.Text = "МеткаДляВставки";
Поиск.Execute();

Если Поиск.Found Тогда
    Выделение = Поиск.Parent;
    Выделение.Select();
    
    // Вставка объекта на место найденного текста
    Объект = Выделение.InlineShapes.AddPicture("C:\ПутьКФайлу.jpg", Ложь, Истина);
    
    // Опционально: конвертируем в плавающую фигуру для управления обтеканием
    Шейп = Объект.ConvertToShape();
    Шейп.WrapFormat.Type = 4; // Установка типа обтекания
КонецЕсли;

Особенности удаления старых объектов

Часто возникает вопрос: как обновить содержимое, если документ уже сформирован? Если вы используете закладки, логика очистки становится простой: перед вставкой нового содержимого мы должны удалить предыдущий контент внутри закладки. Для этого можно получить Range закладки и очистить его свойство Text или воспользоваться методом Delete для объектов, расположенных внутри этого диапазона.

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

Советы по работе с графическими объектами

При работе через COM важно учитывать следующие нюансы:

  1. InlineShapes vs Shapes: InlineShapes располагаются внутри строки и ведут себя как символ. Shapes позволяют накладывать объекты поверх текста или под ним, а также позиционировать их по координатам страницы.
  2. Обтекание текстом: Если вы переводите объект в статус Shape, обязательно настраивайте свойство WrapFormat.Type. Без этого объект может «улетать» в непредсказуемые области документа.
  3. Отказ от Selection: Старайтесь избегать использования Word.Selection в коде. Работа через Range или Bookmark работает быстрее и стабильнее, так как не зависит от того, что «видит» пользователь в текущий момент на экране.
  4. Закрытие приложения: Всегда корректно завершайте работу с объектом приложения Word.Quit() и обнуляйте переменную, чтобы не оставлять «висящие» процессы winword.exe в памяти сервера или клиента.

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

← На главную