Как заполнить шаблон word из 1с

Очень полезная внешняя обработка для всех типовых конфигураций 1С:Предприятие 8.3, позволяет формировать файл Word по выбранному шаблону из справочников и документов системы. С ее помощью вы можете распечатывать из 1С различные спецификации, трудовые договоры и договоры с контрагентами, гарантийные талоны и прочее прочее. Имея под рукой Word нужной структуры и чуть доработав его, вы получите возможность формировать его прямо из 1с с заполнением всех нужных параметров.

Печать спецификации к договору

Принцип работы обработки следующий:

  • выбираем Word нужной структуры,
  • в тех местах файла, где необходимо вставить информацию из 1С, делаем закладки,
  • после подготовки шаблона добавляем его в 1С (справочник Файлы),
  • настраиваем заполнение шаблона печати в 1С,
  • печатаем нужные документы/справочники, выбрав созданный шаблон.

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

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

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



В наименовании закладок нельзя использовать пробелы.

При печати также будем заполнять таблицу товаров. Чтобы она сформировалась красиво, оставим шапку и одну пустую строку:


Сохраняем Word, закрываем.

Настройка заполнения шаблона

Теперь в программе открываем журнал документов продажи, заходим в меню печати и жмем кнопку для настройки печати по шаблону Word:


Настройка шаблонов доступна только пользователям с полными правами.

В открывшемся окне настроек первым делом создадим новый файл в программе (имеется в виду элемент справочника Файлы ) и привяжем к нему наш Word:


В открывшемся окне выбираем Добавить файл :


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


В качестве источника используются реквизиты самого документа продажи, а также производные от этих реквизитов:

При печати можно использовать также дополнительные реквизиты справочников и документов.

Список доступных реквизитов очень большой, удобно воспользоваться быстрым вводом:


В результате выбора источника таблица примет следующий вид:


Для значения к строках таблицы доступно склонение по падежам, а также сокращение ФИО:


Для печати таблицы в Word выберем исходную таблицу документа:


После выбора таблицы появляется справка с именами тех реквизитов, которые можно использовать для вывода таблицы в Word. Нам остается перечислить нужные реквизиты через запятую (в порядке следования колонок файла). Допускается оставлять пустое значение в колонке или писать туда произвольный текст:


Все ОК, теперь можем печатать нужный Word.

Печать по настроенному шаблону доступна теперь для всех, т.е. пользователям не нужно каждому настраивать печать самостоятельно.



Можем печатать как один документ, так и список:


На форме настроек печати помимо создания новых шаблонов можно редактировать имеющиеся:


В том случае, если для объекта настроено несколько шаблонов Word, то при выборе команды печати откроется окно с выбором нужного:


Во избежание коллизий с правами доступа пользователей к справочнику Файлы вам необходимо установить помимо самой обработки печати в Word еще и расширение для 1С (находится в одном архиве с обработкой), которое предоставит пользователям доступ на чтение справочника.

Если у вас есть вопросы/замечания/предложения по данной обработке, буду рад ответить.

Релиз 1.0.2.2 от 15.12.2018

Для вывода даты при печати шаблона добавлена возможность выбора формата, в табличной части помимо номенклатуры теперь можно указывать артикул и единицу измерения:


Теперь можно удалять ненужные шаблоны:


Релиз 1.0.2.3 от 29.01.2019

Появилась возможность выводить части даты по отдельности - день, месяц (номер или название) и год:


Для физических лиц (и контрагентов с типом физлицо) теперь можно выводить паспортные данные:


Релиз 1.0.2.4 от 12.03.2019

При печати в Word табличной части документов товародвижения появилась возможность использовать не только реквизиты этой табличной части, но и любые реквизиты номенклатуры:


Пример выгрузки информации в ворд из 1С

Процедура КнопкаВыполнитьНажатие(Кнопка)

// Создание объекта MS Word
//Попытка
// Word = Новый COMОбъект(«Word.Application»);
//Исключение
// Сообщить(ОписаниеОшибки(),»!!!»);
// Сообщить(«Возможно, MS Word не установлен на этом компьютере.»);
// Возврат;
//КонецПопытки;

Handler = Новый Структура(«Тип», «DOC»);

Попытка
Word = Новый COMОбъект(«Word.Application»);
Исключение

КонецПопытки;

Handler.Вставить(«COMСоединение», Word);
Попытка
Word.Documents.Add();
Исключение
Word.Quit(0);
Word = 0;
Handler.Word = 0;
//ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), «Ошибка»,
// ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()),Истина);
//НеУдалосьСформироватьПечатнуюФорму(ИнформацияОбОшибке());
КонецПопытки;

// Установка видимости приложения
Word.Visible = Истина;
// Добавление нового документа в приложение
//Word.Documents.Add();
// Делаем документ активным
Документ = Word.ActiveDocument();

Таб = Документ.Tables.Add(Документ.characters.last, 2, 2);
Таб.Cell(1, 1).Range.Text = «»;
Таб.Cell(1, 2).Range.Text =»»;
Таб.Cell(1, 2).Range.ParagraphFormat.Alignment=2; // право

Таб.Cell(2, 1).Range.Text = «г. Иркутск, б. Постышева 18Б»;
Таб.Cell(2, 2).Range.Text = «Отдел по работе с претензиями»;
Таб.Cell(2, 2).Range.ParagraphFormat.Alignment = 2; // Выравнивание в право

// Добавим параграф
Документ.Paragraphs.Add();
Документ.Paragraphs(НомерПараграфа).Range.InsertAfter(«Претензия № «);

Документ.Paragraphs.Add();
НомерПараграфа = Документ.Paragraphs.Count();

ПечТема = «»;
ПечТема = «Тема: Адресная система распространения»;

Документ.Paragraphs(НомерПараграфа).Range.InsertAfter(ПечТема);

Документ.Paragraphs.Add();
НомерПараграфа = Документ.Paragraphs.Count();
Документ.Paragraphs(НомерПараграфа).Range.InsertAfter(«на «);
Документ.Paragraphs(НомерПараграфа).Range.Font.Size = 12; // размер шрифта
Документ.Paragraphs(НомерПараграфа).Range.Font.Bold = -1; // жирный шрифт

Документ.Paragraphs.Add(); // Отступ

ПечТовар = «» + » (» + «)»;
ПечНомерИздания = «»;
ПечЗаказ = «№ » + » от «;

ПечИсполнитель = «123»;
ПечТелефон = «123»;

Документ.Paragraphs.Add();
НомерПараграфа = Документ.Paragraphs.Count();
//Документ.Paragraphs(НомерПараграфа).Format.SpaceAfter = 24;
Документ.Paragraphs(НомерПараграфа).Range.InsertAfter(» Направляем для проверки запрос о неполучении «);
Документ.Paragraphs(НомерПараграфа).Range.Font.Size = 12; // размер шрифта

Документ.Paragraphs.Add();
НомерПараграфа = Документ.Paragraphs.Count();
Документ.Paragraphs(НомерПараграфа).Range.InsertAfter(» Просим сообщить данные отправительных документов на указанное издание или сообщить причину неполучения посыла.»);
Документ.Paragraphs(НомерПараграфа).Range.Font.Size = 12; // размер шрифта
Документ.Paragraphs(НомерПараграфа).Range.Font.Bold = 0; // обычный шрифт
Документ.Paragraphs.Item(НомерПараграфа).Format.Alignment=0; // лево

Документ.Paragraphs.Add(); // Отступ
Документ.Paragraphs.Add(); // Отступ

Документ.Paragraphs.Add();
НомерПараграфа = Документ.Paragraphs.Count();
Документ.Paragraphs(НомерПараграфа).Range.InsertAfter(«ФИО исполнителя: » + ПечИсполнитель + » _____________ подпись»);
Документ.Paragraphs(НомерПараграфа).Range.Font.Size = 12; // размер шрифта
Документ.Paragraphs(НомерПараграфа).Range.Font.Bold = 0; // обычный шрифт
Документ.Paragraphs.Item(НомерПараграфа).Format.Alignment=0; // лево

Документ.Paragraphs.Add();
НомерПараграфа = Документ.Paragraphs.Count();
Документ.Paragraphs(НомерПараграфа).Range.InsertAfter(«Контактный телефон: » + ПечТелефон);
Документ.Paragraphs(НомерПараграфа).Range.Font.Size = 12; // размер шрифта
Документ.Paragraphs(НомерПараграфа).Range.Font.Bold = 0; // обычный шрифт
Документ.Paragraphs.Item(НомерПараграфа).Format.Alignment=0; // лево

Документ.Paragraphs.Add(); // Отступ

Публикация - своего р ода памятка, содержащая примеры кода для:

1. заполнение шаблона Word данными из 1С;
2. заполнение колонтитулов Word данными из 1С;
3. заполнение таблицы в Word данными из 1С;

Начало работы

В большинстве случаев перед нами ставится следующая задача:
Нужно открыть документ Word, заполненный данными из 1С.

Для этого нам нужно подготовить шаблон документа Word. Не путайте это с Word Template, специальные файлы Word, которые содержат настройки документов для многократного использования. Нам нужен обычный вордовский документ с расширениеми *.docx или *.doc. А далее поместить этот документ в макет с двоичными данными.

Попытка //Получаем макет из двоичных данных Шаблон = ПолучитьМакет(ДополнительныеПараметры.ВидДоговора); ИмяФайла = ПолучитьИмяВременногоФайла(".docx"); Шаблон.Записать(ИмяФайла); //Создаем COM-объект для работы с Word ОбъектВорд = Новый COMОбъект("Word.Application"); ОбъектВорд.Documents.add(ИмяФайла); //В Word можно открывать в одном приложении несколько документов, поэтому ОбъектВорд.Application.Documents - это коллекция открытых документов. //В нашем случае документ открыт всегда один ДокументВорд = ОбъектВорд.Application.Documents(1); ДокументВорд.Activate(); Исключение Сообщить("Ошибка при запуске приложения "+ОписаниеОшибки()); КонецПопытки; //Разумеется, получение COM-объекта нужно поместить в попытку. Мало ли, что-то пойдет не так.

Читатель может справедливо заметить, что используется модальный вызов, и погрозить автору пальцем. И будет прав.

//Создадим структуру параметров документа ПараметрыДокумента = ПодготовитьСтрукутруПараметров(); //Заполним структуру параметров документа ЗаполнитьСтруктуруПараметров(ПараметрыДокумента);

Углубимся немножко в принципы работы Word...

Каждый документ Word разделен на разделы, которые состоят из страниц.

Для каждого раздела есть возможность создавать свою нумерацию элементов, уникальные колонтитулы и настройки параметров страницы. Так, например, чтобы повернуть одну из страниц (вывести на печать как альбомную), нужно создать под неё отдельный раздел.

Каждая страница Word разделена на несколько областей:

  • Верхний колонтитул
  • Основной текст
  • Нижний колонтитул

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

//Объект, содержит весь основный текст из всех разделов ДокументВорд.Content //Объект содержит коллекцию разделов документа ДокументВорд.Sections //В каждом разделе есть своя коллекция для верхних колонтитулов ДокументВорд.Sections(1).Headers //И своя коллекция для нижних колонтитулов ДокументВорд.Sections(1).Footers //При этом, если стоит галочка "Уникальный колонтитул для первой страницы", то коллекции Headers и Footers будут содержать два элемента

Заполнение пользовательских параметров

При обращении к этим коллекциям мы можем выполнять в них поиск и получать встроенные объекты, например, таблицы.

Теперь мы более-менее поняли, как обращаться к областям Word, можем в них пошуровать и выполнить замену наших параметров:

//Переберем все параметры и заменим их в документе Для каждого Параметр Из ПараметрыДокумента Цикл ВыполнитьЗамену(ДокументВорд.Content, Параметр.Ключ, Параметр.Значение); //Ищим вхождения параметра в верхнем колонтитуле ВыполнитьЗамену(ДокументВорд.Sections(1).Headers.Item(1).Range(), Параметр.Ключ, Параметр.Значение); //Ищим вхождения параметра в нижнем колонтитуле первой и последующих страниц ВыполнитьЗамену(ДокументВорд.Sections(1).Footers.Item(1).Range(), Параметр.Ключ, Параметр.Значение); ВыполнитьЗамену(ДокументВорд.Sections(1).Footers.Item(2).Range(), Параметр.Ключ, Параметр.Значение); КонецЦикла; //Выполнить поиск и замену Функция ВыполнитьЗамену(знач Object, Параметр, Значение) Object.Find.Execute(Параметр,,Значение,2) КонецФункции

Рассмотри подробнее метод Execute. Его параметры идентичны диалоговуму окну при замене/поиске непоседресвенно из MS Word:

А вот и основные параметры (вольный перевод справки MSDN):

  1. Искомый текст - Строка - Текст для замены. Текст может содержать специальные параметры. Например, ^p - абзац, ^t - табуляция
  2. Чувствительность к регистру - Булево - Если истина, то поиск будет осуществляться с учетом регистра
  3. Слова целиком - Булево - Если истина, то ищутся слова целиком. Вхождение слов не учитываются. Например, при поиске слова дом будет пропущено слово домашний
  4. Использовать подстановочные знаки - Булево - Если истина, то используются встроенные регулярные выражения.
  5. Искать похожие - Булево - Если истина, то результат поиска будет содержать похожие слова
  6. Искать все формы - Булево - Если истина, то результат поиска будет содержать различные формы слов.
  7. Поиск сначала - Булево - Если истина, то будет осуществляться с начала до конца документа
  8. Охват - WdFindWrap - Опредяляет направление поиска
  9. Формат - Format - Формат искомого текста
  10. Строка замены - Строка - Строка, на которую будет заменен исходный текст
  11. Количество замен - WdReplace - Определяет сколько раз выполнять замену
  12. и т.д.

WdReplace - Constant Value:
wdReplaceAll 2
wdReplaceNone 0
wdReplaceOne 1

Данный метод не позволяет получить "Строка замены" как выделенную область, но он работает где-то в 10 раз медленнее. Для получения выделенной области можно воспользоваться немножко откорректированной типовой функцией:

//УправлениеПечатьюMSWordКлиент c незначительными изменениями для конфигурации УПП 1.3 Функция ВыполнитьЗамену(знач Object, Параметр, Значение) СтрокаПоиска = "[" + Параметр + "]"; СтрокаЗамены = Строка(Значение); //Необходимо выделить областей, в которой мы осуществляем замену Object.Select(); //Получаем выделенную область Selection = Object.Application.Selection; //Найдем все вхождения параметра и заменим его на нужное нам значение FindObject = Selection.Find; FindObject.ClearFormatting(); Пока FindObject.Execute(СтрокаПоиска) Цикл Если ПустаяСтрока(СтрокаЗамены) Тогда Selection.Delete(); Иначе Selection.TypeText(СтрокаЗамены); КонецЕсли; КонецЦикла; //Отменим выделение Selection.Collapse(); КонецФункции

Уже получив выделенную область можно отредактировать стиль текста, шрифт и т.д.

//Редактирование шрифта Selection.Font //Редактирование цвета Selection.HighlightColorIndex

Также есть второй подход, использующий такой объект Word, как поля. Мне он не очень нравится, т.к. в больших документах, порядка 100 страниц, эти поля начинают глючить (исчезать, не подставлять нужные значения) и прочая ерунда. Ну по крайней мере в Word 2007. Но я его все равно приведу:

При подготовке шаблона в тело документа необходимо навставлять полей с типом DOCVARIABLE (можно вставлять горячими клавишими Ctrl+F9).

Доступ к таким полям можно получить следующим нехитрым образом:

ДокументВорд.Variables.Item(НазваниеПараметра).Values

Заполнение таблиц по шаблону

Итак, мы заполнили параметры в основном тексте документа, заменили параметры в колонтитулах, но у нас еще есть одна неприятность - нужно заполнить таблицу.

Подход, описанный ниже, годится только для таблиц с заранее известным форматом. Т.е. мы можем как угодно отформатировать таблицу и её строки изначально. Но потом изменять довольно-таки проблематично.

К таблицам можно получить доступ через области документа.

//Получаем доступ к первой таблице в основном тексте Таблица = ДокументВорд.Content.Tables(1)

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

//Данные для заполнения ПараметрыТЧ = ПараметрыДокумента.ПриложениеТЧ; //Нужно оставить шапку и первую строку нетронутой Итератор = 2; Таблица = ДокументВорд.Content.Tables(3); Для каждого Строка Из ПараметрыТЧ Цикл //По умолчанию добавляет строку выше первой Таблица.Rows.Add(); ЗаполнитьСтрокуТаблицы(Таблица, Итератор, Строка,"ПП,НоменклатураНаименование,ЕдИзмерения,ЦенаСтрокой",ПараметрыТЧ); Итератор = Итератор + 1; КонецЦикла; //Структура шаблонов содержит Наименование колонок и их порядок Процедура ЗаполнитьСтрокуТаблицы(Таблица, НомерСтроки, ЗначениеЗаполнения, СтруктураШаблонов,ТаблицаЗначений) МассивСтрок = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтруктураШаблонов,","); Итератор = 1; Для каждого Строка Из МассивСтрок Цикл Если ТаблицаЗначений.Колонки.Найти(Строка) = Неопределено И Строка <> "ПП" Тогда Итератор = Итератор + 1; Продолжить; //Не забываем, что Шапка тоже строка, а при нумерации нам нужно её исключить ИначеЕсли Строка = "ПП" Тогда Таблица.Cell(НомерСтроки, Итератор).Range().Text = Строка(НомерСтроки-1); Итератор = Итератор + 1; Продолжить; КонецЕсли; Таблица.Cell(НомерСтроки, Итератор).Range().Text = Строка(ЗначениеЗаполнения[Строка]); Итератор = Итератор + 1; КонецЦикла; КонецПроцедуры

Вот, в принципе, и все. Основные вопросы, возникающие при работе с Word, я постарался осветить. Надеюсь, данный обзор поможет вам в работе =)

Спасибо за советы и комментарии:
,

Критика только приветствуется. Чем больше замечаний, тем лучше будет гайд =)

Публикация - своего р ода памятка, содержащая примеры кода для:

1. заполнение шаблона Word данными из 1С;
2. заполнение колонтитулов Word данными из 1С;
3. заполнение таблицы в Word данными из 1С;

Начало работы

В большинстве случаев перед нами ставится следующая задача:
Нужно открыть документ Word, заполненный данными из 1С.

Для этого нам нужно подготовить шаблон документа Word. Не путайте это с Word Template, специальные файлы Word, которые содержат настройки документов для многократного использования. Нам нужен обычный вордовский документ с расширениеми *.docx или *.doc. А далее поместить этот документ в макет с двоичными данными.

Попытка //Получаем макет из двоичных данных Шаблон = ПолучитьМакет(ДополнительныеПараметры.ВидДоговора); ИмяФайла = ПолучитьИмяВременногоФайла(".docx"); Шаблон.Записать(ИмяФайла); //Создаем COM-объект для работы с Word ОбъектВорд = Новый COMОбъект("Word.Application"); ОбъектВорд.Documents.add(ИмяФайла); //В Word можно открывать в одном приложении несколько документов, поэтому ОбъектВорд.Application.Documents - это коллекция открытых документов. //В нашем случае документ открыт всегда один ДокументВорд = ОбъектВорд.Application.Documents(1); ДокументВорд.Activate(); Исключение Сообщить("Ошибка при запуске приложения "+ОписаниеОшибки()); КонецПопытки; //Разумеется, получение COM-объекта нужно поместить в попытку. Мало ли, что-то пойдет не так.

Читатель может справедливо заметить, что используется модальный вызов, и погрозить автору пальцем. И будет прав.

//Создадим структуру параметров документа ПараметрыДокумента = ПодготовитьСтрукутруПараметров(); //Заполним структуру параметров документа ЗаполнитьСтруктуруПараметров(ПараметрыДокумента);

Углубимся немножко в принципы работы Word...

Каждый документ Word разделен на разделы, которые состоят из страниц.

Для каждого раздела есть возможность создавать свою нумерацию элементов, уникальные колонтитулы и настройки параметров страницы. Так, например, чтобы повернуть одну из страниц (вывести на печать как альбомную), нужно создать под неё отдельный раздел.

Каждая страница Word разделена на несколько областей:

  • Верхний колонтитул
  • Основной текст
  • Нижний колонтитул

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

//Объект, содержит весь основный текст из всех разделов ДокументВорд.Content //Объект содержит коллекцию разделов документа ДокументВорд.Sections //В каждом разделе есть своя коллекция для верхних колонтитулов ДокументВорд.Sections(1).Headers //И своя коллекция для нижних колонтитулов ДокументВорд.Sections(1).Footers //При этом, если стоит галочка "Уникальный колонтитул для первой страницы", то коллекции Headers и Footers будут содержать два элемента

Заполнение пользовательских параметров

При обращении к этим коллекциям мы можем выполнять в них поиск и получать встроенные объекты, например, таблицы.

Теперь мы более-менее поняли, как обращаться к областям Word, можем в них пошуровать и выполнить замену наших параметров:

//Переберем все параметры и заменим их в документе Для каждого Параметр Из ПараметрыДокумента Цикл ВыполнитьЗамену(ДокументВорд.Content, Параметр.Ключ, Параметр.Значение); //Ищим вхождения параметра в верхнем колонтитуле ВыполнитьЗамену(ДокументВорд.Sections(1).Headers.Item(1).Range(), Параметр.Ключ, Параметр.Значение); //Ищим вхождения параметра в нижнем колонтитуле первой и последующих страниц ВыполнитьЗамену(ДокументВорд.Sections(1).Footers.Item(1).Range(), Параметр.Ключ, Параметр.Значение); ВыполнитьЗамену(ДокументВорд.Sections(1).Footers.Item(2).Range(), Параметр.Ключ, Параметр.Значение); КонецЦикла; //Выполнить поиск и замену Функция ВыполнитьЗамену(знач Object, Параметр, Значение) Object.Find.Execute(Параметр,,Значение,2) КонецФункции

Рассмотри подробнее метод Execute. Его параметры идентичны диалоговуму окну при замене/поиске непоседресвенно из MS Word:

А вот и основные параметры (вольный перевод справки MSDN):

  1. Искомый текст - Строка - Текст для замены. Текст может содержать специальные параметры. Например, ^p - абзац, ^t - табуляция
  2. Чувствительность к регистру - Булево - Если истина, то поиск будет осуществляться с учетом регистра
  3. Слова целиком - Булево - Если истина, то ищутся слова целиком. Вхождение слов не учитываются. Например, при поиске слова дом будет пропущено слово домашний
  4. Использовать подстановочные знаки - Булево - Если истина, то используются встроенные регулярные выражения.
  5. Искать похожие - Булево - Если истина, то результат поиска будет содержать похожие слова
  6. Искать все формы - Булево - Если истина, то результат поиска будет содержать различные формы слов.
  7. Поиск сначала - Булево - Если истина, то будет осуществляться с начала до конца документа
  8. Охват - WdFindWrap - Опредяляет направление поиска
  9. Формат - Format - Формат искомого текста
  10. Строка замены - Строка - Строка, на которую будет заменен исходный текст
  11. Количество замен - WdReplace - Определяет сколько раз выполнять замену
  12. и т.д.

WdReplace - Constant Value:
wdReplaceAll 2
wdReplaceNone 0
wdReplaceOne 1

Данный метод не позволяет получить "Строка замены" как выделенную область, но он работает где-то в 10 раз медленнее. Для получения выделенной области можно воспользоваться немножко откорректированной типовой функцией:

//УправлениеПечатьюMSWordКлиент c незначительными изменениями для конфигурации УПП 1.3 Функция ВыполнитьЗамену(знач Object, Параметр, Значение) СтрокаПоиска = "[" + Параметр + "]"; СтрокаЗамены = Строка(Значение); //Необходимо выделить областей, в которой мы осуществляем замену Object.Select(); //Получаем выделенную область Selection = Object.Application.Selection; //Найдем все вхождения параметра и заменим его на нужное нам значение FindObject = Selection.Find; FindObject.ClearFormatting(); Пока FindObject.Execute(СтрокаПоиска) Цикл Если ПустаяСтрока(СтрокаЗамены) Тогда Selection.Delete(); Иначе Selection.TypeText(СтрокаЗамены); КонецЕсли; КонецЦикла; //Отменим выделение Selection.Collapse(); КонецФункции

Уже получив выделенную область можно отредактировать стиль текста, шрифт и т.д.

//Редактирование шрифта Selection.Font //Редактирование цвета Selection.HighlightColorIndex

Также есть второй подход, использующий такой объект Word, как поля. Мне он не очень нравится, т.к. в больших документах, порядка 100 страниц, эти поля начинают глючить (исчезать, не подставлять нужные значения) и прочая ерунда. Ну по крайней мере в Word 2007. Но я его все равно приведу:

При подготовке шаблона в тело документа необходимо навставлять полей с типом DOCVARIABLE (можно вставлять горячими клавишими Ctrl+F9).

Доступ к таким полям можно получить следующим нехитрым образом:

ДокументВорд.Variables.Item(НазваниеПараметра).Values

Заполнение таблиц по шаблону

Итак, мы заполнили параметры в основном тексте документа, заменили параметры в колонтитулах, но у нас еще есть одна неприятность - нужно заполнить таблицу.

Подход, описанный ниже, годится только для таблиц с заранее известным форматом. Т.е. мы можем как угодно отформатировать таблицу и её строки изначально. Но потом изменять довольно-таки проблематично.

К таблицам можно получить доступ через области документа.

//Получаем доступ к первой таблице в основном тексте Таблица = ДокументВорд.Content.Tables(1)

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

//Данные для заполнения ПараметрыТЧ = ПараметрыДокумента.ПриложениеТЧ; //Нужно оставить шапку и первую строку нетронутой Итератор = 2; Таблица = ДокументВорд.Content.Tables(3); Для каждого Строка Из ПараметрыТЧ Цикл //По умолчанию добавляет строку выше первой Таблица.Rows.Add(); ЗаполнитьСтрокуТаблицы(Таблица, Итератор, Строка,"ПП,НоменклатураНаименование,ЕдИзмерения,ЦенаСтрокой",ПараметрыТЧ); Итератор = Итератор + 1; КонецЦикла; //Структура шаблонов содержит Наименование колонок и их порядок Процедура ЗаполнитьСтрокуТаблицы(Таблица, НомерСтроки, ЗначениеЗаполнения, СтруктураШаблонов,ТаблицаЗначений) МассивСтрок = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтруктураШаблонов,","); Итератор = 1; Для каждого Строка Из МассивСтрок Цикл Если ТаблицаЗначений.Колонки.Найти(Строка) = Неопределено И Строка <> "ПП" Тогда Итератор = Итератор + 1; Продолжить; //Не забываем, что Шапка тоже строка, а при нумерации нам нужно её исключить ИначеЕсли Строка = "ПП" Тогда Таблица.Cell(НомерСтроки, Итератор).Range().Text = Строка(НомерСтроки-1); Итератор = Итератор + 1; Продолжить; КонецЕсли; Таблица.Cell(НомерСтроки, Итератор).Range().Text = Строка(ЗначениеЗаполнения[Строка]); Итератор = Итератор + 1; КонецЦикла; КонецПроцедуры

Вот, в принципе, и все. Основные вопросы, возникающие при работе с Word, я постарался осветить. Надеюсь, данный обзор поможет вам в работе =)

Спасибо за советы и комментарии:
,

Критика только приветствуется. Чем больше замечаний, тем лучше будет гайд =)



Последние материалы раздела:

Промокоды летуаль и купоны на скидку
Промокоды летуаль и купоны на скидку

Только качественная и оригинальная косметика и парфюмерия - магазин Летуаль.ру. Сегодня для успешности в работе, бизнесе и конечно на личном...

Отслеживание DHL Global Mail и DHL eCommerce
Отслеживание DHL Global Mail и DHL eCommerce

DHL Global Mail – дочерняя почтовая организация, входящая в группу компаний Deutsche Post DHL (DP DHL), оказывающая почтовые услуги по всему миру и...

DHL Global Mail курьерская компания
DHL Global Mail курьерская компания

Для отслеживания посылки необходимо сделать несколько простых шагов. 1. Перейдите на главную страницу 2. Введите трек-код в поле, с заголовком "...