Имя: Пароль:
1C
1С v8
УФ: вывод в Word табличную часть док-та
0 dft2014
 
20.04.16
10:59
Пытаюсь через Закладки, передать табличную часть док-та в Ворд, но не получается. Подскажите, как это реализовать? Вот код:

&НаКлиенте
Процедура Отладка(Команда)
    
    Word = Новый COMОбъект("Word.Application");
    Макет = ПолучитьМакетСервер();
    ВременныйПуть = КаталогВременныхФайлов();
    ИмяВременногоФайла = временныйПуть + "gph.doc";
    Макет.Записать(ИмяВременногоФайла);
    ТекДок = Word.Documents.ADD(ИмяВременногоФайла);
    
    Данные = ПолучитьДанные(Объект.СсылкаНаОбъект);
    
    Если Данные <> Неопределено Тогда
        
        ТекДок.Bookmarks(СокрЛП("DOG_OPLAT_DATE")).Select();
        ТекДок.Application.Selection.TypeText(СокрЛП(Данные.DOG_OPLAT_DATE));    
        
        ТекДок.Bookmarks(СокрЛП("DOG_OPLAT_SUM")).Select();
        ТекДок.Application.Selection.TypeText(СокрЛП(Данные.DOG_OPLAT_SUM));    
        
        ТекДок.Fields.Update();    
        Word.Visible=Истина;
        
    КонецЕсли;
    
КонецПроцедуры


&НаСервере
Функция ПолучитьДанные(Договор)
    
    СтруктураДанных = Новый Структура("DOG_OPLAT_DATE, DOG_OPLAT_SUM");
    
    Оплаты = ПолучитьОплаты(Договор);
    Если Оплаты <> Неопределено Тогда
        //вот здесь непонятно как передавать в закладки табличную часть док-та
        //как сейчас написано - передает только последнюю строчку
        Для Каждого Элемент Из Оплаты Цикл
            СтруктураДанных.Вставить("DOG_OPLAT_DATE",  Элемент.ДатаОплаты);
            СтруктураДанных.Вставить("DOG_OPLAT_SUM",  Элемент.СуммаОплаты);
        КонецЦикла;
    КонецЕсли;
    
    Возврат СтруктураДанных;
    
КонецФункции


Функция ПолучитьОплаты(Договор) Экспорт
    
    //здесь запрос к табличной части документа    
    ТЗ = Запрос.Выполнить().Выгрузить();
    Если ТЗ.Количество()>0 Тогда
        МассивСтруктуры = Новый Массив;
        Для каждого Стр Из ТЗ Цикл
            СтруктураОплат = Новый Структура("ДатаОплаты, СуммаОплаты");
            СтруктураОплат.ДатаОплаты = Стр.ДатаОплаты;
            СтруктураОплат.СуммаОплаты = Стр.СуммаОплаты;
            МассивСтруктуры.Добавить(СтруктураОплат);
        КонецЦикла;
        Возврат (МассивСтруктуры);
    Иначе
        Возврат Неопределено;
    КонецЕсли;
    
КонецФункции
1 Fuas4
 
20.04.16
11:05
Если количество колонок заранее известно, то в шаблоне ворд делаешь табличку со строкой, а потом ее копируешь и заполняешь данными из табличной части
2 dft2014
 
20.04.16
11:14
(1) Да, кол-во колонок известно - две. А вот как в Ворд копировать и заполнять данными из ТЧ?
3 Fuas4
 
20.04.16
11:28
(2) Находишь свою таблицу в Ворде по какому нибудь признаку (перебираешь через Tables, у меня признак -в первой ячейке таблицы какой-нибудь определенный текст.
А потом тупо:
Таблица.Rows(ПерваяСтрока).Range.Copy();  // копируем текущую строку, чтобы сохранить форматирование    последующей                    
                            Таблица.Rows(Стр+1).Range.Paste(); // вставляем ранее скопированную строку,

Там, кстати, ниче не вставится, по моему, если нет второй пустой строки. Так что в шаблоне надо первую строку нормальной сделать, а вторую без границ и очень узкую. ЕЕ единственная цель - давать копировать строку. Может можно правильнее сделать, конечно, но у меня не получилось.
А  потом заполняешь:
Строка.Значение - это твоя табличная часть
Стр и Стб - это номер строки таблицы и номер столбца
Для каждого Строка2 из Строка.Значение Цикл    
                                Стб = 1;
                                Пока стб<=КоличествоСтолбцов Цикл
Яч = Таблица.Cell(Стр, Стб);
                                    ДанныеЯчейка = Яч.Range().Text;
                                    ДанныеЯчейка = СтрЗаменить(ДанныеЯчейка,"твойТекстВячейке","твоеЗначениеИзТЧ");
Таблица.Cell(Стр, Стб).Range().Text = ДанныеЯчейка;

КонецЦикла;
4 dft2014
 
20.04.16
17:39
(3) Спасибо, но мне саму табличку чертить не надо в Ворде. Надо просто строчки вывести в виде таблицы.

Например, у меня массив "СтруктураОплат" состоит из двух строк:
Первая строка: 30.10.2015 и 14380,00
Вторая строка: 18.11.2015 и 18690,00

Если пишу код ниже, то выводит в Ворд двумя строчками так:
30.10.2015 3:59:40
18.11.2015 5:11:30
Это неверно - почему суммы переводит в непонятное?

Вот кусок кода:

ТекДок.Paragraphs.Add();
Rng = Word.Selection.Range;
Rng.InsertParagraphAfter();
Для Каждого СтрочкаТаблицы Из СтруктураОплат Цикл
    Rng.InsertAfter(Дата(СтрочкаТаблицы.ДатаОплаты) + (СтрочкаТаблицы.СуммаОплаты));
    Rng.InsertParagraphAfter();
КонецЦикла;
5 ДенисЧ
 
20.04.16
17:41
потому что ты дату с числом складываешь
6 dft2014
 
20.04.16
17:45
(5) А как тогда правильно написать?
7 ДенисЧ
 
20.04.16
17:45
(6) Форматом в строки переводи
8 dft2014
 
20.04.16
17:50
(7) Написала: Rng.InsertAfter(Строка(СтрочкаТаблицы.ДатаОплаты) + Строка(СтрочкаТаблицы.СуммаОплаты));


Стал вот так выводить:
30.10.2015 0:00:0014 380
18.11.2015 0:00:0018 690
9 dft2014
 
20.04.16
18:25
Разобралась, надо было так:

Rng.InsertAfter(Строка(Формат(СтрочкаТаблицы.ДатаОплаты, "ДЛФ=DD") + Строка(СтрочкаТаблицы.СуммаОплаты)));