|
УФ: вывод в 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") + Строка(СтрочкаТаблицы.СуммаОплаты))); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |