Потребовалось заполнить документ Word напрямую из 1С. Нашел несколько методов на pro1c.ru и mista.ru
Первый - через использование закладок Word.
В принципе, простой:
1. Делаем шаблон в Word (.DOT-файл)
2. Вставляем в него необходимое количество этих самых закладок через меню "Вставка - Закладка".
3. Даем каждой закладке свой идентификатор. По нему или по номеру потом из 1С обращаемся к закладке и заполняем:
а) по номеру
Word=СоздатьОбъект("Word.Application");
Word.visible=0;
Protokol=Word.Documents.Add(КаталогИБ()+"Dogovor\Protokol.dot",0,0,1);
Protokol.Fields(1).Result.Text=СокрЛП(Протокол);
...
Protokol.Fields(5).Result.Text=НРег(Формат(ДатаТоргов,"Д (0)ДДММММГГГГ"));
Protokol.SaveAs(ИмяФайлаПротокол);
Word.visible=1;
б) по идентификатору
//*******************************************************************
Процедура ПечатьЗакладки(ИмяЗакладки, Font, Bold, Underline, Text);
ВордДок.Bookmarks(ИмяЗакладки).Range.Font.Name = Font;
ВордДок.Bookmarks(ИмяЗакладки).Range.Bold = Bold;
ВордДок.Bookmarks(ИмяЗакладки).Range.Underline = Underline;
ВордДок.Bookmarks(ИмяЗакладки).Range.Text = Text;
КонецПроцедуры
Если есть шаблон .dot в файле FullNameFile, то:
ВордДок = Ворд.Documents.Add(FullNameFile);
И в шаблон вставляем значения наших закладок
ПечатьЗакладки("МояЗакладка", "Times New Roman", 1, 0, СокрЛП(МояЗакладка1С));
в) еще по идетификатору
hvКодЗаказа="Привет";
docWord.Bookmarks("hvКодЗаказа").Select(); docWord.Application.Selection.TypeText(hvКодЗаказа);
Через закладки не понравилось - до заполнения не видно, как будет выглядеть форматирование документа.
Так что использовали второй, более наглядный - через поиск и замену. Создаем шаблон, и в тексте прописываем идентификаторы реквизитов, которые потом будут заменены на их значения. Для избежания случайных срабатываний заключаем идентификаторы в квадратные скобки.
Ворд=СоздатьОбъект("Word.Application");
Ворд.Visible=1;
ДокВорд=Ворд.documents;
ТекДокВорд=ДокВорд.Open(СокрЛП(ПутьШаблона)); //путь к шаблону (dot)
Содержание=ТекДокВорд.Content;
Содержание.Find.Execute("[НомерДок]",0,0,,,,,,,Строка(СокрЛП(НомерДок)),1);
Содержание=ТекДокВорд.Content;
// это каждый раз!
Содержание.Find.Execute("[ФИО]",0,0,,,,,,,Строка(СокрЛП(ФИО)),1);
ТекДокВорд.SaveAs(ПодКакимИменемСохранитьФайл+".doc");
С 2003 офисом точно работает, под другими не пробовал.
UPD. 10.03.2017
В 2013 офисе тоже работает, проверено :).
Для замены всех встречающихся значений шаблона в тексте, необходимо установить последний параметр в 2.
Содержание.Find.Execute("[ФИО]",0,0,,,,,,,Строка(СокрЛП(ФИО)),2);
Описание
здесь и
здесь.
Параметр - wdReplaceAll = 2;
Поиск = ОбъектДокумент.Content.Find;
Поиск.Execute(ИмяПараметра,,,,,,,,,ЗначениеПараметра,2);