| 
    
        
     
     | 
    
  | 
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С. А проверять мне лениво было.     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |