Имя: Пароль:
1C
1С v8
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
даже если не возвращает, то

Word.Application.ActiveDocument.Tables.add(Fnd.Parent,1,КоличествоКолонок);
ПоследнийНомер = Word.Application.ActiveDocument.Tables.Count;
НужнаяТаблица = Word.Application.ActiveDocument.Tables.Item(ПоследнийНомер)

не работает что ли?
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
нифига тему раздули

   Ворд = СоздатьОбъект("Word.Application");
   
   Ворд.Visible = -1;
   
   Док = Ворд.Documents.Add();
   Таб1 = Док.Tables.Add(Ворд.Selection.Range, 2, 8);
   Ворд.Selection.EndKey(6);
   Ворд.Selection.TypeParagraph();
   Таб2 = Док.Tables.Add(Ворд.Selection.Range, 3, 2);

   Таб1.Rows(1).Cells(1).Range.Text = "Кол1";
   Таб1.Rows(1).Cells(2).Range.Text = "Кол2";
   Таб1.Rows(1).Cells(3).Range.Text = "Кол3";
   Таб1.Rows(1).Cells(4).Range.Text = "Кол4";
   Таб1.Rows(1).Cells(5).Range.Text = "Кол5";
   Таб1.Rows(1).Cells(6).Range.Text = "Кол6";
   Таб1.Rows(1).Cells(7).Range.Text = "Кол7";
   Таб1.Rows(1).Cells(8).Range.Text = "Кол8";
   
   Таб1.Rows(2).Cells(1).Range.Text = "таб1";
   Таб1.Rows(2).Cells(2).Range.Text = "таб1";
   Таб1.Rows(2).Cells(3).Range.Text = "таб1";
   

   Таб2.Rows(1).Cells(1).Range.Text = "Кол1";
   Таб2.Rows(1).Cells(2).Range.Text = "Кол2";

   
   Таб2.Rows(2).Cells(1).Range.Text = "таб2";
   Таб2.Rows(2).Cells(2).Range.Text = "таб2";
70 Aprobator
 
02.11.12
10:19
(69) ТС утверждает, что add не возвращает ссылку на таблицу в случае с 1С. А проверять мне лениво было.