![]() |
![]() |
![]() |
|
1C + Word | ☑ | ||
---|---|---|---|---|
0
ArPlus
30.10.12
✎
09:44
|
Шаблон договора в Word
Проблема такая: В шаблоне таблица со списком может быть как первая, так и двадцать первая. Как найти нужные таблицы? Что то про метки читал? Что такое? Как найти данную метку? Сейчас текст такой: ТаблКол=1; //Порядковый номер таблицы Word = Документ; Word.Application.ActiveDocument.Paragraphs.Add(); //добавляем параграф Номер=Word.Application.ActiveDocument.Paragraphs.Count(); //получаем номер параграфа КоличествоКолонок = 6; КоличествоСтрок = СсылкаНаОбъект.Товары.Количество()+2; Word.Application.ActiveDocument.Tables.add(Word.Application.ActiveDocument.Paragraphs(Номер).Range,1,КоличествоКолонок); Word.Application.ActiveDocument.Tables(таблкол).AutoFormat(16); ... И так далее. Но этот код я взял. Если переменной ТаблКол присвоить другое значение, то он находит нужную таблицу по номеру. Но какой командой, я не пойму. И мне нужно бы встать на "нужную" таблицу и уж потом определить ее номер. |
|||
1
ArPlus
30.10.12
✎
10:15
|
Вот так я ищу те места, где надо вставить таблицу:
Fnd = Документ.Content.Find; Fnd.ClearFormatting(); Fnd.Forward = -1; Fnd.Execute("{ТабЧасть}"); Если Fnd.Found=Ложь Тогда Прервать; КонецЕсли; Создаю нужную таблицу с количеством колонок: Word.Application.ActiveDocument.Tables.add(Fnd.Parent,1,КоличествоКолонок); Дальше для работы в частности задания вида (формата)таблицы, мне нужно обратиться к ее номеру (Таблкол). А как его определить? Word.Application.ActiveDocument.Tables(таблкол).AutoFormat(16); |
|||
2
ArPlus
31.10.12
✎
07:23
|
Ап
|
|||
3
ArPlus
01.11.12
✎
14:30
|
Мда..
|
|||
4
Aprobator
01.11.12
✎
14:33
|
у таблицы заголовок есть? Вот по нему и ищи.
|
|||
5
Масянька
01.11.12
✎
14:34
|
Номер таблицы (по-моему !!!) просто по счету: первая в док-те = 1 и т.д.
|
|||
6
Happy Bear
01.11.12
✎
14:34
|
(3) в чем вопросы у тебя остались? У меня так же сделано.
|
|||
7
dk
01.11.12
✎
14:37
|
(4) +1
либо в 1(2)-ю строку что-нить служебное запиши |
|||
8
Aprobator
01.11.12
✎
14:57
|
(1) кстати, так таблица то последняя не?
|
|||
9
Aprobator
01.11.12
✎
14:58
|
Word.Application.ActiveDocument.Tables.Сount вроде - тебе в помощь. Ну -1 вроде еще не заыбть надо.
|
|||
10
ArPlus
01.11.12
✎
16:16
|
Это сколько таблиц всего в файле. Но не номер последней созданой.
|
|||
11
Aprobator
01.11.12
✎
16:18
|
минус один не сделать?
|
|||
12
ArPlus
01.11.12
✎
16:20
|
В смысле?
|
|||
13
Aprobator
01.11.12
✎
16:22
|
индекс последней таблицы меньше номер на один - не?
|
|||
14
Aprobator
01.11.12
✎
16:23
|
или там нумерация от фонаря?
|
|||
15
ArPlus
01.11.12
✎
16:24
|
У меня в фапйле 4 таблицы.
Находим текст в середине. Создаю новую таблицу. Дальше, чтоб произвести с ней какие то процедуры надо указать конкреный номер. Всего таблиц получается 5, а вновь созданная 3. В бейсике пишут так: Set xTabl = Word.Application.ActiveDocument.Tables.add(Fnd.Parent,1,КоличествоКолонок) А потом с переменной xTabl проводим все процедуры. А как в 1с это проделать? Или определить номер порядковый последнего. |
|||
16
Aprobator
01.11.12
✎
16:52
|
вот млин, а тупо
ПоследняяТаблица = Word.Application.ActiveDocument.Tables.add(Fnd.Parent,1,КоличествоКолонок) не работает что ли? |
|||
17
ArPlus
01.11.12
✎
16:58
|
Нет
|
|||
18
ArPlus
01.11.12
✎
16:59
|
В данном случае это процедура, а не функция.
|
|||
19
Aprobator
01.11.12
✎
17:07
|
Returns a Table object that represents a new, blank table added to a document. Это как процедура то?
|
|||
20
Масянька
01.11.12
✎
17:11
|
(18) Ты тупо через порядковый номер таблицы пробовал?
|
|||
21
ArPlus
01.11.12
✎
17:12
|
А как не тупо?
|
|||
22
Aprobator
01.11.12
✎
17:12
|
даже если не возвращает, то
не работает что ли? |
|||
23
ArPlus
01.11.12
✎
17:14
|
ПоследнийНомер = Word.Application.ActiveDocument.Tables.Count;
Это Последняя таблица в файле, а не последняя созданная! |
|||
24
ArPlus
01.11.12
✎
17:14
|
Count = количесво
|
|||
25
Масянька
01.11.12
✎
17:14
|
// формируем файл
мWord = СоздатьОбъект("Word.Application"); мWord.Visible = 0; мNewDoc = мWord.Documents; мШаблон = СокрЛП(Строка(КаталогШаблонов + мШаблон)); мДок = мNewDoc.Add(мШаблон, 0, 0, 1); // верхний колонтитул мКолонтитул = мДок.Sections.Item(1).Headers.Item(1).Range; мКолонтитул.Find.Execute("[ПечНомерДоговора]",0,0,,,,,,,мНомерДоговора,2); мКолонтитул.Find.Execute("[ПечДатаДоговора]",0,0,,,,,,,Нрег(СокрЛП(мДатаДоговора)),2); мОбъект = мДок.Content; // подставляем значения по тексту договора - признак замены [] мОбъект.Find.Execute("[ПечНомерДоговора]",0,0,,,,,,,мНомерДоговора,2); мОбъект.Find.Execute("[ПечДатаДоговора]",0,0,,,,,,,Нрег(СокрЛП(мДатаДоговора)),2); // заполнение таблицы номенклатуры Для СчетчикЦикла = 1 По Счет.КоличествоСтрок() Цикл мОбъект.Tables(1).Rows.Add(); // добавляем строку в конец таблицы Счет.ПолучитьСтрокуПоНомеру(СчетчикЦикла); мОбъект.Tables(1).Cell(СчетчикЦикла + 2,1).Range.Text = Счет.НомерСтроки; мОбъект.Tables(1).Cell(СчетчикЦикла + 2,2).Range.Text = СокрЛП(Счет.Номенклатура.ПолнНаименование); мОбъект.Tables(1).Cell(СчетчикЦикла + 2,3).Range.Text = СокрЛП(Формат(Счет.Количество, "Ч010.2")); мОбъект.Tables(1).Cell(СчетчикЦикла + 2,4).Range.Text = Строка(Счет.Единица); мОбъект.Tables(1).Cell(СчетчикЦикла + 2,5).Range.Text = глФрм(Счет.Цена); мОбъект.Tables(1).Cell(СчетчикЦикла + 2,6).Range.Text = глФрм(Счет.СуммаНДС); мОбъект.Tables(1).Cell(СчетчикЦикла + 2,7).Range.Text = глФрм(Счет.Сумма); КонецЦикла; // итоги мОбъект.Tables(2).Cell(1,2).Range.Text = СокрЛП(Формат(Счет.Итог("Количество"), "Ч010.2")); мОбъект.Tables(2).Cell(1,5).Range.Text = глФрм(Счет.Итог("СуммаНДС")); мОбъект.Tables(2).Cell(1,6).Range.Text = глФрм(Счет.Итог("Сумма")); Код - для 7.7. Работает. |
|||
26
Aprobator
01.11.12
✎
17:15
|
(24) нумерация другая что ли - не по возрастанию идет???
|
|||
27
Aprobator
01.11.12
✎
17:15
|
типа 1, 10, 7, 8?
|
|||
28
Aprobator
01.11.12
✎
17:18
|
и ReturnValue прописано в хелпе кстати.
|
|||
29
ArPlus
01.11.12
✎
17:18
|
(25) Ну вот что там написано? Создана таблица. По скольку она ОДНА И ЕДИНСТВЕННАЯ, то и обращаемся к ней мОбъект.Tables(1). У меня же таблица создана где то по середине. Соответсвенно порядковый номер ее (По которому к ней можно обратиться) от 1 до количество таблиц в файле.
|
|||
30
ArPlus
01.11.12
✎
17:19
|
(26) По возрастанию. Но ТАБЛИЦА ПОСЛЕДНЯЯ ГДЕТО В СЕРЕДИНЕ ФАЙЛА.
|
|||
31
Aprobator
01.11.12
✎
17:19
|
что значит создана посередине?
|
|||
32
Масянька
01.11.12
✎
17:19
|
(29) Не смотрел, а жаль... Там ДВЕ таблицы.
|
|||
33
Aprobator
01.11.12
✎
17:20
|
хочешь сказать, что после создания таблиц происходит их перенумерация по положению в документе?
|
|||
34
Aprobator
01.11.12
✎
17:21
|
(32) метод Add реально добавленную таблицу не возвращает что ли?
|
|||
35
Aprobator
01.11.12
✎
17:23
|
хм прикольно: The index number represents the position of the table in the selection
|
|||
36
ArPlus
01.11.12
✎
17:23
|
(32) Ну да две. Первая и вторая с итогами. Но не больше.
(33) Разумеется. На то оно и ПО ПОЛОЖЕНИЮ В ДОКУМЕНТЕ |
|||
37
ArPlus
01.11.12
✎
17:25
|
(34) В 1С не возвращает. Или как то правильно прописать надо. Я бы при создании ID присвоил. Но Add это не позволяет.
|
|||
38
Масянька
01.11.12
✎
17:25
|
(34) У меня: уже есть шапка, а Add добавляет строки.
(36) У тебя добавляется разное кол-во таблиц? Положение этих таблиц в док-те не постоянно (после добавления)? |
|||
39
ArPlus
01.11.12
✎
17:29
|
Да. Я не знаю сколько уже есть и какая по счету будет вновь создана.
|
|||
40
Aprobator
01.11.12
✎
17:35
|
(37) пишет ошибку на строке? Имхо, как COM объект должна возвращать.
|
|||
41
Масянька
01.11.12
✎
17:35
|
(39) Сложно....
Попробуй покопаться тут http://msdn.microsoft.com/ru-ru/library/kw65a0we.aspx |
|||
42
Aprobator
01.11.12
✎
17:36
|
ну как то ты целишься, чтобы таблицу добавить. Или неизвестно после какой таблицы идет добавление?
|
|||
43
ArPlus
01.11.12
✎
17:39
|
Не известно. Я нахожу место {Таблица} и создаю на этом месте таблицу новую. Этих {Таблица} может быть сколько угодно и где угодно.
|
|||
44
Масянька
01.11.12
✎
17:41
|
(43) А зачем тебе номер табл. после того, как ты ее добавил?
|
|||
45
Happy Bear
01.11.12
✎
17:42
|
(43) и что, все {Таблица} с одинаковым содержанием?
|
|||
46
Aprobator
01.11.12
✎
17:42
|
чтобы обратится к только что добавленной таблице. Кстати, она там никакой текущей не будет?
|
|||
47
Масянька
01.11.12
✎
17:43
|
(46) Прямо клещами нужно вытаскивать.... А зачем обращаться - что ты с ней делаешь?
|
|||
48
Happy Bear
01.11.12
✎
17:44
|
myRange.Find.Execute("<ТаблицаПродажиПоДням_НДС_Вал>",True)КомОбъект.Tables.Add(myRange, 1, 7).Select();
КомОбъект.Application.Selection.TypeText("Дата"); КомОбъект.Application.Selection.MoveRight(1); КомОбъект.Application.Selection.TypeText("Оборот в рублях, вкл. НДС"); КомОбъект.Application.Selection.MoveRight(1); |
|||
49
Aprobator
01.11.12
✎
17:44
|
(47) не по адресу щипаешь )
|
|||
50
ArPlus
01.11.12
✎
17:46
|
(44)(47) Чтобы задать ей формат, добавить сроки и колонки, заполнить их... Чтоб работать с этой таблицей!
(45) Да (46) нет |
|||
51
Happy Bear
01.11.12
✎
17:47
|
(50) назови их по разному, а заполняй одинаково. пример в (48)
|
|||
52
Масянька
01.11.12
✎
17:47
|
(50) Ну, наконец-то....
А не вариант: добавлять шапку, отформатировать, добавить строки, перейти к следующей и снова: добавлять шапку, отформатировать, добавить строки, перейти к следующей и ..... |
|||
53
Aprobator
01.11.12
✎
17:48
|
пф, если все таблицы одинаковые, так и форматируй их скопом, после добавления всех.
|
|||
54
ArPlus
01.11.12
✎
17:50
|
(51) Они одинаковые. Пользователь в шаблон сам прописывает строку для поиска (<ТаблицаПродажиПоДням_НДС_Вал>)
(53) Я не знаю заранее сколько таблиц уже есть в таблице и какие они там! |
|||
55
ArPlus
01.11.12
✎
17:51
|
(52) Вариант. НО: НАДО ЗНАТЬ В КАКОЙ ТАБЛИЦЕ ЭТО СДЕЛАТЬ!
|
|||
56
Масянька
01.11.12
✎
17:52
|
Одна я - ничего не поняла?
|
|||
57
Масянька
01.11.12
✎
17:53
|
(55) опиши простыми словами сам процесс.
|
|||
58
Happy Bear
01.11.12
✎
17:56
|
(55) зачем в ворде 10 одинаковых по содержанию таблиц?
|
|||
59
ArPlus
01.11.12
✎
18:00
|
(57) см 0 и 1
|
|||
60
ArPlus
01.11.12
✎
18:02
|
(58) В шаблоне и сам договор с перечнем оказаных услуг и Акт выполненных услуг. Не суть! Пусть даже нужно вставить ОДНУ таблицу и сформировать ее где то по середине файла.
|
|||
61
Масянька
01.11.12
✎
18:02
|
(59) Посмотрела. Теперь опиши процесс.
|
|||
62
Happy Bear
01.11.12
✎
18:07
|
(60) так чем тебе (48) не подходит? как раз там и вставляется таблица
|
|||
63
ArPlus
01.11.12
✎
18:07
|
1. В шаблоне есть запись {Сюда вставить таблицу}
2. Нахожу это место и создаю таблицу. Дальше мне надо эту таблицу отформатировать, добавить строки и колонки и заполнить ячейки. Всё!!! Но для того чтоб это проделать, нужно обратиться к ПОРЯДКОВОМУ НОМЕРУ ЭТОЙ ТАБЛИЦИ В ФАЙЛЕ (Вновь созданной). Вопрос один: КАК УЗАНТЬ ПОРЯДКОВЫЙ НОМЕР ЭТОЙ ТАБЛИЦИ В ФАЙЛЕ(Вновь созданной)?!!!!!!!!!!!!!!!! |
|||
64
Happy Bear
01.11.12
✎
18:10
|
(63) через Select() ты работаешь с текущей таблицей
|
|||
65
ArPlus
01.11.12
✎
18:14
|
Я понял, но уже на
КомОбъект.Tables.AutoFormat(16); Ошибка |
|||
66
Aprobator
01.11.12
✎
18:15
|
да поштучно их перебери
|
|||
67
ArPlus
01.11.12
✎
18:19
|
(64) Вот мой код:
Word.Application.ActiveDocument.Tables.add(Fnd.Parent,1,КоличествоКолонок); Word.Application.ActiveDocument.Tables(таблкол).AutoFormat(16); Word.Application.ActiveDocument.Tables(таблкол).Rows(1).Cells(1).Range.Text = Строка("№ п/п"); //заполняем яцейки таблицы текстом Word.Application.ActiveDocument.Tables(таблкол).Rows(1).Cells(2).Range.Text = Строка("Наименование"); //заполняем яцейки таблицы текстом Word.Application.ActiveDocument.Tables(таблкол).Rows(1).Cells(3).Range.Text = Строка("Количество (шт)"); //заполняем яцейки таблицы текстом Word.Application.ActiveDocument.Tables(таблкол).Rows(1).Cells(4).Range.Text = Строка("Цена"); //заполняем яцейки таблицы текстом Word.Application.ActiveDocument.Tables(таблкол).Rows(1).Cells(5).Range.Text = Строка("Сумма НДС"); //заполняем яцейки таблицы текстом Word.Application.ActiveDocument.Tables(таблкол).Rows(1).Cells(6).Range.Text = Строка("Всего"); Как прописать тоже самое с Select()? |
|||
68
ArPlus
01.11.12
✎
18:20
|
(66) И как опредеить какая из них создана пользователем, а какая мной?
|
|||
69
dk
02.11.12
✎
08:52
|
нифига тему раздули
|
|||
70
Aprobator
02.11.12
✎
10:19
|
(69) ТС утверждает, что add не возвращает ссылку на таблицу в случае с 1С. А проверять мне лениво было.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |