|
Работа с таблицей Word из 1С | ☑ | ||
---|---|---|---|---|
0
al_zzz
08.04.15
✎
11:18
|
100500-тая тема на данную тему.
1. Не могу сообразить, как заполнить таблицу такого вида в шаблоне Word программно: http://snap.ashampoo.com/1EVkuilx Код использую такой: Таблица = MSWord.ActiveDocument.Range().Tables.Item(1); НСтр = 2; Пока ВыборкаТовары.Следующий() Цикл Если НСтр > 2 Тогда //MSWord.ActiveDocument.ActiveWindow.Selection.InsertRowsBelow(1); //Таблица.InsertRowsBelow(1); Таблица.Rows.Add(); КонецЕсли; Таблица.Cell(НСтр,1).Range().InsertAfter(СокрЛП(НСтр-1)); //НомСтр Таблица.Cell(НСтр,2).Range().InsertAfter(СокрЛП(ВыборкаТовары.Наименование)); Таблица.Cell(НСтр,3).Range().InsertAfter(СокрЛП(ВыборкаТовары.Количество)); Таблица.Cell(НСтр,4).Range().InsertAfter(СокрЛП(ВыборкаТовары.Цена)); Таблица.Cell(НСтр,5).Range().InsertAfter(СокрЛП(Формат(ВыборкаТовары.Сумма-ВыборкаТовары.Сумма*ВыборкаТовары.ПроцентСкидкиНаценки/100,"ЧЦ=15; ЧДЦ=2")));//СуммаБезСкидки Таблица.Cell(НСтр,6).Range().InsertAfter(СокрЛП(ВыборкаТовары.ПроцентСкидкиНаценки)); Таблица.Cell(НСтр,7).Range().InsertAfter(СокрЛП(ВыборкаТовары.Сумма)); СуммаСкидки = СуммаСкидки + ВыборкаТовары.Сумма*ВыборкаТовары.ПроцентСкидкиНаценки/100; Итого = Итого + ВыборкаТовары.Сумма; НСтр = НСтр + 1; КонецЦикла; Но, как только доходит до 3-ей строки - происходит ошибка. Очевидно, что запись происходит в существующие строки таблицы, а мне надо вставлять строки с нужным форматированием. Как это сделать? 1. И не могу найти пример, как вывести картинку в таблицу Word: http://snap.ashampoo.com/N9vXzhKf Подскажите, как сделать сие? Спасибо! |
|||
1
al_zzz
08.04.15
✎
11:32
|
1. Сделал так пока - разделил таблицу на две. Но при выводе строка между ними. Некрасиво получается.
|
|||
2
anatoly
08.04.15
✎
11:48
|
на ИС есть как минимум 2 обработки для печати по шаблонам ворд с таблицами - обе проверял, все работает.
правда без вставки картинок... |
|||
3
DrShad
08.04.15
✎
11:53
|
(1) сделай шрифт в промежуточной строке 1
|
|||
4
DrShad
08.04.15
✎
11:53
|
а вообще я таблицу заполнял через шаблоны текста
|
|||
5
al_zzz
08.04.15
✎
12:09
|
(3) Вот это уже получше. Теперь бы ещё с вставкой картинок разобраться...
|
|||
6
DrShad
08.04.15
✎
12:14
|
(5) ну картинки не вставлял, соррь
с удовольствием узнаю как это сделать |
|||
7
al_zzz
08.04.15
✎
13:22
|
Нашел вот здесь: http://www.itland.ru/forum/index.php?showtopic=19216
такую процедуру: Документ.Tables.Add( Selection.Range(), КоличествоСтрок+1, 3, 1, 1); Selection.Tables(1).Rows.AllowBreakAcrossPages = False; Selection.Tables(1).Rows.AllowBreakAcrossPages = False; //заполняем шапку Selection.Font.Bold = 1; Selection.ParagraphFormat.Alignment = 1; Selection.TypeText("Изображение"); Selection.MoveRight (); Selection.Font.Bold = 1; Selection.ParagraphFormat.Alignment = 1; Selection.TypeText("Артикул"); Selection.MoveRight (); Selection.Font.Bold = 1; Selection.ParagraphFormat.Alignment = 1; Selection.TypeText("Номенклатура"); Selection.MoveRight (1,2); Таблица = Документ.Tables.Item(1); ИндексСтроки = 0; Пока Выборка.Следующий() Цикл Попытка ИндексСтроки=ИндексСтроки+1; Состояние ("Обрабатывает элемент "+ИндексСтроки+" из "+КоличествоСтрок); Если НЕ Выборка.ОсновноеИзображениеХранилище=Null Тогда СоздатьВременнуюКартинку(Выборка.ОсновноеИзображениеХранилище); Selection.InlineShapes.AddPicture( "C:\TempImg.Jpeg", False,//LinkToFile True//SaveWithDocument ); КонецЕсли; Selection.MoveRight (); Selection.Range.Cells.VerticalAlignment=1; Если Выборка.Артикул=Null Тогда Арт = ""; Иначе Арт = Строка(Выборка.Артикул); КонецЕсли; Selection.TypeText(Арт); Selection.MoveRight (); Selection.Range.Cells.VerticalAlignment=1; Selection.TypeText(Выборка.Ссылка.Наименование); Selection.MoveRight (1,2); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецЦикла; Не знаю, будет ли она работать у меня. Переписал для своего случая вот так: Процедура ДобавитьОписаниеОборудования(Документ, Selection) тз = Новый ТаблицаЗначений; тз.Колонки.Добавить("Номенклатура"); тз.Колонки.Добавить("ПутьКФайлу"); тз.Колонки.Добавить("Описание"); Для Каждого стр из СсылкаНаОбъект.Товары Цикл Описание = стр.Номенклатура.ДополнительноеОписаниеНоменклатуры; Картинка = стр.Номенклатура.ОсновноеИзображение.Хранилище.Получить(); Если Картинка <> Неопределено Тогда Картинка.Записать(КаталогВременныхФайлов()+стр.Номенклатура.Код+".jpg"); КонецЕсли; Если ЗначениеЗаполнено(Описание) и ЗначениеЗаполнено(Картинка) Тогда ст = тз.Добавить(); ст.Номенклатура = стр.Номенклатура; ст.ПутьКФаййлу = ?(ЗначениеЗаполнено(Картинка),КаталогВременныхФайлов()+стр.Номенклатура.Код+".jpg",""); ст.Описание = Описание; КонецЕсли; КонецЦикла; Если тз.Количество()> 0 Тогда Документ.Tables.Add( Selection.Range(), КоличествоСтрок+1, 3, 1, 1); Selection.Tables(3).Rows.AllowBreakAcrossPages = False; Selection.Tables(3).Rows.AllowBreakAcrossPages = False; //заполняем шапку Selection.Font.Bold = 1; Selection.ParagraphFormat.Alignment = 1; Selection.TypeText("Изображение"); Selection.MoveRight (); Selection.Font.Bold = 1; Selection.ParagraphFormat.Alignment = 1; Selection.TypeText("Артикул"); Selection.MoveRight (); Selection.Font.Bold = 1; Selection.ParagraphFormat.Alignment = 1; Selection.TypeText("Номенклатура"); Selection.MoveRight (1,2); Таблица = Документ.Tables.Item(1); ИндексСтроки = 0; Для Каждого Выборка из тз Цикл Попытка ИндексСтроки=ИндексСтроки+1; Состояние ("Обрабатывает элемент "+ИндексСтроки+" из "+КоличествоСтрок); Если ЗначениеЗаполнено(Выборка.ПутьКФайлу) Тогда СоздатьВременнуюКартинку(Выборка.ОсновноеИзображениеХранилище); Selection.InlineShapes.AddPicture( Выборка.ПутьКФайлу, False,//LinkToFile True//SaveWithDocument ); КонецЕсли; Selection.MoveRight (); Selection.Range.Cells.VerticalAlignment=1; Если Не ЗначениеЗаполнено(Выборка.Описание) Тогда Арт = ""; Иначе Арт = Строка(Выборка.Описание); КонецЕсли; Selection.TypeText(Арт); Selection.MoveRight (); Selection.Range.Cells.VerticalAlignment=1; Selection.TypeText(Выборка.Номенклатура.Наименование); Selection.MoveRight (1,2); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецЦикла; КонецЕсли; КонецПроцедуры Непонятно, что передавать в качестве Selection... |
|||
8
al_zzz
08.04.15
✎
13:25
|
В качестве переменной "Документ" передаю MSWord.ActiveDocument.Range()
|
|||
9
al_zzz
08.04.15
✎
14:35
|
Разобрался с этим моментом - в качестве selection необходимо использовать MSWord.ActiveDocument.Range().Application.Selection.
Вывести в таблицу получилось, только в самом начале. А мне надо в конце, после строки "Описание оборудования". Как мне туда спозиционироваться? |
|||
10
al_zzz
09.04.15
✎
06:41
|
Нашел, в общем, как спозиционироваться на последнюю строку текущей страницы.
Вопрос: как спозиционироваться на последнюю строку последней заполненной страницы? И ещё один важный вопрос: как изменить размеры выводимой картинки(сейчас она выводится как есть в базе)? |
|||
11
al_zzz
09.04.15
✎
07:32
|
Всё. С позиционированием разобрался.
Осталось изменить размеры картинок. Могу сжать картинки на этапе сохранения, но этот вариант не очень меня устраивает, так как там используются скрипты, а на их исполнение не всегда у пользователя хватает прав. Как это сделать при помощи функций MS Word? |
|||
12
al_zzz
09.04.15
✎
09:02
|
Вобщем, сделал через скрипты пока.
|
|||
13
al_zzz
09.04.15
✎
09:02
|
Всем спасибо за активную помощь и обсуждение!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |