Ошибка при вызове метода контекста получить word

   darkhome

28.11.13 — 12:33

Создал в общихМакетах Макет типа ActiveDocument с расширением doc. Не получает с ним работать. Подскажите что не так. Делаю на УФ. Вот код

&НаКлиенте

Процедура Печать(Команда)

    ПолучитьМакетНаСервере(«ПФ_DOC_Договор»);

    //MSWord = Договор.Получить;

КонецПроцедуры

Процедура ПолучитьМакетНаСервере(ИмяМакета)

    Договор = ПолучитьОбщийМакет(ИмяМакета);

    MSWord = Договор.Получить;

конецпроцедуры

Выскакивает ошибка

Ошибка при вызове метода контекста (Получить)

    MSWord = Договор.Получить();

   Cube

1 — 28.11.13 — 12:34

&НаСервере забыл?

   darkhome

2 — 28.11.13 — 12:36

Если не указываешь директиву, то по умолчанию означает что код будет выполняться на сервере

   darkhome

3 — 28.11.13 — 12:37

Да я пробовал и &НаСервере и &НаСервереБезКонтекста. Все-равно не получается

   Cube

4 — 28.11.13 — 12:40

А зачем ты пишешь Получить()? Ведь у тебя это не хранилище…

   darkhome

5 — 28.11.13 — 12:43

(4) А как надо сделать что бы заработало

   Cube

6 — 28.11.13 — 12:44

MSWord = ПолучитьОбщийМакет(ИмяМакета);

не?

   darkhome

7 — 28.11.13 — 12:48

А потом как начать работать с документом что бы можно было заполнять поля в нем?

   darkhome

8 — 28.11.13 — 12:49

Я ставлю

Документ = MSWord.Application.Documents(1);

Документ.Activate();

У меня сразу выскакивает

Поле объекта не обнаружено (Application)

Документ = MSWord.Application.Documents(1);

Весь инет облазил. У всех работает. Может я что с начала не правильно делал

   Cube

9 — 28.11.13 — 12:52

(8) А ты что, заполнять его на сервере собрался?

   darkhome

10 — 28.11.13 — 12:53

Ну вроде как так надо делать.

   Cube

11 — 28.11.13 — 13:03

(10) Я уже сильно не помню причины, но я делаю через временный файл.

Код такой (у меня макет хранится в ХЗ):

&НаКлиенте

Процедура СформироватьПечатнуюФорму(ДоговорКонтрагента, Макет)

    ДанныеДляПечати = ПолучитьДанныеДляПечати(ДоговорКонтрагента, Макет);

    
    ХранилищеМакета = ДанныеДляПечати[0];

    Если ХранилищеМакета.Представление = «ХранилищеМакета» Тогда

        ИмяФайла = ПолучитьИмяВременногоФайла();

        ХранилищеМакета.Значение.Записать(ИмяФайла); //Записываем макет во временный файл.

        ДанныеДляПечати.Удалить(ХранилищеМакета);

    Иначе

        Сообщить(«Ошибка получения макета», СтатусСообщения.Внимание);

        Возврат;

    КонецЕсли;

    Попытка

        MSWord = ПолучитьCOMОбъект(, «Word.Application»);    //Если Word уже открыт, то подключаемся к нему.

    Исключение

        Попытка

            MSWord = Новый COMОбъект(«Word.Application»);    //Открываем Word.

        Исключение

            Сообщить(«Ошибка формирования печатной формы. Скорее всего на Вашем компьютере не установлен Microsoft Word.», СтатусСообщения.Внимание);

            Сообщить(ОписаниеОшибки(), СтатусСообщения.Внимание);

            Возврат;

        КонецПопытки;

    КонецПопытки;

    Документ = MSWord.Documents.Open(ИмяФайла);                //Открываем макет из временного файла.

    MSWord.Selection.WholeStory();                            //Выделяем весь документ.

    MSWord.Selection.Copy();                                //Копируем выделенное в буфер.

    Документ.Close();                                        //Закрываем документ.

    УдалитьФайлы(ИмяФайла);                                    //Удаляем временный файл.

    Документ = MSWord.Documents.Add();                        //Создаем новый документ.

    MSWord.Selection.PasteAndFormat(19);                    //Вставляем в документ содержимое из буфера с форматом исходного документа.

    MSWord.ActiveDocument.Range(0,1).Copy();                //Очищаем буфер обмена, чтоб лишних вопросов при закрытии документа не задавал.

    MSWord.Selection.HomeKey(6);                            //Переводим курсор в начало документа.

    
    //Производим заполнение заменяемых полей

    Замена = Документ.Content.Find;

    Для Каждого ЗаменяемоеПоле Из ДанныеДляПечати Цикл

        Замена.Execute(ЗаменяемоеПоле.Значение, Ложь, Истина, Ложь, , , Истина, , Ложь, ЗаменяемоеПоле.Представление, 2);

    КонецЦикла;

    
    //Проверяем, остались ли незаполненные заменяемые поля

    Если Замена.Execute(«{«) Тогда

        Сообщить(«В печатной форме «»» + СокрЛП(Макет.Наименование) + «»» заполнены не все заменяемые поля.», СтатусСообщения.Внимание);

    КонецЕсли;

    
    Документ.Saved = Истина;                                //Помечаем документ как сохраненный, чтобы при закрытии не выдавался запрос на сохранение документа

    Если Элементы.ФормаПечатьНаПринтер.Пометка Тогда

        Документ.PrintOut(Истина, , , , , , , Макет.КоличествоКопий, , , , Истина);

        Документ.Close();

    Иначе

        MSWord.Visible = Истина;

        MSWord.Activate();

    КонецЕсли;

    
КонецПроцедуры //СформироватьПечатнуюФорму()

   darkhome

12 — 28.11.13 — 13:06

(11) Спасибо. Попробую. Надеюсь заработает

   Cube

13 — 28.11.13 — 13:08

ПолучитьДанныеДляПечати() выполняется &НаСервере

   darkhome

14 — 02.12.13 — 12:03

&НаСервереБезКонтекста

Процедура ПолучитьМакетНаСервере()

    Макет = ПолучитьОбщийМакет(«ПФ_DOC_Договор»);

    Ком = Макет.Получить();

    Ком.Application.Visible = 1;

конецПроцедуры    

&НаКлиенте

Процедура Напечатать(Команда)

    Состояние(НСтр(«ru = ‘Выполняется формирование печатных форм'»));

    
    ПолучитьМакетНаСервере();

        
КонецПроцедуры

Ошибка при вызове метода контекста (Получить)

    Ком = Макет.Получить();

Что не так? Сделал как написано в книге «Профессиональная разработка в системе 1С».

В общих макетах создал .doc макет, в него скопировал содержимое документа. Пытаюсь его получить, вылетает ошибка. Помоги разобрать, как сделать через ActiveDocument

   darkhome

15 — 02.12.13 — 12:04

Тип созданного макета — ActiveDocument

   darkhome

16 — 02.12.13 — 12:06

Делаю все это во внешней обработке

   Kupogun

17 — 02.12.13 — 12:08

(14) что за ошибка?

   darkhome

18 — 02.12.13 — 12:09

Ошибка при вызове метода контекста (Получить)

    Ком = Макет.Получить();

   Kupogun

19 — 02.12.13 — 12:10

хз, попробуй так

текОбъект = ЭтаФорма.РеквизитФормыВЗначение(«Объект»);

Макет = текОбъект.ПолучитьМакет(«ПФ_DOC_Договор»);

   darkhome

20 — 02.12.13 — 12:11

(19) Делал, не получается

   Cube

21 — 02.12.13 — 12:15

(14) (18) Ты (4) Читал?

&НаСервереБезКонтекста

Процедура ПолучитьМакетНаСервере()

    Ком = ПолучитьОбщийМакет(«ПФ_DOC_Договор»);

    Ком.Application.Visible = 1;

конецПроцедуры    

&НаКлиенте

Процедура Напечатать(Команда)

    Состояние(НСтр(«ru = ‘Выполняется формирование печатных форм'»));

    ПолучитьМакетНаСервере();

КонецПроцедуры

Так работает?

   darkhome

22 — 02.12.13 — 12:17

(4) я читал

   darkhome

23 — 02.12.13 — 12:19

(21) Сделал так, выскочила другая ошибка

Поле объекта не обнаружено (Application)

    Ком.Application.Visible = 1;

Я еще раз повторюсь, делал по примеру, который приведен в книге.

   darkhome

24 — 02.12.13 — 12:20

Ну если не работает, как там приведен, вот я спрашиваю у Вас все, форумчане. Так как считаю этот форум одним из лучших по 1С, почти всегда тут можно найти решение проблем

   Cube

25 — 02.12.13 — 12:23

(23) А, точно, Получить() надо. Только что посмотрел, как раньше делал. Тогда у меня версия, что у тебя в макете что-то не то…

  

Cube

26 — 02.12.13 — 12:26

+(25) Если оставить только суть, то:

Макет = ПолучитьМакет(«Макет»);

MSWord = Макет.Получить();



Документ = MSWord.Application.Documents(1);

Документ.Activate();



MSWord.Application.Visible = Истина;

MSWord.Activate();

3 / 3 / 7

Регистрация: 21.03.2013

Сообщений: 638

1

13.12.2017, 12:05. Показов 17440. Ответов 10


Студворк — интернет-сервис помощи студентам

Добрый день, вот пытаюсь напечатать документ MSWorld в обработке, делаю по примеру, вот так

ОбработкаОбъект = РеквизитФормыВЗначение(«Объект»);
СсылкаМакет = ОбработкаОбъект.ПолучитьМакет(«Макет»);

MSWord = СсылкаМакет.Получить();// И вот тут выдает ошибку

Ошибка при вызове метода контекста (Получить)

Подскажите плз где ошибка?

http://programmist1s.ru/pechat… 8-3-i-8-2/ — вот брал отсюда

Добавлено через 22 минуты
Да, делаю это все на сервере



0



Эксперт 1С

434 / 305 / 92

Регистрация: 28.05.2014

Сообщений: 1,247

13.12.2017, 13:53

2

Владислаучык,
что в переменной СсылкаМакет ?
У макета тип ActiveDocument?

в той же статье автор пишет ещё следующее:

Скорее всего проблема в ворде или в правах системы. Он корректно установлен? Попробуйте другую версию Ворда. Ну или на крайний случай можно проделать это на другой машине.



1



3 / 3 / 7

Регистрация: 21.03.2013

Сообщений: 638

13.12.2017, 14:09

 [ТС]

3

Получение макета ActiveDocument



0



Владислаучык

3 / 3 / 7

Регистрация: 21.03.2013

Сообщений: 638

13.12.2017, 16:52

 [ТС]

4

Phil, Да, такой тип

Добавлено через 2 часа 42 минуты
И если дело в ворлде, то как тогда переделать? пробовал так

1C
1
2
3
4
5
6
7
8
9
//ВремФайл = ПолучитьИмяВременногоФайла("doc");
//  MSWord = Новый COMОбъект("Word.Application");
//MSWord.Displayalerts = 0;
//ДокументН = MSWord.Application.Documents.Add();
//ДокументН.SaveAs(ВремФайл,0);                
//MSWord.Quit();
 
//Макет = ВернутьМакет();
//MSWord = Макет.Получить();
1C
1
2
3
4
5
6
7
8
&НаСервере
Функция ВернутьМакет()
    
        
    ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
    СсылкаМакет = ОбработкаОбъект.ПолучитьМакет("Макет");
    Возврат СсылкаМакет;
КонецФункции

Так макет нельзя вернуть, а если на сервере сделать сразу, то тоже ошибка отсутствует отображение типа для ActiveDocument



0



polax

1830 / 1248 / 445

Регистрация: 16.01.2015

Сообщений: 5,458

14.12.2017, 10:25

5

Владислаучык, Вот рабочий код. Неделю назад делал ВПФ с макетом в Ворде

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
&НаСервере
Функция ПолучитьДокументВордИзМакета (ИмяМакета)
    Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
    ИмяФайла = ПолучитьИмяВременногоФайла ("doc");
    Макет.Записать (ИмяФайла);
    
    Приложение = Новый ComObject ("Word.Application");
    
    ДокументыВорда = Приложение.Documents;
    Документ = ДокументыВорда.Open (ИмяФайла);
    Документ.Activate ();
    
    Selection = Приложение.Selection;
    Selection.WholeStory ();
    Selection.Copy ();
    
    НовыйДокумент = ДокументыВорда.Add ();
    НовыйДокумент.Activate ();
    Selection = Приложение.Selection;
    Selection.WholeStory ();
    Selection.PasteAndFormat (0);
    
    Документ.Close ();
    УдалитьФайлы (ИмяФайла);
    
    Данные = Новый Структура;
    Данные.Вставить ("Приложение", Приложение);
    Данные.Вставить ("Документ", НовыйДокумент);
    
    Возврат Данные;
КонецФункции // ПолучитьДокументВордИзМакета



0



3 / 3 / 7

Регистрация: 21.03.2013

Сообщений: 638

15.12.2017, 15:15

 [ТС]

6

polax, Приложение = Новый ComObject («Word.Application»); — вот тут ошибка, Ошибка при вызове конструктора (ComObject)
Приложение = Новый ComObject («Word.Application»);
по причине:
-2147221005(0x800401F3): Недопустимая строка с указанием класса



0



1830 / 1248 / 445

Регистрация: 16.01.2015

Сообщений: 5,458

15.12.2017, 18:19

7

Владислаучык, Либо делаете не на сервере, либо на компьютере не установлен Ворд



1



1155 / 702 / 203

Регистрация: 22.04.2013

Сообщений: 5,219

Записей в блоге: 1

15.12.2017, 21:17

8

Цитата
Сообщение от polax
Посмотреть сообщение

Либо делаете не на сервере

я путаю? может наоборот — делаете на сервере?
ексель,ворд же надо открывать локально?



1



1830 / 1248 / 445

Регистрация: 16.01.2015

Сообщений: 5,458

15.12.2017, 22:24

9

Лучший ответ Сообщение было отмечено Владислаучык как решение

Решение

Владислаучык, Yulunga, не то что ошибся, а высказал неправильно. Вот здесь описано http://1clancer.ru/article/oso… ie_8.2_847



1



0 / 0 / 0

Регистрация: 06.06.2022

Сообщений: 2

15.06.2022, 11:55

10

polax, У вас есть код для Exel макета active document?



0



1830 / 1248 / 445

Регистрация: 16.01.2015

Сообщений: 5,458

15.06.2022, 15:54

11

Dfolt, Вот из моих закладок по которым делаю подобное



0



  

darkhome

28.11.13 — 12:33

Создал в общихМакетах Макет типа ActiveDocument с расширением doc. Не получает с ним работать. Подскажите что не так. Делаю на УФ. Вот код

&НаКлиенте

Процедура Печать(Команда)

    ПолучитьМакетНаСервере(«ПФ_DOC_Договор»);

    //MSWord = Договор.Получить;

КонецПроцедуры

Процедура ПолучитьМакетНаСервере(ИмяМакета)

    Договор = ПолучитьОбщийМакет(ИмяМакета);

    MSWord = Договор.Получить;

конецпроцедуры

Выскакивает ошибка

Ошибка при вызове метода контекста (Получить)

    MSWord = Договор.Получить();

  

Cube

1 — 28.11.13 — 12:34

&НаСервере забыл?

  

darkhome

2 — 28.11.13 — 12:36

Если не указываешь директиву, то по умолчанию означает что код будет выполняться на сервере

  

darkhome

3 — 28.11.13 — 12:37

Да я пробовал и &НаСервере и &НаСервереБезКонтекста. Все-равно не получается

  

Cube

4 — 28.11.13 — 12:40

А зачем ты пишешь Получить()? Ведь у тебя это не хранилище…

  

darkhome

5 — 28.11.13 — 12:43

(4) А как надо сделать что бы заработало

  

Cube

6 — 28.11.13 — 12:44

MSWord = ПолучитьОбщийМакет(ИмяМакета);

не?

  

darkhome

7 — 28.11.13 — 12:48

А потом как начать работать с документом что бы можно было заполнять поля в нем?

  

darkhome

8 — 28.11.13 — 12:49

Я ставлю

Документ = MSWord.Application.Documents(1);

Документ.Activate();

У меня сразу выскакивает

Поле объекта не обнаружено (Application)

Документ = MSWord.Application.Documents(1);

Весь инет облазил. У всех работает. Может я что с начала не правильно делал

  

Cube

9 — 28.11.13 — 12:52

(8) А ты что, заполнять его на сервере собрался?

  

darkhome

10 — 28.11.13 — 12:53

Ну вроде как так надо делать.

  

Cube

11 — 28.11.13 — 13:03

(10) Я уже сильно не помню причины, но я делаю через временный файл.

Код такой (у меня макет хранится в ХЗ):

&НаКлиенте

Процедура СформироватьПечатнуюФорму(ДоговорКонтрагента, Макет)

    ДанныеДляПечати = ПолучитьДанныеДляПечати(ДоговорКонтрагента, Макет);

    

    ХранилищеМакета = ДанныеДляПечати[0];

    Если ХранилищеМакета.Представление = «ХранилищеМакета» Тогда

        ИмяФайла = ПолучитьИмяВременногоФайла();

        ХранилищеМакета.Значение.Записать(ИмяФайла); //Записываем макет во временный файл.

        ДанныеДляПечати.Удалить(ХранилищеМакета);

    Иначе

        Сообщить(«Ошибка получения макета», СтатусСообщения.Внимание);

        Возврат;

    КонецЕсли;

    Попытка

        MSWord = ПолучитьCOMОбъект(, «Word.Application»);    //Если Word уже открыт, то подключаемся к нему.

    Исключение

        Попытка

            MSWord = Новый COMОбъект(«Word.Application»);    //Открываем Word.

        Исключение

            Сообщить(«Ошибка формирования печатной формы. Скорее всего на Вашем компьютере не установлен Microsoft Word.», СтатусСообщения.Внимание);

            Сообщить(ОписаниеОшибки(), СтатусСообщения.Внимание);

            Возврат;

        КонецПопытки;

    КонецПопытки;

    Документ = MSWord.Documents.Open(ИмяФайла);                //Открываем макет из временного файла.

    MSWord.Selection.WholeStory();                            //Выделяем весь документ.

    MSWord.Selection.Copy();                                //Копируем выделенное в буфер.

    Документ.Close();                                        //Закрываем документ.

    УдалитьФайлы(ИмяФайла);                                    //Удаляем временный файл.

    Документ = MSWord.Documents.Add();                        //Создаем новый документ.

    MSWord.Selection.PasteAndFormat(19);                    //Вставляем в документ содержимое из буфера с форматом исходного документа.

    MSWord.ActiveDocument.Range(0,1).Copy();                //Очищаем буфер обмена, чтоб лишних вопросов при закрытии документа не задавал.

    MSWord.Selection.HomeKey(6);                            //Переводим курсор в начало документа.

    

    //Производим заполнение заменяемых полей

    Замена = Документ.Content.Find;

    Для Каждого ЗаменяемоеПоле Из ДанныеДляПечати Цикл

        Замена.Execute(ЗаменяемоеПоле.Значение, Ложь, Истина, Ложь, , , Истина, , Ложь, ЗаменяемоеПоле.Представление, 2);

    КонецЦикла;

    

    //Проверяем, остались ли незаполненные заменяемые поля

    Если Замена.Execute(«{«) Тогда

        Сообщить(«В печатной форме «»» + СокрЛП(Макет.Наименование) + «»» заполнены не все заменяемые поля.», СтатусСообщения.Внимание);

    КонецЕсли;

    

    Документ.Saved = Истина;                                //Помечаем документ как сохраненный, чтобы при закрытии не выдавался запрос на сохранение документа

    Если Элементы.ФормаПечатьНаПринтер.Пометка Тогда

        Документ.PrintOut(Истина, , , , , , , Макет.КоличествоКопий, , , , Истина);

        Документ.Close();

    Иначе

        MSWord.Visible = Истина;

        MSWord.Activate();

    КонецЕсли;

    
КонецПроцедуры //СформироватьПечатнуюФорму()

  

darkhome

12 — 28.11.13 — 13:06

(11) Спасибо. Попробую. Надеюсь заработает

  

Cube

13 — 28.11.13 — 13:08

ПолучитьДанныеДляПечати() выполняется &НаСервере

  

darkhome

14 — 02.12.13 — 12:03

&НаСервереБезКонтекста

Процедура ПолучитьМакетНаСервере()

    Макет = ПолучитьОбщийМакет(«ПФ_DOC_Договор»);

    Ком = Макет.Получить();

    Ком.Application.Visible = 1;

конецПроцедуры    

&НаКлиенте

Процедура Напечатать(Команда)

    Состояние(НСтр(«ru = ‘Выполняется формирование печатных форм’»));

    
    ПолучитьМакетНаСервере();

        
КонецПроцедуры

Ошибка при вызове метода контекста (Получить)

    Ком = Макет.Получить();

Что не так? Сделал как написано в книге «Профессиональная разработка в системе 1С».

В общих макетах создал .doc макет, в него скопировал содержимое документа. Пытаюсь его получить, вылетает ошибка. Помоги разобрать, как сделать через ActiveDocument

  

darkhome

15 — 02.12.13 — 12:04

Тип созданного макета — ActiveDocument

  

darkhome

16 — 02.12.13 — 12:06

Делаю все это во внешней обработке

  

Kupogun

17 — 02.12.13 — 12:08

(14) что за ошибка?

  

darkhome

18 — 02.12.13 — 12:09

Ошибка при вызове метода контекста (Получить)

    Ком = Макет.Получить();

  

Kupogun

19 — 02.12.13 — 12:10

хз, попробуй так

текОбъект = ЭтаФорма.РеквизитФормыВЗначение(«Объект»);

Макет = текОбъект.ПолучитьМакет(«ПФ_DOC_Договор»);

  

darkhome

20 — 02.12.13 — 12:11

(19) Делал, не получается

  

Cube

21 — 02.12.13 — 12:15

(14) (18) Ты (4) Читал?

&НаСервереБезКонтекста

Процедура ПолучитьМакетНаСервере()

    Ком = ПолучитьОбщийМакет(«ПФ_DOC_Договор»);

    Ком.Application.Visible = 1;

конецПроцедуры    

&НаКлиенте

Процедура Напечатать(Команда)

    Состояние(НСтр(«ru = ‘Выполняется формирование печатных форм’»));

    ПолучитьМакетНаСервере();

КонецПроцедуры

Так работает?

  

darkhome

22 — 02.12.13 — 12:17

(4) я читал

  

darkhome

23 — 02.12.13 — 12:19

(21) Сделал так, выскочила другая ошибка

Поле объекта не обнаружено (Application)

    Ком.Application.Visible = 1;

Я еще раз повторюсь, делал по примеру, который приведен в книге.

  

darkhome

24 — 02.12.13 — 12:20

Ну если не работает, как там приведен, вот я спрашиваю у Вас все, форумчане. Так как считаю этот форум одним из лучших по 1С, почти всегда тут можно найти решение проблем

  

Cube

25 — 02.12.13 — 12:23

(23) А, точно, Получить() надо. Только что посмотрел, как раньше делал. Тогда у меня версия, что у тебя в макете что-то не то…

  

Cube

26 — 02.12.13 — 12:26

+(25) Если оставить только суть, то:

Макет = ПолучитьМакет(«Макет»);

MSWord = Макет.Получить();

Документ = MSWord.Application.Documents(1);

Документ.Activate();

MSWord.Application.Visible = Истина;

MSWord.Activate();

3 / 3 / 7

Регистрация: 21.03.2013

Сообщений: 637

1

13.12.2017, 12:05. Показов 12469. Ответов 10


Добрый день, вот пытаюсь напечатать документ MSWorld в обработке, делаю по примеру, вот так

ОбработкаОбъект = РеквизитФормыВЗначение(«Объект»);
СсылкаМакет = ОбработкаОбъект.ПолучитьМакет(«Макет»);

MSWord = СсылкаМакет.Получить();// И вот тут выдает ошибку

Ошибка при вызове метода контекста (Получить)

Подскажите плз где ошибка?

http://programmist1s.ru/pechat… 8-3-i-8-2/ — вот брал отсюда

Добавлено через 22 минуты
Да, делаю это все на сервере

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

0

Эксперт 1С

434 / 305 / 92

Регистрация: 28.05.2014

Сообщений: 1,247

13.12.2017, 13:53

2

Владислаучык,
что в переменной СсылкаМакет ?
У макета тип ActiveDocument?

в той же статье автор пишет ещё следующее:

Скорее всего проблема в ворде или в правах системы. Он корректно установлен? Попробуйте другую версию Ворда. Ну или на крайний случай можно проделать это на другой машине.

1

3 / 3 / 7

Регистрация: 21.03.2013

Сообщений: 637

13.12.2017, 14:09

 [ТС]

3

Получение макета ActiveDocument

0

Владислаучык

3 / 3 / 7

Регистрация: 21.03.2013

Сообщений: 637

13.12.2017, 16:52

 [ТС]

4

Phil, Да, такой тип

Добавлено через 2 часа 42 минуты
И если дело в ворлде, то как тогда переделать? пробовал так

1C
1
2
3
4
5
6
7
8
9
//ВремФайл = ПолучитьИмяВременногоФайла("doc");
//  MSWord = Новый COMОбъект("Word.Application");
//MSWord.Displayalerts = 0;
//ДокументН = MSWord.Application.Documents.Add();
//ДокументН.SaveAs(ВремФайл,0);                
//MSWord.Quit();
 
//Макет = ВернутьМакет();
//MSWord = Макет.Получить();
1C
1
2
3
4
5
6
7
8
&НаСервере
Функция ВернутьМакет()
    
        
    ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
    СсылкаМакет = ОбработкаОбъект.ПолучитьМакет("Макет");
    Возврат СсылкаМакет;
КонецФункции

Так макет нельзя вернуть, а если на сервере сделать сразу, то тоже ошибка отсутствует отображение типа для ActiveDocument

0

polax

1785 / 1209 / 438

Регистрация: 16.01.2015

Сообщений: 5,322

14.12.2017, 10:25

5

Владислаучык, Вот рабочий код. Неделю назад делал ВПФ с макетом в Ворде

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
&НаСервере
Функция ПолучитьДокументВордИзМакета (ИмяМакета)
    Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
    ИмяФайла = ПолучитьИмяВременногоФайла ("doc");
    Макет.Записать (ИмяФайла);
    
    Приложение = Новый ComObject ("Word.Application");
    
    ДокументыВорда = Приложение.Documents;
    Документ = ДокументыВорда.Open (ИмяФайла);
    Документ.Activate ();
    
    Selection = Приложение.Selection;
    Selection.WholeStory ();
    Selection.Copy ();
    
    НовыйДокумент = ДокументыВорда.Add ();
    НовыйДокумент.Activate ();
    Selection = Приложение.Selection;
    Selection.WholeStory ();
    Selection.PasteAndFormat (0);
    
    Документ.Close ();
    УдалитьФайлы (ИмяФайла);
    
    Данные = Новый Структура;
    Данные.Вставить ("Приложение", Приложение);
    Данные.Вставить ("Документ", НовыйДокумент);
    
    Возврат Данные;
КонецФункции // ПолучитьДокументВордИзМакета

0

3 / 3 / 7

Регистрация: 21.03.2013

Сообщений: 637

15.12.2017, 15:15

 [ТС]

6

polax, Приложение = Новый ComObject («Word.Application»); — вот тут ошибка, Ошибка при вызове конструктора (ComObject)
Приложение = Новый ComObject («Word.Application»);
по причине:
-2147221005(0x800401F3): Недопустимая строка с указанием класса

0

1785 / 1209 / 438

Регистрация: 16.01.2015

Сообщений: 5,322

15.12.2017, 18:19

7

Владислаучык, Либо делаете не на сервере, либо на компьютере не установлен Ворд

1

1117 / 671 / 195

Регистрация: 22.04.2013

Сообщений: 5,079

Записей в блоге: 1

15.12.2017, 21:17

8

Цитата
Сообщение от polax
Посмотреть сообщение

Либо делаете не на сервере

я путаю? может наоборот — делаете на сервере?
ексель,ворд же надо открывать локально?

1

1785 / 1209 / 438

Регистрация: 16.01.2015

Сообщений: 5,322

15.12.2017, 22:24

9

Лучший ответ Сообщение было отмечено Владислаучык как решение

Решение

Владислаучык, Yulunga, не то что ошибся, а высказал неправильно. Вот здесь описано http://1clancer.ru/article/oso… ie_8.2_847

1

0 / 0 / 0

Регистрация: 06.06.2022

Сообщений: 2

15.06.2022, 11:55

10

polax, У вас есть код для Exel макета active document?

0

1785 / 1209 / 438

Регистрация: 16.01.2015

Сообщений: 5,322

15.06.2022, 15:54

11

Dfolt, Вот из моих закладок по которым делаю подобное

0

Lavr
22.10.2015 13:56 Прочитано: 2848

Здравствуйте.

Импортировал word-документ в справочник «Филиал», в макет как Active document. Есть форма списка и форма элемента списка, сделал кнопку на форме элемента, при нажатии вызов процедуры:

&НаКлиенте

Макет = Справочники.Филиал.ПолучитьМакет(«Макет»).Получить();Документ = Макет.Application.Documents(1);Документ.Activate();Макет.Application.Visible = Истина;Макет.Activate();

Надо чтобы документ из макета открывался в ворде у пользователя, просто открывался без заполнения какими-либо данными из формы.

Подскажите пожалуйста, добрые специалисты, как это правильно сделать? Может вообще по другому можно, как-то проще?

Благодарю.

Yandex
Возможно, вас также заинтересует

Реклама на портале

IBReiter
22.10.2015 14:40 Ответ № 1

Код 1C v 8.3

 

&НаКлиенте
Процедура Открытьмакет(Команда)

ОткрытьмакетНаСервере();

КонецПроцедуры

&НаСервере
Процедура ОткрытьмакетНаСервере()

ОбъектВорд = Справочники.Филиал.ПолучитьМакет("Макет").Получить();
ОбъектВорд.Application.Visible = Истина;
ОбъектВорд.Activate();

КонецПроцедуры

Lavr
23.10.2015 08:31 Ответ № 2

В жиме толстого клиента все работает, а в web-интерфейсе ошибка: Ошибка при вызове метода контекста (Получить)

Через web-интерфейс этот метод должен работать?

IBReiter
23.10.2015 09:25 Ответ № 3

Проверил на платформе 8.3.6.2152 и в браузере хром — все ок, работает алоритм.

У вас конфигурация вообще какая?

Lavr
23.10.2015 09:37 Ответ № 4

Платформа 8.2 Конфигурация УП, с нуля пишу, очень простая с 7-ю справочниками.

IBReiter
23.10.2015 10:36 Ответ № 5

Режимы совместимости? как вариант..

Ну а так, попробуйте на 8.3 ещё

Lavr
23.10.2015 10:48 Ответ № 6

Не работает в совместимости. Оставлю тогда так:

&НаКлиентеПроцедура СлужебнаяЗаявка(Команда) Word = Новый COMОбъект («Word.Application»);Word.Documents.Open («192.168.47.130wudataWU,_Фамилия_Имя,_Филиал_г._Караганда.doc»);Документ = Word.Application.Documents(1);Документ.Application.Visible = Истина;Документ.Activate();КонецПроцедуры

IBReiter
23.10.2015 11:27 Ответ № 7

И на 8.3 не работает?

Вам совместимость нужна

Подсказка:Вы можете добавить любую страничку в Социальные закладки щелкнув по значку соцсетей (в вверху)

Войти или зарегистрироваться

[РЕШЕНО] Ошибка при вызове метода контекста получитьмакет activedocument

Тема в разделе «Конфигурирование на платформе «1С:Предприятие 8″», создана пользователем Persempre, 29 янв 2015.

  1. TopicStarter Overlay

    Offline

    Persempre
    Опытный в 1С

    Регистрация:
    18 июл 2012
    Сообщения:
    868
    Симпатии:
    3
    Баллы:
    29

    Доброго времени суток. Суть проблемы в печати как понимаете. Запихнул Word в макет. Дальше заполнил закладки, обработал и тд. На локальной машине работает. А на боевой базе не взлетело. Код ниже, в чем затык не пойму

    Код:

    &НаКлиенте
    Процедура УведомлениеОбУвольненииИГ(Команда)
    
        УведомлениеОбУвольненииИГНаСервере();
       
    КонецПроцедуры
    
    &НаСервере
    Процедура УведомлениеОбУвольненииИГНаСервере() //ActiveDoc)
       
        ТаблицаПараметров.Очистить();
       
        // Открываем Word
        ActiveDoc = Справочники.ДополнительныеСведенияИФайлы.ПолучитьМакет("УведомлениеОбУвольнении");
        WordObj = ActiveDoc.Get();
        WordObj.Application.Visible = 1;
    


    Persempre,
    29 янв 2015

    #1

  2. Offline

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.901
    Симпатии:
    1.035
    Баллы:
    204

    на сервере не установлен WORD?


    nomad_irk,
    29 янв 2015

    #2


    Persempre нравится это.

  3. Offline

    Draco
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.722
    Симпатии:
    961
    Баллы:
    204

    Ну первый вопрос парвильный Офис то на сервере есть?


    Persempre нравится это.

  4. TopicStarter Overlay

    Offline

    Persempre
    Опытный в 1С

    Регистрация:
    18 июл 2012
    Сообщения:
    868
    Симпатии:
    3
    Баллы:
    29


    Persempre,
    30 янв 2015

    #4

  5. Offline

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.901
    Симпатии:
    1.035
    Баллы:
    204


    nomad_irk,
    30 янв 2015

    #5


    Persempre нравится это.

  6. Offline

    Draco
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.722
    Симпатии:
    961
    Баллы:
    204

    Ну или права у пользователя под которым это запускается на сервере еть на офис серверный.

  7. TopicStarter Overlay

    Offline

    Persempre
    Опытный в 1С

    Регистрация:
    18 июл 2012
    Сообщения:
    868
    Симпатии:
    3
    Баллы:
    29

    Спасибо, вопрос решен. Заполнение нужно было делать на клиенте. Только скорость заполнения адски маленькая. как буд-то человек кнопки нажимает. Как ускорить не знаю


    Persempre,
    30 янв 2015

    #7

(Вы должны войти или зарегистрироваться, чтобы ответить.)

Показать игнорируемое содержимое

Похожие темы
  1. 8.х
    Ошибка при вызове метода контекста (Выполнить):Синтаксическая ошибка «И»

    She,
    3 сен 2009
    , в разделе: Отчеты и обработки для «1С:Предприятие 8»

    Ответов:
    3
    Просмотров:
    2.908

  2. AlenaAS

    8.х ОБМЕН
    Ошибка выполнения запроса (Ошибка при вызове метода контекста (Выполнить))

    AlenaAS,
    27 авг 2014
    , в разделе: Обмен данными в «1С:Предприятие 8»

    Ответов:
    9
    Просмотров:
    4.867

  3. Primorsky

    [РЕШЕНО]
    Ошибка в обработке Ошибка при вызове метода контекста (Выполнить) плюс вылет программы

    Primorsky,
    12 янв 2015
    , в разделе: «1С:Бухгалтерия БП»

    Ответов:
    3
    Просмотров:
    18.107
Ваше имя или e-mail:
У Вас уже есть учётная запись?
  • Нет, зарегистрироваться сейчас.
  • Да, мой пароль:
  • Забыли пароль?

Запомнить меня

Поиск

  • Искать только в заголовках
Сообщения пользователя:

Имена участников (разделяйте запятой).

Новее чем:
  • Искать только в этой теме
  • Искать только в этом разделе
    • Отображать результаты в виде тем

Быстрый поиск

  • Последние сообщения

Больше…

Всем привет! Печ. форма формируется через Word. Открывается файл Word, там делаются замены после чего он сохраняется. Все отлично работало, пока не перенес базу на SQL. Причем, если на этом сервере развернуть эту же базу в файловом варианте — все работает. А на SQL — нет. Пробовал давать какие-угодно права пользователю, от имени которого запускается Агент сервера. Запускал его и под встроенной учеткой и под админом… нифига. Вот фрагмент кода, который перестает работать на SQL: по причине: Произошла исключительная ситуация (Microsoft Word): Данная команда недоступна, так как не открыт ни один документ.» Пожалуйста, помогите разобраться в чем дело.

ну а путь к файлу у тебя какой? файл сам где лежит?

Сам Word установлен? Что выдаст ПолучитьCOMОбъект(«», «Word.Application») или ПолучитьCOMОбъект(«d: emp emp.docx»)

ИмяФайлаШаблона — существует ли файл по этому пути, и доступен ли?

Сначала делал так: Потом переделал жестко: ИмяФайлаШаблона = «C:UsersPublicDocuments» + «ШаблонДоговора.docx»; Но не помогло.

Да, Word установлен. Если в файловом варианте развернуть, все работает, документ отлично формируется и открывается.

Только выполни на сервере

Кода запускаешь файловую базу, доступны ком-обхекты локальной системы. Если сервер 1С находится на другой машине, откуда ему знать про «C:UsersPublicDocuments» терминального сервера или локальной машины?

Разумеется, я сто раз проверил существование файла, все права на него и все такое. В разные места его клал, админские права раздавал. Запускаю я все на одном и том же сервере. И Word и 1C установлены на той машине, на которой я работаю. Насчет : в первом случае результат тот же — «ни открыт ни один документ», во втором случае другая ошибка: «{ВнешняяОбработка.ФормированиеПоШаблону.МодульОбъекта}: Ошибка при вызове метода контекста (ПолучитьCOMОбъект) по причине: Ошибка получения объекта COM: Фильтр сообщений выдал диагностику о занятости приложения.»

У тебя и сервер 1С на той же машине стоит?

может как вариант повис на сервере COMОбъект Ворда. посмотри в процессах.

Vladal, Да, я когда разбирался с проблемой, установил все на одну машину. Сервер 1С, SQL и Word. На ней и разбираюсь. zladenuw, ты прав. Там висела целая пачка процессов Word. Я их выбил, но теперь другая ошибка: {ВнешняяОбработка.ФормированиеПоШаблону.МодульОбъекта}: Ошибка при вызове метода контекста (ПолучитьCOMОбъект)    Word = ПолучитьCOMОбъект(ИмяФайлаШаблона); по причине: Ошибка получения объекта COM: Операция прервана

Значит что-то из дочерних процессов может висеть и блокировать. Скорее всего, он ответил на твой последний запрос com-объекта, что его прервали. Повтори через время или для верности перегрузи компьютер.

Я с проблемой второй день бьюсь и не раз перезагружал и даже переустанавливал платформу. Если использовать «Word = Новый COMОбъект(«Word.Application»);», то COM объект создается. Т.е. по идее с СОМ все в порядке. Для полной ясности скажу что стоит: Печатная форма для УТ 11. Хотя непонятно, какое это все имеет отношение к COM объекту… Короче, танцы с бубном продолжаются, спасибо за участие!

Если танцы с бубном не помогут, есть вариант без ворда если у тебя простая замена по тексту на нужные значения. Переименовываешь файл docx в zip, извлекаешь в папку, находишь в подпапках файл с данными в формате xml, производишь в нем замены и назад выполняешь упаковку и переименование.

Pashkaa, это всем бубнам бубен ))) Я уж лучше на файловой версии все оставлю, чем так. Думаю, решение рано или поздно найдется. Буду с разными платформами экспериментировать. Вряд ли я единственный пытаюсь документ Word сформировать из базы 1С на SQL. А судя по тому, что в поиске ничего подобного нет, то ситуация не популярная и легко все может заработать на другой системе или конфигурации. Такие мысли у меня.

напиши сетевую папку. Диск С: лучше не писать. Там есть такая фигня в правах как передача прав подчиненным папкам. Наследование. То есть если ваш админ для диска С: задал неполные права твоему пользователю, то хоть ты застрелись, но хотя и будешь «давать какие-угодно права пользователю» на папку C:UsersPublicDocuments всё равно приоритет у прав на диск С:, которые и применятся.

Посмотри пути. Выполняется наверняка на сервере, значит далеко не факт, что у учетки запуска rphost-a есть права на путь-файл.

Разобрался. Кто бы мог подумать… Как я уже писал, это УТ 11 — т.е. управляемые формы. Перенес выполнение всех операций с объектом «Word = Новый COMОбъект(«Word.Application»)» с сервера на клиент — все заработало. Не спешите кидать тухлыми помидорами типа «конечно, Word не откроется на стороне сервера». Но раньше-то как-то открывался. Именно это меня и пустило по ложному следу. Выходит, доступность методов COM объектов на файловом сервере и SQL — разная. Какой я сделал вывод: Что касается конкретно метода Word.Documents.Open — если база файл-серверная, методу все равно где выполняться, на клиенте или на сервере. Документ открывается и показывается ни смотря ни на что. Но когда я перешел на SQL, метод ошибки выдавать не стал и внешне отрабатывает как я писал выше. Но если выполняется на стороне сервера — ничего не открывает и дальнейшее обращение к документу дает ошибку, а на стороне клиента — открывает.

сколько можно на эти грабли наступать.

МихаилМ, по-моему не совсем по теме. Сом объект-то создается и остальные методы у него работают. Вы читали ветку или только последнее сообщение? Сколько можно на эти грабли наступать… Сейчас-то конечно все сразу умные станут. )) Что раньше молчали? Давайте без этого.

из >Разумеется, я сто раз проверил существование файла, все права на него и все такое. В разные места его клал, админские права раздавал. не стыкуется с

Чем же не стыкуется? В я мудрил с самим файлом, а в перенес выполнение кода с сервера на клиент. Короче, флуд пошел…

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

Это моя первая статья на данном портале, но попытаюсь изложить все понятно и подробно.
Долгое время у меня заняло создание такой вот внешней обработки. Есть очень много примеров, как сделать подобное на неуправляемых формах (2.0) и очень мало информации касательно управляемых(3.0), по крайней мере я многого найти не смог в доступе. Создание подобное обработки выглядит вполне несложно, если производить все действия на сервере, как это было с 2.0, но в нашем случае необходимо инициализировать открытие документа на клиенте, чему сильно мешает отсутствие возможности передать макет Active Document с сервера на клиент.

Итак, пойдем по порядку. Подобная информация уже есть в сети, но для полноты картины кратко разъясню регистрацию обработки в системе:

1. Открываем модуль объекта обработки и создаем там Функцию СведенияОВнешнейОбработке() (естественно экспортную):

  СведенияОВнешнейОбработке()

Как мы видим, использовать будем ВызовКлиентскогоМетода, по скольку открыть файл нужно будет на компьютере пользователя.

Далее понадобится создать еще две процедуры здесь же:

2. Функция добавления команды, которую мы вызываем ранее(просто, чтобы все было визуально разделено и не награмождалось скопом в одной функции):

 ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = «»)

3. И функция по созданию этой самой таблицы команд:

(Из комментариев можно подробней понять, для чего используется тот или иной параметр-поле данной таблицы)

На этом настройка регистрации внешней обработки в нужной вам конфигурации закончена.

Далее. Самое интересное: создание, заполнение и вывод макета клиенту.

Первое, что нам необходимо сделать, это создать макет нашего документа(Изображение 3). Макет понадобится двоичный, т.к. обычный мы на клиент не передадим(как я и говорил ранее). Заменяем нужные данные в шаблоне, перед загрузкой в обработку, «Параметрами», у меня они выглядят так, на примере: «{Сотрудник}»(кавычки не учитывать), после чего загружаем в Обработку-Макет.

Теперь в модуле формы создаем процедуру, которая будет вызвана при обращении к печати именно в таком виде(за исключением содержимого, заполнять можете как вам угодно), процедура так же должна быть экспортной и на клиенте, так как вызывается из конфигурации и выполнение назначено на клиентской стороне:

 Печать(ИдентификаторКоманды, МассивОбъектов)

Макет я собираю и вызываю в отдельной процедуре, обязательно на клиенте. 

 СобратьМакет(СсылкаНаОбъект)

Для сбора макета нам понадобится получить этот самый макет уже с сервера. Передаю я его через временное хранилище:

 ПолучитьМакетСервер(ИмяМакета)

Далее нужно получить данные для заполнения макета, естественно на сервере, по скольку может понадобиться обратиться к сторонним регистрам и справочникам, если нет, то можно выполнить и на клиенте, получив ссылку на интересующий нас объект:

 ПолучитьДанные(СсылкаНаОбъект)

Данные складываем в структуру,где ключ — имя параметра в макете(без фигурных скобок), а значение — собственно значение, которое необходимо подставить.

На этом завершается наше создание. Вы можете скачать обработку в готовом виде, в ней также реализован запуск через форму обработки, то есть с помощью открытия обработки без регистрации ее в конфигурации. Надеюсь, моя статья многим поможет и окажется полезной. Спасибо большое за внимание!

В платформе 1С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.

Исправляем ситуацию

Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.

Рассмотрим действия разработчика на примере со специально допущенной ошибкой. Мы запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора. Компилятор 1С пропускает такую процедуру, так как орфографических ошибок в написании команд мы не допустили. Однако в режиме предприятия нас ждет такое сообщение об ошибке:


	 Запрос = Новый Запрос;
	 Запрос.Текст =
	         "ВЫБРАТЬ
	          |        Номенклатура.Ссылка КАК Ссылка,
	          |        Номенклатура.ВерсияДанных КАК ВерсияДанных,
	          |        Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
	          |        Номенклатура.Родитель КАК Родитель,
	          |        Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
	          |        Номенклатура.Код КАК Код,
	          |        Номенклатура.Наименование КАК Наименование,
	          |        Номенклатура.Артикул КАК Артикул,
	          |        Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	          |        Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	          |        Номенклатура.Предопределенный КАК Предопределенный,
	          |        Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
	          |ИЗ
	          |        Справочник.Номенклатура КАК Номенклатура
	          |ГДЕ
	          |         ";
	 РезультатЗапроса = Запрос.Выполнить();
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	 КонецЦикла;

Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора

Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора

Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.

Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.

Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.


	 Запрос = Новый Запрос;
	            Запрос.Текст =
	                       "ВЫБРАТЬ
	                        |          Номенклатура.Ссылка КАК Ссылка,
	                        |          Номенклатура.ВерсияДанных КАК ВерсияДанных,
	                        |          Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
	                        |          Номенклатура.Родитель КАК Родитель,
	                        |          Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
	                        |          Номенклатура.Код КАК Код,
	                        |          Номенклатура.Наименование КАК Наименование,
	                        |          Номенклатура.Артикул КАК Артикул,
	                        |          Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	                        |          Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	                        |          Номенклатура.Предопределенный КАК Предопределенный,
	                        |          Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
	                        |ИЗ
	                        |          Справочник.Номенклатура КАК Номенклатура
	                        |ГДЕ
	                        |          НЕ Номенклатура.ЭтоГруппа ";
	 НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
	 РезультатЗапроса = Запрос.Выполнить();
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	 Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
	 КонецЦикла;

Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной

Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной

1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.

Рис.3 Синтакс-помощник

Рис.3 Синтакс-помощник

В конфигураторе находим строку и метод, на который указывало сообщение об ошибке, и нажимаем на него правой кнопкой мыши. Выбираем пункт «Поиск в синтакс-помощнике» и платформа самостоятельно ищет справочную информацию по выделенному методу. В справке мы видим не только подробное описание параметров и самого метода, но и пример. Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает.

Рис.4 Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает

Рис.4 Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает

Чаще всего причиной подобных ошибок выступают следующие факторы:

  1. Невнимательность;
  2. Отсутствие опыта или знаний;
  3. Несогласованность действий разработчиков друг с другом;
  4. Изменения в методах контекста в новых версиях платформы.

Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.

Lavr
22.10.2015 13:56 Прочитано: 2901

Здравствуйте.

Импортировал word-документ в справочник «Филиал», в макет как Active document. Есть форма списка и форма элемента списка, сделал кнопку на форме элемента, при нажатии вызов процедуры:

&НаКлиенте

Макет = Справочники.Филиал.ПолучитьМакет(«Макет»).Получить();Документ = Макет.Application.Documents(1);Документ.Activate();Макет.Application.Visible = Истина;Макет.Activate();

Надо чтобы документ из макета открывался в ворде у пользователя, просто открывался без заполнения какими-либо данными из формы.

Подскажите пожалуйста, добрые специалисты, как это правильно сделать? Может вообще по другому можно, как-то проще?

Благодарю.

Yandex
Возможно, вас также заинтересует

Реклама на портале

IBReiter
22.10.2015 14:40 Ответ № 1

Код 1C v 8.3

 

&НаКлиенте
Процедура Открытьмакет(Команда)

ОткрытьмакетНаСервере();

КонецПроцедуры

&НаСервере
Процедура ОткрытьмакетНаСервере()

ОбъектВорд = Справочники.Филиал.ПолучитьМакет("Макет").Получить();
ОбъектВорд.Application.Visible = Истина;
ОбъектВорд.Activate();

КонецПроцедуры

Lavr
23.10.2015 08:31 Ответ № 2

В жиме толстого клиента все работает, а в web-интерфейсе ошибка: Ошибка при вызове метода контекста (Получить)

Через web-интерфейс этот метод должен работать?

IBReiter
23.10.2015 09:25 Ответ № 3

Проверил на платформе 8.3.6.2152 и в браузере хром — все ок, работает алоритм.

У вас конфигурация вообще какая?

Lavr
23.10.2015 09:37 Ответ № 4

Платформа 8.2 Конфигурация УП, с нуля пишу, очень простая с 7-ю справочниками.

IBReiter
23.10.2015 10:36 Ответ № 5

Режимы совместимости? как вариант..

Ну а так, попробуйте на 8.3 ещё

Lavr
23.10.2015 10:48 Ответ № 6

Не работает в совместимости. Оставлю тогда так:

&НаКлиентеПроцедура СлужебнаяЗаявка(Команда) Word = Новый COMОбъект («Word.Application»);Word.Documents.Open («\192.168.47.130wudataWU,_Фамилия_Имя,_Филиал_г._Караганда.doc»);Документ = Word.Application.Documents(1);Документ.Application.Visible = Истина;Документ.Activate();КонецПроцедуры

IBReiter
23.10.2015 11:27 Ответ № 7

И на 8.3 не работает?

Вам совместимость нужна

Подсказка: Вы получили ответ на свой вопрос — закройте вопрос!

Ошибка при вызове метода контекста(Получить)

Автор ilstar, 14 фев 2023, 06:21

0 Пользователей и 1 гость просматривают эту тему.

Всем привет! нужна помощь в исправлении ошибки. Я ПОЛНЫЙ новичок, учусь еще. При формировании внешней печатной формы выходит ошибка «Ошибка при вызове метода контекста (Получить)»
вот часть когда, где выходит ошибка

    Для Каждого Ссылка Из МассивОбъектов  Цикл

                НачалоСправки = ТабДокумент.ВысотаТаблицы + 1;

                ДанныеТекущегоДокумента = ДанныеДокументов.Получить(Ссылка);

                Если ДанныеТекущегоДокумента = Неопределено Тогда
            Продолжить;
        КонецЕсли;

                СоответствиеДоходов = ?(ДанныеТекущегоДокумента.НалоговыйПериод < 2021, СоответствиеКодовДоходов, СоответствиеКодовДоходов2021);
        ВыводитьФормуСправки2022 = ВыводитьФорму2НДФЛ2022Года(ДанныеТекущегоДокумента.НалоговыйПериод, ДанныеТекущегоДокумента.Дата);
        Если ВыводитьФормуСправки2022 Тогда
            ОбластьМакетаШапкаПервойСтраницы = ОбластьМакетаШапкаПервойСтраницы_2022;


ilstar, А что собой представляет переменная ДанныеДокументов?


Теги:

  • Форум 1С

  • Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4

  • Конфигурирование, программирование в 1С Предприятие 8

  • Ошибка при вызове метода контекста(Получить)

Похожие темы (5)

Рейтинг@Mail.ru

Rambler's Top100

Поиск

Like this post? Please share to your friends:
  • Ошибка при вызове метода контекста save excel
  • Ошибка при вызове метода контекста open произошла исключительная ситуация microsoft excel
  • Ошибка при вызове метода контекста open excel workbooks open
  • Ошибка при вызове метода контекста add произошла исключительная ситуация microsoft word
  • Ошибка при вызове метода контекста add excel