1с табличную часть в word

Одно дело, когда заранее известно количество строк в таблице. И решение, соответственно, тоже простое: создать в шаблоне таблицу и заполнить переменные программно.
Но вот совсем другой подход, когда количество строк или колонок неизвестно.
В этом примере продемонстрировано, как можно создать табличную часть в документе 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;
КонецЦикла;
   mpvpes

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();

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

    
КонецПроцедуры

Выводит только первую строку ТЧ документа

   mpvpes

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с 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 шаблон — Заполнение таблиц в шаблоне 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


Виртуальный 1С помощник


Еще способ 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

Like this post? Please share to your friends:
  • 1с способы чтения excel
  • 1с сохранить табличный документ в excel программно на сервере
  • 1с сохранить табличный документ в excel программно на разные листы
  • 1с сохранить табличные документы в разные листы excel
  • 1с сохранить таблицу значений в файл excel программно