Одно дело, когда заранее известно количество строк в таблице. И решение, соответственно, тоже простое: создать в шаблоне таблицу и заполнить переменные программно.
Но вот совсем другой подход, когда количество строк или колонок неизвестно.
В этом примере продемонстрировано, как можно создать табличную часть в документе Word.
Выбор, какой из перечисленных далее методов использовать, за Вами.
Одно дело, когда заранее известно количество строк в таблице. И решение, соответственно, тоже простое: создать в шаблоне таблицу и заполнить переменные программно. Ссылка на данный пример //infostart.ru/public/18940/
Но вот совсем другой подход, когда количество строк или колонок неизвестно.
История «Как я к этому пришел»
Появилась необходимость распечатывать договора по каждому контрагенту, а как известно договор может быть 1 или несколько.
Тогда, еще в 2006 году вопрос решился 5 шаблонами, в табличных частях которых было от 1 до 5 строк (ограничились 5 договорами). Вопрос решился и забылся. Но вот вопрос стал актуален по причине печати нового договора, в котором задействована номенклатура, а количество строк ведь может переваливать добрую сотню наименований. И следовательно — выход в создании динамической таблицы в шаблоне Word, который и описан двумя самыми простыми способами.
Есть 2 подхода к созданию таблицы.
1) Вам нужна таблица с равной шириной колонок, так сказать созданная автоматически.
2) У вас есть шаблон таблицы (только шапка и 1 строка).
Код создания таблицы с автоформатом.
Процедура СоздатьПример1(Кнопка) НовоеНапоминание = ПолучитьМакет("Пример1"); Массив = Новый Массив(5);//сделаем таблицу из 5 строк + шапка MsWord = НовоеНапоминание.Получить(); //макет является ActiveDocwment с загруженым в него Word-файлом Попытка //Вставление таблицы с 10 строки MsWord.Application.Visible = 0; Word = MsWord.Application; Док=Word.Documents(1); Док.Activate(); //подготовка таблицы: //Вариант №1 Самый простой Word.Selection.MoveDown(,10); //10 строка - первая строка таблицы //Конец Варианта №1 //Вариант №2 Word.Bookmarks("ff").Select(); //Где ff - это набор любых символов, вплоть до непечатаемых;) //Конец Варианта №2 Табл= Word.Selection.Range; //Формируем заголовок: Табл.InsertAfter("Сумма*Валюта*Назначение*Дата долга*Вид документа*Номер документа* *Дата оплаты"); Табл.InsertParagraphAfter(); //сама таблица Для й = 1 по Массив.Количество() Цикл Табл.InsertAfter(массЗнчСтрокиТЧ[0]+"*"+массЗнчСтрокиТЧ[1]+"*"+массЗнчСтрокиТЧ[2]+"*"+массЗнчСтрокиТЧ[3]+"*"+ массЗнчСтрокиТЧ[4]+ "*"+массЗнчСтрокиТЧ[5]+ "*"+массЗнчСтрокиТЧ[6]+ "*"+массЗнчСтрокиТЧ[7]); Табл.InsertParagraphAfter(); КонецЦикла; Табл.ConvertToTable("*"); //Происходит конвертация строки в таблицу //не нравятся звездочки - используйте другой символ Док.Tables(1).AutoFormat(1); ПечатныйНомер = "-"+Формат(ТекущаяДата(),"ДФ=yyyy.MM.dd")+"-"+Формат(ДатаОтчета,"ДФ=yyyy.MM.dd"); Файл = КаталогВременныхФайлов() + "" + ПечатныйНомер + ".doc"; Док.SaveAs(Файл); Док.Close(0); //МассивДокументов.Добавить(Файл); //добавлял в массив путь к файлу и после всех манипуляций открывал каждый файл ЗапуститьПриложение("""" + Файл + """"); Исключение Сообщить(ОписаниеОшибки()); Word.Quit(); КонецПопытки; КонецПроцедуры
Код создания таблицы с наследуемым форматом.
Процедура СоздатьПример2(Кнопка) НовоеНапоминание = ПолучитьМакет("Пример2"); Массив = Новый Массив(5);//добавим 4 строки MsWord = НовоеНапоминание.Получить(); //макет является ActiveDocwment с загруженым в него Word-файлом Попытка MsWord.Application.Visible = 0; Word = MsWord.Application; Док=Word.Documents(1); Док.Activate(); Если Массив.Количество()>1 Тогда //Переместиться вниз на 10 строк от начала документа Word.Selection.MoveDown(,10); //10 строка - первая строка таблицы //назад на 1 символ (окончание строки таблицы) Word.Selection.MoveLeft(,1); //кво документов которые необходимо забить в табличную часть Word.Selection.InsertRows(Массив.Количество()-1); Word.Selection.MoveLeft(,1); Для й = 11 по Массив.Количество()+9 Цикл ЗаполнитьСтрокуТЧ(0,Word); Word.Selection.MoveRight(,1); КонецЦикла; КонецЕсли; ПечатныйНомер = "-"+Формат(ТекущаяДата(),"ДФ=yyyy.MM.dd")+"-"+Формат(ДатаОтчета,"ДФ=yyyy.MM.dd"); //Таблицу заполнять не буду, только шапку Замена = Док.Content.Find; Замена.Execute("", Ложь, Истина, Ложь, , , Истина, , Ложь, "ООО 'Пупкин inc.'"); Замена = Док.Content.Find; Замена.Execute("", Ложь, Истина, Ложь, , , Истина, , Ложь, Формат(ТекущаяДата(),"Л=uk; ДЛФ=D")); Замена = Док.Content.Find; Замена.Execute("", Ложь, Истина, Ложь, , , Истина, , Ложь, ПечатныйНомер ); Файл = КаталогВременныхФайлов() + "" + ПечатныйНомер + ".doc"; Док.SaveAs(Файл); Док.Close(0); //МассивДокументов.Добавить(Файл); //добавлял в массив путь к файлу и после всех манипуляций открывал каждый файл ЗапуститьПриложение("""" + Файл + """"); Исключение Сообщить(ОписаниеОшибки()); Word.Quit(); КонецПопытки; КонецПроцедуры Процедура ЗаполнитьСтрокуТЧ(знчЭл,Word) Если знчЭл массЗнчСтрокиТЧ.Количество()-1 Тогда текЭлем = массЗнчСтрокиТЧ[знчЭл]; Rng = Word.Selection.Range; Rng.InsertAfter(текЭлем); ДлинаЗнч = СтрДлина(текЭлем)+1; Word.Selection.MoveRight(,ДлинаЗнч); Если знчЭл < массЗнчСтрокиТЧ.Количество()-1 Тогда знчЭл = знчЭл + 1; ЗаполнитьСтрокуТЧ(знчЭл,Word); КонецЕсли; КонецЕсли; КонецПроцедуры
0
1С 8.x : Печать табличной части документа в Word’e
Вот пример кода создания и заполнения таблиц(пример для 7.7, в 8.х заменить первую строку на МСВорд Новый COMОбъект(«Word.Application»)):
Код 1C v 7.x
МСВорд = СоздатьОбъект("Word.Application");
Документ = МСВорд.Documents;
Документ.Add();
Документ = МСВорд.ActiveDocument();
Документ.Paragraphs.Add();
Диапазон = Документ.Paragraphs(Документ.Paragraphs.Count()).Range;
//Добавим таблицу фиксированного размера 3х2
Документ.Tables.Add(Диапазон,3,2);
Документ.Tables(1).Range.S_elect();
Выбор = МСВорд.S_election();
Выбор.Style = "Сетка таблицы";
//Установим ширину обоих колонок по 8 см
Документ.Tables(1).Columns(1).Width= МСВорд.CentimetersToPoints(8);
Документ.Tables(1).Columns(2).Width= МСВорд.CentimetersToPoints(8);
//Заполнение
Документ.Tables(1).Cell(1,1).Range.Text = "Это первая сирока, первая колонка";
Документ.Tables(1).Cell(2,1).Range.Text = "";
Документ.Tables(1).Cell(3,1).Range.Text = "";
Документ.Tables(1).Cell(1,2).Range.Text = "";
Документ.Tables(1).Cell(2,2).Range.Text = "";
Документ.Tables(1).Cell(3,2).Range.Text = "Это третья строка, вторая колонка";
//Добавим таблицу с произвольным количеством строк, для примера возьмем 4 колонки
//Сначала выведем заголовок таблицы
Документ.Paragraphs.Add();
Диапазон = Документ.Paragraphs(Документ.Paragraphs.Count()).Range;
Документ.Tables.Add(Диапазон,1,4);
Документ.Tables(2).Range.S_elect();
Выбор = МСВорд.S_election();
Выбор.Style = "Сетка таблицы";
Выбор.Rows.AllowBreakAcrossPages = 0;
//Зададим ширину колонок
Документ.Tables(2).Columns(1).Width= МСВорд.CentimetersToPoints(2);
Документ.Tables(2).Columns(2).Width= МСВорд.CentimetersToPoints(4);
Документ.Tables(2).Columns(3).Width= МСВорд.CentimetersToPoints(4);
Документ.Tables(2).Columns(4).Width= МСВорд.CentimetersToPoints(10);
//Заполнение шапки таблицы
Документ.Tables(2).Cell(1,1).Range.Paragraphs(1).Alignment = 1;
Документ.Tables(2).Cell(1,1).Range.Text = "№";
Документ.Tables(2).Cell(1,2).Range.Paragraphs(1).Alignment = 1;
Документ.Tables(2).Cell(1,2).Range.Text = "Колонка 2";
Документ.Tables(2).Cell(1,3).Range.Paragraphs(1).Alignment = 1;
Документ.Tables(2).Cell(1,3).Range.Text = "Колонка 3";
Документ.Tables(2).Cell(1,4).Range.Paragraphs(1).Alignment = 1;
Документ.Tables(2).Cell(1,4).Range.Text = "Примечание";
//Для документа можно так цикл организовать:
//Предположим, что Док - это документ, тогда
Для А =1 По Док.КоличествоСтрок() Цикл
Док.ПолучитьСтрокуПоНомеру(А);
Выбор.I_nsertRowsBelow(1);
Документ.Tables(2).Cell(А+1,1).Range.Text = Строка(А);//номер строки
Документ.Tables(2).Cell(А+1,2).Range.Text = Док.РеквизитТабличнойЧастиДокумента1;
Документ.Tables(2).Cell(А+1,3).Range.Text = Док.РеквизитТабличнойЧастиДокумента2;
Документ.Tables(2).Cell(А+1,4).Range.Text = Док.РеквизитТабличнойЧастиДокумента3;
КонецЦикла;
//или выведем таблицу по таблице значений
Для А = 1 По ТЗ.КоличествоСтрок() Цикл
//Добавим строку в таблицу
Выбор.I_nsertRowsBelow(1);
Документ.Tables(2).Cell(А+1,1).Range.Text = Строка(А);//номер строки
Документ.Tables(2).Cell(А+1,2).Range.Text = ТЗ.ПолучитьЗначение(А,1);
Документ.Tables(2).Cell(А+1,3).Range.Text = ТЗ.ПолучитьЗначение(А,2);
Документ.Tables(2).Cell(А+1,4).Range.Text = ТЗ.ПолучитьЗначение(А,3);
КонецЦикла;
//Запишем Документ
Документ.SaveAs("ПутьИИмяДокумента",0);
Документ.Close();
ТЗ — это таблица значений.
Для документа можно так цикл организовать:
Предположим, что Док — это документ, тогда
Код 1C v 8.2 УП
Для А =1 По Док.КоличествоСтрок() Цикл
Док.ПолучитьСтрокуПоНомеру(А);
Выбор.I_nsertRowsBelow(1);
Документ.Tables(2).Cell(А+1,1).Range.Text = Строка(А);//номер строки
Документ.Tables(2).Cell(А+1,2).Range.Text = Док.РеквизитТабличнойЧастиДокумента1;
Документ.Tables(2).Cell(А+1,3).Range.Text = Док.РеквизитТабличнойЧастиДокумента2;
Документ.Tables(2).Cell(А+1,4).Range.Text = Док.РеквизитТабличнойЧастиДокумента3;
КонецЦикла;
1 — 26.12.13 — 17:30
Код
Процедура ОсновныеДействияФормыПеч(Кнопка)
// Табличная часть заявителей
ТЧДок=ТабличнаяЧастьСписокЗаявителей.Выгрузить();
//
Директор=СокрЛП(Справочники.СправочникРуководство.НайтиПоКоду(«000000001»));
ФИОВЛицеДиректора=СокрЛП(Справочники.СправочникРуководство.НайтиПоКоду(«000000001»).ФИОВЛице);
ДолжностьДиректораМП=СокрЛП(Справочники.СправочникРуководство.НайтиПоКоду(«000000001»).Должность);
ДолжностьВЛице=СокрЛП(Справочники.СправочникРуководство.НайтиПоКоду(«000000001»).ДолжностьВЛице);
Договор = Документы.ТехническиеУсловияФизЛиц.ПолучитьМакет(«Договор»);
MSWord = Договор.Получить();
Попытка
Документ = MSWord.Application.Documents(1);
Документ.Activate();
//Шапка Документа
Замена = Документ.Content.Find;
Замена.Execute(«[Номер]»,Ложь, Истина, Ложь, , , Истина, , Ложь, Номер);
Замена = Документ.Content.Find;
Замена.Execute(«[ДолжностьВЛице]»,Ложь, Истина, Ложь, , , Истина, , Ложь, ДолжностьВЛице);
Замена = Документ.Content.Find;
Замена.Execute(«[ФИОВЛицеДиректора]»,Ложь, Истина, Ложь, , , Истина, , Ложь, ФИОВЛицеДиректора);
//Начало Вывода ТабЧасти в Word
Для Каждого ТекСтр ИЗ ТЧДок Цикл
ФИОЗаявителя1=СокрЛП(ТекСтр.ФИОЗаявителя);
ПаспортС1=СокрЛП(ТекСтр.ПаспортСерия);
ПаспортН1=СокрЛП(ТекСтр.ПаспортНомер);
ПаспортК1=СокрЛП(ТекСтр.ПаспортКемВыдан);
ПаспортД1=СокрЛП(ТекСтр.ПаспортДатаВыдачи);
Адрес1=СокрЛП(ТекСтр.РегистрацияГород);
Документ.Content.Find.Execute(«[ПечЗаявителя]»,Ложь, Истина, Ложь, , , Истина, ,Ложь,ФИОЗаявителя1);
Документ.Content.Find.Execute(«[ПечТекст]»,Ложь,Истина,Ложь,,,Истина,,Ложь,» именуемый/-ая в дальнейшем «Заявитель» паспорт серия»);
Документ.Content.Find.Execute(«[ПечТекст1]»,Ложь,Истина,Ложь,,,Истина,,Ложь,ПаспортС1+» № «);
Документ.Content.Find.Execute(«[ПечТекст2]»,Ложь,Истина,Ложь,,,Истина,,Ложь,ПаспортН1+» выдан «);
Документ.Content.Find.Execute(«[ПечТекст3]»,Ложь,Истина,Ложь,,,Истина,,Ложь,ПаспортК1+» «+ПаспортД1+»г.»);
Документ.Content.Find.Execute(«[ПечТекст4]»,Ложь,Истина,Ложь,,,Истина,,Ложь,»зарегистрированный/-ая по адресу:»+Адрес1);
КонецЦикла;
MSWord.Application.Visible = Истина;
MSWord.Activate();
Исключение
Сообщить(ОписаниеОшибки());
MSWord.Application.Quit();
КонецПопытки;
КонецПроцедуры
Выводит только первую строку ТЧ документа
7 — 28.12.13 — 14:05
Нашел на этом форуме и получилось в шаблоне Документа ActiveDocumet вставить закладку (выбрать *Положение и *Невидимый)
ТабДок=Новый ТабличныйДокумент;
// Табличная часть заявителей
ТабДок=ТабличнаяЧастьСписокЗаявителей.Выгрузить();
//
Директор=СокрЛП(Справочники.СправочникРуководство.НайтиПоКоду(«000000001»));
ФИОВЛицеДиректора=СокрЛП(Справочники.СправочникРуководство.НайтиПоКоду(«000000001»).ФИОВЛице);
ДолжностьДиректораМП=СокрЛП(Справочники.СправочникРуководство.НайтиПоКоду(«000000001»).Должность);
ДолжностьВЛице=СокрЛП(Справочники.СправочникРуководство.НайтиПоКоду(«000000001»).ДолжностьВЛице);
Договор = Документы.ТехническиеУсловияФизЛиц.ПолучитьМакет(«Договор»);
//MSWord = Договор.Получить();
Попытка
MSWord = Договор.Получить();
Документ = MSWord.Application.Documents(1);
Документ.Activate();
//Шапка Документа
Замена = Документ.Content.Find;
Замена.Execute(«[Номер]»,Ложь, Истина, Ложь, , , Истина, , Ложь, Номер);
Замена = Документ.Content.Find;
Замена.Execute(«[ДолжностьВЛице]»,Ложь, Истина, Ложь, , , Истина, , Ложь, ДолжностьВЛице);
Замена = Документ.Content.Find;
Замена.Execute(«[ФИОВЛицеДиректора]»,Ложь, Истина, Ложь, , , Истина, , Ложь, ФИОВЛицеДиректора);
//Начало Вывода ТабЧасти в Word
Для Каждого ТекСтр ИЗ ТабДок Цикл
ФИОЗаявителя1=СокрЛП(ТекСтр.ФИОЗаявителя);
ПаспортС1=СокрЛП(ТекСтр.ПаспортСерия);
ПаспортН1=СокрЛП(ТекСтр.ПаспортНомер);
ПаспортК1=СокрЛП(ТекСтр.ПаспортКемВыдан);
ПаспортД1=ТекСтр.ПаспортДатаВыдачи;
Адрес1=СокрЛП(ТекСтр.РегистрацияГород);
MSWord.ActiveWindow.Selection.GoTo(-1, , ,»Начало»);// Закладка (-1 — позиция начало вывода перед закладкой
MSWord.ActiveWindow.Selection.TypeText(ФИОЗаявителя1);
MSWord.ActiveWindow.Selection.TypeText(» именуемый/-ая в дальнейшем «Заявитель» паспорт серия»);
MSWord.ActiveWindow.Selection.TypeText(ПаспортС1+» № «);
MSWord.ActiveWindow.Selection.TypeText(ПаспортН1+» выдан «);
MSWord.ActiveWindow.Selection.TypeText(ПаспортК1+» выдан «+ПаспортД1+»г.»);
MSWord.ActiveWindow.Selection.TypeText(«зарегистрированный/-ая по адресу: «);
MSWord.ActiveWindow.Selection.TypeParagraph(); // переход на следующую строку
КонецЦикла;
MSWord.Application.Visible = Истина;
MSWord.Activate();
Исключение
Сообщить(ОписаниеОшибки());
MSWord.Application.Quit();
КонецПопытки;
В предыдущей заметке «Использование шаблонов Word в 1С» был показан простой способ, как используя механизмы 1С и документа Word в качестве шаблона, можно создать печатную форму для вывода данных. В текущей заметке «1с word шаблон» будет показан один из способов, как можно реализовать заполнение таблиц в шаблоне Word.
Для примера использовался шаблон Word следующего вида:
1с word шаблон — Заполнение таблиц в шаблоне Word — Шаблон
Как видно из шаблона, закладка «Таблица1» является указателем на начало таблицы и служит для позиционирования выделения.
Теперь непосредственно сам способ, для его реализации использовалась внешняя обработка, в модуле формы которой, описана лишь одна процедура «ПриОткрытии(Отказ)»:
&НаКлиенте Процедура ПриОткрытии(Отказ) //Попытка создать COM объект Попытка ОбъектВорд = Новый COMОбъект("Word.Application"); Исключение Сообщить("Ошибка при запуске Microsoft Word: " + ОписаниеОшибки(), СтатусСообщения.Внимание); КонецПопытки; //Путь к шаблону ОбъектВорд.Documents.Add("C:UsersКонстантинDesktopШаблон.docx"); ШаблонВорд = ОбъектВорд.ActiveDocument; //Заполняем первую таблицу Если ШаблонВорд.Bookmarks.Exists("Таблица1") Тогда //Выделяем обязательную закладку начала таблицы ШаблонВорд.Bookmarks("Таблица1").Select(); //Перемещаемся вниз, выделяем строку таблицы и копируем ее в буфер обмена ШаблонВорд.Application.Selection.MoveDown(); ШаблонВорд.Application.Selection.SelectRow(); ШаблонВорд.Application.Selection.Copy(); Для Счетчик = 1 По 10 Цикл //Заменяем значения ШаблонВорд.Application.Selection.Find.Execute("Номер" ,,,,,,,,,Счетчик,2); ШаблонВорд.Application.Selection.Find.Execute("ЗначениеКолонки1" ,,,,,,,,,Счетчик+10,2); //Последний параметр поиска пустой ШаблонВорд.Application.Selection.Find.Execute("ЗначениеКолонки2" ,,,,,,,,,Счетчик+100,); //Перемещаемся вниз, вставляем из буфера обмена строку ШаблонВорд.Application.Selection.MoveDown(); ШаблонВорд.Application.Selection.Paste(); //Перемещаемся вверх и выделяем строку для замены значений ШаблонВорд.Application.Selection.MoveUp(); ШаблонВорд.Application.Selection.SelectRow(); КонецЦикла; //Вырезаем лишнюю строку ШаблонВорд.Application.Selection.Cut(); //Скрываем обязательную закладку начала таблицы ШаблонВорд.Bookmarks("Таблица1").Select(); ШаблонВорд.Application.Selection.TypeText(" "); КонецЕсли; ОбъектВорд.Application.Visible = Истина; ОбъектВорд.Activate(); //Закрытие документа //ОбъектВорд.Application.Quit(); КонецПроцедуры
Как видно из кода процедуры, сначала находим закладку, выделяем и копируем строку таблицы находящуюся ниже, после заменяем текст на значения и вставляем скопированную строку. Результат работы внешней обработки 1С «Заполнение таблиц в шаблоне Word»:
1с word шаблон — Заполнение таблиц в шаблоне Word — Результат
Скачать файл обработки 1С и шаблона Word.
ВНИМАНИЕ! При использовании кодов описанных ниже, уберите символ _
Давайте рассмотрим на примерах как это делается! =) Мне известно 2 способа:
1. Путем замены шаблонного текста в макете Word-а.
2. Путем вставки текста с помощью закладок в Word-е,
В первом случае сразу скажу, что длина строки передаваемая в функцию замены, довольно небольшая 255 символов, да и расстановка шаблонных выражений в макете Word занимает довольно много времени. Через процедуру Content.Find.Execute.
Во втором случае длина, насколько мне известно неограниченна, также «воськаться» с закладками намного быстрее и удобнее, чем расставлять шаблонный текст. Используя Bookmarks().S_elect(). Поэтому давайте на коде рассмотрим второй пример.
И так, для начала необходимо добавить Word макет к документу. Добавляем макет с помощью конструктора макетов указав «Active document» и выбрав соответствующий макет.
Называем его «Акт». Открываем макет в 1С-ке, ставим курсор в нужном месте, переходим в меню «Вставка» закладка нажимаем добавить закладку к примеру у меня это НарушенияТекст
Теперь кидаем на форму документа кнопку «Сформировать» и по нажатию на нее пишем код который открывает наш макет Word ищем закладку по имени и вставляет туда текст:
Код 1C v 8.х
//инициализация часть 1
СсылкаМакет = ПолучитьМакет(Акт);
MSWord = СсылкаМакет.Получить();
Попытка
СсылкаМакет = MSWord.Application.Documents(1);
СсылкаМакет.Activate();
//выгружаем табличную часть с нарушениями в строку часть 2
str = Новый COMОбъект(ADODB.Stream);
str.Open();
СтрочкаТаблицы = ЭлементыФормы.Нарушения.ТекущиеДанные;
Для Каждого СтрочкаТаблицы Из Нарушения Цикл
str.WriteText( + СтрочкаТаблицы.Описание + Нарушены требования СНИПФЗГОСТ: + СтрочкаТаблицы.СНИПФЗГОСТ + Статья: + СтрочкаТаблицы.ЧастьСтатья + Символ(13),0);
КонецЦикла;
str.Position = 0;
НарушенияТекст = str.readText();
//вставляем в закладку текст с нарушениями часть 3
MSWord.Bookmarks(НарушенияТекст).S_elect();
MSWord.Application.S_election.TypeText(НарушенияТекст);
//открыть Word часть 4
СсылкаМакет.Application.Visible = Истина;
СсылкаМакет.Activate();
Исключение
//если ошибка
Сообщить(ОписаниеОшибки());
MSWord.Application.Quit();
КонецПопытки;
Это пример вывода множества строчек из табличной части одной строкой, если нужно просто выгрузить какой-то реквизит то можно пропустить часть 2 и перейти к части 3.
Для выгрузки табличной части в форме таблицы можно использовать функцию автоформата, примеру код выгрузки табличной части документа «Предписание»:
Код 1C v 8.х
Word = MSWord.Application;
Документ = Word.ActiveDocument();
//Переместиться вниз на 22 строк
Word.S_election.MoveDown(,22);
Документ.Paragraphs.Add();
//подготовка таблицы:
Rng = Word.S_election.Range;
//Формируем заголовок:
Rng.I_nsertAfter(№ п/п*Установленные нарушения и меры по их устранению*Основания);
Rng.I_nsertParagraphAfter();
//сама таблица
СтрочкаТаблицы = ЭлементыФормы.НарушенияПредписание.ТекущиеДанные;
Для Каждого СтрочкаТаблицы из НарушенияПредписание Цикл
Rng.I_nsertAfter(Строка(СтрочкаТаблицы.НомерСтроки)+*+СтрочкаТаблицы.Описание + ; + СтрочкаТаблицы.Предписание +* + СтрочкаТаблицы.СНИПФЗГОСТ + + СтрочкаТаблицы.ЧастьСтатья);
Rng.I_nsertParagraphAfter();
КонецЦикла;
Rng.ConvertToTable(*);
Документ.Tables(1).AutoFormat(17); //номер таблицы в шаблоне
Word.Visible = Истина;
Ну вот и все =)
Автор: saylolpls
Еще способ Active document
В Конфигураторе Макеты — правый клик — Добавить
Тип макета: Active document
Создать новый — Документ Microsoft Word
Меню Вставка — Поле — Автоматизация — DocVariable
Написать имя поля в графе «Новое имя:» ДатаПриказа
В модуле формы документа создаем кнопку, и в ее обработчике пишем:
Код 1C v 8.х
Процедура ОсновныеДействияФормыWord(Кнопка)
АктивныйДокумент = ПолучитьМакет("Макет");
КомОбъект = АктивныйДокумент.Получить();
КомОбъект.Application.Visible=1;
КомОбъект.Variables.Item("ДатаПриказа").Value="24.01.2007";
КомОбъект.Fields.UpD ate();
КомОбъект.PrintOut(); //распечатать документ
//Ожидание окончания отправки на печать...
Пока objWord.Application.BackgroundPrintingStatus<>0 Цикл
Предупреждение("Ожидание",1);
КонецЦикла;
КомОбъект.Application.Quit(); //закрыть Word
КомОбъект = 0;
КонецПроцедуры
2) добавляем не поле, а Закладку
Меню Вставка — Закладка и далее указываем ее имя («ИмяЗакл»)
Код 1C v 8.х
Процедура ОсновныеДействияФормыWord(Кнопка)
АктивныйДокумент = ПолучитьМакет("Макет");
КомОбъект = АктивныйДокумент.Получить();
КомОбъект.Application.Visible=1;
КомОбъект.Bookmarks(СокрЛП("ИмяЗакл")).S_elect();
КомОбъект.Application.S_election.TypeText(СокрЛП("тест проверка"));
КонецПроцедуры
Информация взята с сайта http://helpf.pro