Имя: Пароль:
1C
1С v8
1c ком объект, таблица, добавить строку после строки,Rows.Add
0 Domanoff26
 
29.08.13
10:13
хочу добавить в таблице строку после какой нить строки
табл.Rows.Add(начСтрока);
табл.Rows.Add(табл.Rows(начстрока));
табл.Rows.Add(табл.Rows.Item(начстрока)); - все не работает,ошибки использования, что не верно делаю?
1 Wobland
 
29.08.13
10:14
а что такое КОМОбъект?
2 Domanoff26
 
29.08.13
10:18
(1) вордовский COM объект
3 manyak
 
29.08.13
10:19
в VBA как учили код проверял?
1) запись макроса
2) проверка работоспособноси макроса
3) перенос кода в 1с
4 Domanoff26
 
29.08.13
10:28
(3) там InsertRowsBelow, он для Selection, но табл.select().InsertRowsBelow(3)не опознает метод InsertRowsBelow
5 manyak
 
29.08.13
10:33
ActiveDocument.Tables(1).Rows(4).Select
Selection.InsertRowsAbove 1
6 Domanoff26
 
29.08.13
10:37
(5) у меня уже на Rows(4) ругается, мол ошибка при вызове метода контекста, к тому же насколько я понимаю ActiveDocument.Tables(1).Rows(4).Select
Selection.InsertRowsAbove(1) если для COM?
7 Domanoff26
 
29.08.13
10:38
т е по сути я даже строку не могу получить
8 manyak
 
29.08.13
10:43
Word = Новый COMОбъект("Word.Application");
ActiveDocument.Tables(1).Rows(4).Select()
Selection.InsertRowsAbove(1)
9 manyak
 
29.08.13
10:44
Word.ActiveDocument....
10 Domanoff26
 
29.08.13
10:48
(9) говорю же Rows(4) не понимает? ошибка при вызове метода контекста, чтоне так делаю
11 manyak
 
29.08.13
10:51
Rows(4) выбирает 4-ю строку, может у тебя строки такой нет.
12 manyak
 
29.08.13
10:52
ну и не видя твоего кода 1с сложно сказать что не так.
13 Domanoff26
 
29.08.13
10:52
(11) да я на всех номерах пробывал
14 Domanoff26
 
29.08.13
10:54
Docum = WordDoc.open(имяВрФ);
табл = Docum.Tables.item(начтал1);
табл.Rows(3).Select()
Selection.InsertRowsAbove(1); и ошибка на rows
15 Domanoff26
 
29.08.13
10:57
Docum.Tables(4).Rows(3).Select().Selection.InsertRowsAbove(1) вот так ругается что Selection не является объектным типом
16 Domanoff26
 
29.08.13
11:21
Docum.Tables(4).Rows(3).Select().select() - вот это в отладчике - неопределено
17 Domanoff26
 
29.08.13
11:24
когда я просто добавлял строки в конец талицы, было без проблем, но сейчас нужно в разбивать таблицу на строки в зависимости от данных, оставляя при этом итоговую строку не измененной, может это можно как то проще сделать?
18 manyak
 
29.08.13
11:25
Word = Новый COMОбъект("Word.Application");
word.visible=1;
docum=Word.Documents.open("c:\test.docx");
docum.Tables(1).Rows(4).Select();
word.selection.InsertRowsAbove(1);
19 Domanoff26
 
29.08.13
11:45
(18) та же самая ошибка, дело не в видимости
20 manyak
 
29.08.13
11:48
мой код рабочий на 100% провереный, сделай по моему коду
21 manyak
 
29.08.13
11:49
значит у тебя нет таблиц в документе, c:\test.docx создай с одной таблицей например с 10-ю строками и проверь мой код
22 manyak
 
29.08.13
11:54
Docum = WordDoc.open(имяВрФ);
табл = Docum.Tables.item(начтал1);
сам насоздавал непойми чего наверно, индекс нетот может берешь и т.д.
23 manyak
 
29.08.13
12:01
!!!!!docum!!!!!.Tables(1).Rows(4).Select();
!!!!!word!!!!!!.selection.InsertRowsAbove(1);
selection заметь Обьект "ворда" а не документа

WordDoc.Selection.InsertRowsAbove(1);

это если у тебя все по уму выше написано что ты сюда не запостил:
WordDoc = Новый COMОбъект("Word.Application");
24 Domanoff26
 
29.08.13
12:02
docum.Tables(1).Rows(4) странно что вот так не ругается
а если сначало табл получаю docum.Tables(1), то потом ругается на Rows(4)
25 Domanoff26
 
29.08.13
12:04
хотя нет и тут ругается
26 Domanoff26
 
29.08.13
12:07
вот четко твой код, строка есть , таблица есть ругается на Rows(1) до selection !! (23)
27 manyak
 
29.08.13
12:07
(21) мой код работает с c:\test.docx
28 manyak
 
29.08.13
12:07
это вопрос
29 Domanoff26
 
29.08.13
12:09
(28) т е с doc может не работать?
30 Domanoff26
 
29.08.13
12:13
(28) расширение тоже не при чем? ясен пень что я свой адрес вставил, говорю же таблица видна, он почему то строки не видит, хотя проверял на разные
31 Domanoff26
 
29.08.13
12:15
(28) я понял кроче . там в строке есть объединенные ячейки, а как тогда вставить добавить диапазон? скопировать и вставить я знаю, но как сначало добавить его?
32 manyak
 
29.08.13
12:18
так и быть открою тайну раз до сих пор не догнал:
1) запись макроса
2) проверка работоспособноси макроса
3) перенос кода в 1с
33 manyak
 
29.08.13
12:18
любое "как" узнаешь через макрос VBA
34 Domanoff26
 
29.08.13
12:19
(32) догнал тоже самое только не с row, не знаешь почему в первый раз когда запускаю 1с и обработку заполнения, она заполняет раз в 10 дольше чем второй раз, при этом открытие ворд не настолько долгое, и после каждого заполнения оно закрывается, он что то кеширует или как?
35 manyak
 
29.08.13
12:19
там если нажать в коде на методе или свойстве F1 курилово неплохое выходит :)
36 manyak
 
29.08.13
12:22
ну везде так, даже когда просто работаешь - первый запуск приложения всегда дольше следующего
37 Domanoff26
 
29.08.13
12:24
(36) чего то прям очень намного
38 Domanoff26
 
29.08.13
12:24
юзеры будут злиться
39 manyak
 
29.08.13
12:27
попробуй:
до начала выгрузки таблицы:
Application.ScreenUpdating = False
после окончания:
Application.ScreenUpdating = true
в экселе например разнице во времени небо и земля
40 manyak
 
29.08.13
12:30
до выгрузки
WordDoc.ScreenUpdating = False;
после:
WordDoc.ScreenUpdating = True;
и сравни время
41 Domanoff26
 
29.08.13
13:06
почему то вверх вставляет а не вниз
42 Domanoff26
 
29.08.13
13:13
не на отображении тормозит. на заполнении ячеек, к тому же и раньше было когда самого дока не было видно вообще
43 Domanoff26
 
29.08.13
13:16
Docum.Range(табл.Cell(начСТрока,2).Range.Start, табл.Cell(начСТрока,7).Range.End).Select();
                word.selection.InsertRowsAbove(1);
вот это почему то вверх всталяет, а не вниз((
44 manyak
 
29.08.13
14:21
выше:
word.selection.InsertRowsAbove(1);
ниже:
word.selection.InsertRowsBelow(1);
45 Domanoff26
 
29.08.13
15:11
(44) а как можно вставить выделеный фрагмент, после конкретной строки, чтоб и количество и размер колонок соханилась, что то даже не знаю как мокрос такой записать
46 manyak
 
29.08.13
15:25
1) скопировать фрагмент
2.1) встать на след строку и нажать "вставить" - заменит строки ниже которые идут вставленным
2.2) если не надо заменять - а нужно вставить с добавлением: то добавить новых строк в кол-ве равным кол-ву в копируемом диапазоне, скопировать диапазон-фрагмент, встать на посл. строку из добавленных и нажать "вставить"
47 Domanoff26
 
29.08.13
15:46
Docum.Range(табл.Cell(3,1).Range.Start, табл.Cell(3,7).Range.End).copy();
    Docum.Range(табл.Cell(начСТрока,2).Range.Start, табл.Cell(начСТрока,5).Range.End).Select();
                word.selection.InsertRowsbelow(1);
          
                   Docum.Range(табл.Cell(начСТрока+1,1).Range.Start, табл.Cell(начСТрока+1,5).Range.End).Select();
                word.selection.paste();

оставил количество колонок 5, а я хотел чтобы он там сделал столько же колонок сколько и в копированой строке
48 Domanoff26
 
29.08.13
16:01
надо выделять всю строку но почему то Rows(1) хоть убей не хочет работать,
49 Domanoff26
 
29.08.13
16:04
ошибка отсуствует доступ к отдельным строкам по скольку таблица имеет ячейки объединенные по вертикали, но как тогда интерактивно я их выделяю?
Основная теорема систематики: Новые системы плодят новые проблемы.