Имя: Пароль:
1C
1С v8
MS Word. Метод или свойство SelectRow недоступны
0 Ilnazio
 
02.02.21
14:26
Произошла исключительная ситуация (MS): Метод или свойство SelectRow недоступны, потому что некоторые или все объекты не ссылаются на таблицу.

Что выяснил: При заполнении из 1с таблицы в ворде курсор переходит на следующую страницу, так как не хватает место для таблицы. И код ругается не найдя по всей видимости таблицу. Ругается на последнюю строку в цикле

Если Документ.Bookmarks.Exists("Таблица2") Тогда
            Документ.Bookmarks("Таблица2").Select();
            //Перемещаемся вниз, выделяем строку таблицы и копируем ее в буфер обмена
            Документ.Application.Selection.MoveDown();
            Документ.Application.Selection.SelectRow();
            Документ.Application.Selection.Copy();
            Для Сч = 0 по ДанныеДляЗаполненияТаблицы.Количество()-1 Цикл
                Документ.Application.Selection.Find.Execute("{НомП}" ,,,,,,,,,Строка(Сч+1),2);
                Документ.Application.Selection.Find.Execute("{НаименованиеП}" ,,,,,,,,,Строка(ДанныеДляЗаполненияТаблицы[Сч].Номенклатура),2);
                Документ.Application.Selection.Find.Execute("{СтоимостьП}" ,,,,,,,,,Строка(ДанныеДляЗаполненияТаблицы[Сч].Цена)*Строка(ДанныеДляЗаполненияТаблицы[Сч].Количество),2);
                Документ.Application.Selection.Find.Execute("{СрокП}" ,,,,,,,,,Строка(ДанныеДляЗаполненияТаблицы[Сч].Номенклатураxyz_СрокОказания),2);
                //Перемещаемся вниз, вставляем из буфера обмена строку
                Документ.Application.Selection.MoveDown();
                Документ.Application.Selection.Paste();
                //Перемещаемся вверх и выделяем строку для замены значений
                Документ.Application.Selection.MoveUp();
                Документ.Application.Selection.SelectRow();
            
            КонецЦикла;
            //Вырезаем лишнюю строку
            Документ.Application.Selection.Cut();
            //Скрываем обязательную закладку начала таблицы
            Документ.Bookmarks("Таблица2").Select();
            Документ.Application.Selection.TypeText(" ");
        КонецЕсли;
Кто сталкивался помогите пожалуйста
1 Ilnazio
 
02.02.21
14:26
Если Документ.Bookmarks.Exists("Таблица2") Тогда
            //ДанныеДляЗаполненияТаблицы = ПолучитьДанныеДляТаблицы1(СсылкаНаЗаказВМассиве);
            Документ.Bookmarks("Таблица2").Select();
            //Перемещаемся вниз, выделяем строку таблицы и копируем ее в буфер обмена
            Документ.Application.Selection.MoveDown();
            Документ.Application.Selection.SelectRow();
            Документ.Application.Selection.Copy();
            Для Сч = 0 по ДанныеДляЗаполненияТаблицы.Количество()-1 Цикл
                Документ.Application.Selection.Find.Execute("{НомП}" ,,,,,,,,,Строка(Сч+1),2);
                Документ.Application.Selection.Find.Execute("{НаименованиеП}" ,,,,,,,,,Строка(ДанныеДляЗаполненияТаблицы[Сч].Номенклатура),2);
                Документ.Application.Selection.Find.Execute("{СтоимостьП}" ,,,,,,,,,Строка(ДанныеДляЗаполненияТаблицы[Сч].Цена)*Строка(ДанныеДляЗаполненияТаблицы[Сч].Количество),2);
                Документ.Application.Selection.Find.Execute("{СрокП}" ,,,,,,,,,Строка(ДанныеДляЗаполненияТаблицы[Сч].Номенклатураxyz_СрокОказания),2);
                //Перемещаемся вниз, вставляем из буфера обмена строку
                Документ.Application.Selection.MoveDown();
                Документ.Application.Selection.Paste();
                //Перемещаемся вверх и выделяем строку для замены значений
                Документ.Application.Selection.MoveUp();
                Документ.Application.Selection.SelectRow();
            
            КонецЦикла;
            //Вырезаем лишнюю строку
            Документ.Application.Selection.Cut();
            //Скрываем обязательную закладку начала таблицы
            Документ.Bookmarks("Таблица2").Select();
            Документ.Application.Selection.TypeText(" ");
        КонецЕсли;
2 Ilnazio
 
04.02.21
15:33
up
3 МихаилМ
 
04.02.21
15:43
это методика работы с таблицами word для word2000. перепишите без Selection и Bookmarks
4 Ilnazio
 
04.02.21
16:16
(3) Спасибо за ответ, попробую. Однако встречал статьи именно с таким оформлением кода. Подкиньте пожалуйста соответствующую литературу
5 МихаилМ
 
04.02.21
17:32
6 Ilnazio
 
05.02.21
09:24
(5) Спасибо
7 Ilnazio
 
12.02.21
09:14
Временное решение - костыль.


    Для Сч = 0 по ДанныеДляЗаполненияТаблицы.Количество()-1 Цикл
                    Если Сч <>0 Тогда    
                        Документ.Application.Selection.MoveDown();
                        Документ.Application.Selection.Paste();
                        Документ.Application.Selection.MoveUp();    
                    КонецЕсли;
                    Документ.Application.Selection.Find.Execute("{НомП}" ,,,,,,,,,Строка(Сч+1),2);
                    Документ.Application.Selection.Find.Execute("{НаименованиеП}" ,,,,,,,,,Строка(ДанныеДляЗаполненияТаблицы[Сч].Номенклатура),2);
                    Документ.Application.Selection.Find.Execute("{СтоимостьП}" ,,,,,,,,,Строка(ДанныеДляЗаполненияТаблицы[Сч].Цена)*Строка(ДанныеДляЗаполненияТаблицы[Сч].Количество),2);
                    Документ.Application.Selection.Find.Execute("{СрокП}" ,,,,,,,,,Строка(ДанныеДляЗаполненияТаблицы[Сч].Номенклатураxyz_СрокОказания),2);
                    Если Сч = 0 Тогда
                        Документ.Application.Selection.MoveDown();
                    КонецЕсли;
                КонецЦикла;
8 Ilnazio
 
12.02.21
09:14
вопрос закрыт