Работа с шаблонами документов в 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 важно учитывать следующие нюансы:
InlineShapes располагаются внутри строки и ведут себя как символ. Shapes позволяют накладывать объекты поверх текста или под ним, а также позиционировать их по координатам страницы.Shape, обязательно настраивайте свойство WrapFormat.Type. Без этого объект может «улетать» в непредсказуемые области документа.Word.Selection в коде. Работа через Range или Bookmark работает быстрее и стабильнее, так как не зависит от того, что «видит» пользователь в текущий момент на экране.Word.Quit() и обнуляйте переменную, чтобы не оставлять «висящие» процессы winword.exe в памяти сервера или клиента.Используя данные методы, вы сможете создать гибкую систему формирования документов, в которой подписи, печати и другие графические элементы будут автоматически подставляться в нужные места шаблонов в зависимости от контекста задачи.