Имя: Пароль:
1C
1С v8
вывод табличной части документа в WORD.
0 mpvpes
 
26.12.13
14:56
Подскажите пожалуйста, как вывести табличную часть документа в WORD.
1 mpvpes
 
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();
    
КонецПопытки;
    
КонецПроцедуры

Выводит только первую строку ТЧ документа
2 mikecool
 
26.12.13
17:32
видимо не добавляешь строки в таблицу ворда
3 mpvpes
 
27.12.13
08:39
А как добавлять строки в таблицу ворда
4 fmrlex
 
27.12.13
08:42
(3) Блин да погугли ты. Есть пример с созданием таблички путем вывода данных через разделительный символ и отработка затем процедурки  формирования.
5 mpvpes
 
27.12.13
08:53
Что за разделительный символ, случайно не Символ.ПС
6 fmrlex
 
27.12.13
11:26
(5)Я "*" использовал
7 mpvpes
 
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();    
КонецПопытки;
8 alexei366
 
28.12.13
14:40
(7) Ну фиг знает, тут ты или смотри как в стандартной конфе сделанно или делай сам (я вот к примеру сам замутил шаблонизацию: у меня там и строки таблиц и куски текста копирует, + замутил как в 77 тоесть можно использовать различные выражения над основным объектом)
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший