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

ОболочкаActiveDocument ☑ 0

darkhome

28.11.13

12:33

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

&НаКлиенте

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

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

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

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

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

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

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

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

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

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

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

1

Cube

28.11.13

12:34

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

2

darkhome

28.11.13

12:36

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

3

darkhome

28.11.13

12:37

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

4

Cube

28.11.13

12:40

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

5

darkhome

28.11.13

12:43

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

6

Cube

28.11.13

12:44

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

не?

7

darkhome

28.11.13

12:48

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

8

darkhome

28.11.13

12:49

Я ставлю

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

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

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

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

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

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

9

Cube

28.11.13

12:52

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

10

darkhome

28.11.13

12:53

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

11

Cube

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();

    КонецЕсли;

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

12

darkhome

28.11.13

13:06

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

13

Cube

28.11.13

13:08

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

14

darkhome

02.12.13

12:03

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

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

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

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

    Ком.Application.Visible = 1;

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

&НаКлиенте

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

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

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

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

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

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

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

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

15

darkhome

02.12.13

12:04

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

16

darkhome

02.12.13

12:06

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

17

Kupogun

02.12.13

12:08

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

18

darkhome

02.12.13

12:09

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

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

19

Kupogun

02.12.13

12:10

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

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

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

20

darkhome

02.12.13

12:11

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

21

Cube

02.12.13

12:15

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

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

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

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

    Ком.Application.Visible = 1;

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

&НаКлиенте

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

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

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

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

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

22

darkhome

02.12.13

12:17

(4) я читал

23

darkhome

02.12.13

12:19

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

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

    Ком.Application.Visible = 1;

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

24

darkhome

02.12.13

12:20

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

25

Cube

02.12.13

12:23

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

26

Cube

02.12.13

12:26

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

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

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



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

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



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

MSWord.Activate();

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. Показов 17743. Ответов 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

1897 / 1301 / 461

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

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

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

1897 / 1301 / 461

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

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

15.12.2017, 18:19

7

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

1

1193 / 732 / 211

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

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

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

15.12.2017, 21:17

8

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

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

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

1

1897 / 1301 / 461

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

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

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

1897 / 1301 / 461

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

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

15.06.2022, 15:54

11

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

0

Добрый день! Воспользовавшись поиском нашел порядка 3-4х веток на эту тему и  нигде так  и не увидел решения. Может его и  нет? Суть задачи: Открыть на сервере шаблон Word сохраненный как ActiveDocument, заполнить и  откорректировать его на сервере и например вывести его пользователю на стороне клиента. …. ну дальше делаем все что нужно с  документом ДокументWORD = Новый ДвоичныеДанные(ПолноеИмяФайла); и затем записываем его в  хранилище значений а  на клиенте получаем и  открываем. И все замечательно работает и  формируется на толстом и тонком клиенте… пока не запускаем Тонкий клиент через веб-сервер ну или не открываем 1с через браузер. В этом случае вываливается ошибка: Ошибка при вызове метода контекста (Получить)MSWord = Макет.Получить; На некоторых компах ошибка вываливается на методе Документ.SaveAs но если его закомментировать то опять же возвращаемся к  ошибке MSWord = Макет.Получить; Хоть кто нибудь знает доступен ли метод получения шаблона на сервере при работе через веб сервер? Или как это сделать лучше. Но весь смысл в  том чтобы документ формировался именно на сервере, потому как иногда совсем не нужно показывать файл на клиенте пользователю а  достаточно сохранить(на стороне сервера)

В синтакс-помощнике забанили?

xDD ага, забанили… Но то что там написано обламывает нас по полной: ОболочкаActiveDocument (ActiveDocumentShell) Получить (Get) Синтаксис: Получить Возвращаемое значение: Тип: COMОбъект. Описание: Получает COMОбъект для программного управления Active document. Доступность: ТОЛСТЫЙ КЛИЕНТ Но я сюда написал ибо помощь требуется. Кто сталкивался с  подобной задачей? Формировать файлы из ActiveDocument шаблона при клиент-серверном взаимодействии. Есть же наверное способ обхода ((((((

Выход — не использовать ActiveDocument

Вы меня убиваете ))))) Причем так обидно… если полностью по оболочке читать то она доступна на сервере Методы: Описание: Используется для доступа к Active document. Объект может быть записан в файл. Доступность: Сервер, толстый клиент. а ее методы только на толстом клиенте… ((

Однако спасибо все равно ))

Тэги: 1С 8

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

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

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

Импортировал 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 не работает?

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

Подсказка: Вы можете приложить к ответу файл или изображение щелкнув по значку или в редакторе.
  1. Есть обработка в которой в макет помещен документ Word-овский. Я его получаю заполняю шаблон значениями из Таблицы значений. Проблема в том что на файловом варианте эта обработка работает а на серверном нет. В чем может быть проблема?

    Ошибка выскакивает здесь:

    [​IMG]

    Сама обработка:

    Вложения:

  2. Еще вопрос в тему.

    Почему при сохранении макета типа active document в файл word кодом:

    ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
    Макет  = ОбработкаОбъект.ПолучитьМакет("ШаблонПисьмаПросрочка");
    ИмяФайла = КаталогВременныхФайлов() + ""файл.doc";
    Макет.Записать(ИмяФайла);

    Я получаю вместо нормального документа вот такой

    [​IMG]

  3. Offline

    nomad_irk
    Гуру в 1С

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

    Какой тип значения у Макет?

  4. [​IMG]

  5. Offline

    nomad_irk
    Гуру в 1С

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

    Ну а что ж вы хотите? :)
    Простым Записать() там непойми чего может быть….

    Вроде еще нужно сделать:

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

  6. [​IMG]

    [​IMG]

    Из статьи: http://infostart.ru/public/270277/

    Когнитивный диссонанс

    &НаСервере
    АктивныйДокумент = ПолучитьМакет("Макет");
    КомОбъект = АктивныйДокумент.Получить();

    Вот самые первые строчки, на которые натыкается в гугле юный неофит. В файловом варианте такой код сработает корректно (неважно в толстом или тонком клиенте). Т.к. и сервер и клиент у нас находятся на одной машине, и MS Word тоже установлен на этой машине.

    А давайте представим, что у нас клиент-сервер, да ещё и сервер находится на другой машине. Будет оно работать в тонком клиенте? Нет. И тут возникнет когнитивный диссонанс. WTF? o_O

    — Объединение сообщений, 5 апр 2017

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

  7. Offline

    nomad_irk
    Гуру в 1С

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

    Когнитивного диссонанса нет, т.к. в режиме управляемого приложения нет объекта типа ActiveDocument от слова совсем :)

    Выход: макет делать в виде двоичных данных, и гонять результат на клиента через временное хранилище.

  8. &НаСервере
    Функция ПолучитьДанныеМакета()
        АдресХранилища = Новый УникальныйИдентификатор();
        МакетПисьма = Обработки.ФормированиеПисемПоДепонентам.ПолучитьМакет("ШаблонПисьмо");
        Возврат ПоместитьВоВременноеХранилище(МакетПисьма, АдресХранилища);
    КонецФункции 
    
    &НаКлиенте
    Процедура СформироватьПисьма(Команда)
       Попытка
         Индификатор = ПолучитьДанныеМакета();
         МакетПисьма = ПолучитьИзВременногоХранилища(Индификатор);
         ИмяФайла = "Письмо.doc";
         ИмяФайлаПолное = "E:ЭРЯковенко" + ИмяФайла;
         МакетПисьма.Записать(ИмяФайлаПолное);
       Исключение
         Сообщить(ОписаниеОшибки());
       КонецПопытки;
    КонецПроцедуры

    Я правильно понял?

    — Объединение сообщений, 5 апр 2017

    Так что это уже пережиток?

  9. Offline

    nomad_irk
    Гуру в 1С

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

    В первом приближении — да.

    Только проще будет MSWord установить на сервер, выполнять заполнение и сохранение файла на сервере и уже результат гнать на клиента иначе придется на каждом клиенте устанавливать MSWord.

  10. Есть код:

    &НаКлиенте
    Процедура ПолучитьМакет(Команда)
       
        Попытка
            Индификатор = ПолучитьДанныеМакета();
            МакетПисьма = ПолучитьИзВременногоХранилища(Индификатор);
            ИмяФайла = "Письмо4.doc";
            ИмяФайлаПолное = "E:ЭРЯковенко" + ИмяФайла;
            МакетПисьма.Записать(ИмяФайлаПолное);
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;
       
        Попытка
            Шаблон = Новый COMОбъект("Word.Application");
        Исключение
            Сообщить("Ошибка при попытке создать объект ""MS Word""!" + Символы.ПС +
                     "Возможно приложение ""MS Word"" не установлено или установлено неправильно.", СтатусСообщения.Внимание);
                 КонецПопытки;
       
        Шаблон.Documents.Open(ИмяФайлаПолное);
        Попытка
            Шаблон.Application.Documents(1).Content.Find.Execute("{Сумма}",,,,,,,,, ЭтаФорма.Сумма, 2);               
            Шаблон.Application.Documents(1).Content.Find.Execute("{Контрагент}",,,,,,,,, ЭтаФорма.Контрагент, 2);               
            //Перемещаемся до строки в таблице
            Шаблон.Application.Selection.MoveDown(,8);       
            //Перемещаемся вниз, выделяем строку таблицы и копируем ее в буфер обмена
            Шаблон.Application.Selection.SelectRow();
            Шаблон.Application.Selection.Copy();
            Для каждого Строка Из Этаформа.ТЗ Цикл
                //Заменяем значения
                Шаблон.Application.Selection.Find.Execute("{НомерСчета}" ,,,,,,,,,Строка.НомерСчета, 2);
                Шаблон.Application.Selection.Find.Execute("{ДатаПоставки}" ,,,,,,,,,Строка.ДатаПоставки, 2);
                //Последний параметр поиска пустой
                Шаблон.Application.Selection.Find.Execute("{КрайняяДата}" ,,,,,,,,,Строка.КрайняяДата, 2);
                Шаблон.Application.Selection.Find.Execute("{СтоимостьТоваров}" ,,,,,,,,,Строка.СтоимостьТоваров, 2);
                //Перемещаемся вниз, вставляем из буфера обмена строку
                Шаблон.Application.Selection.MoveDown();
                Шаблон.Application.Selection.Paste();
                //Перемещаемся вверх и выделяем строку для замены значений
                Шаблон.Application.Selection.MoveUp();
                Шаблон.Application.Selection.SelectRow();
            КонецЦикла;
            //Вырезаем лишнюю строку
            Шаблон.Application.Selection.Cut();
            Шаблон.Application.Visible = Истина;       
        Исключение
            // Если произойдет ошибка выводятся данные об ошибке и объект закрывается.
            Сообщить("Ошибка: " + ОписаниеОшибки(), СтатусСообщения.Внимание);
            Шаблон.Application.Quit(0);
        КонецПопытки;
    
       
    КонецПроцедуры
    
    &НаСервере
    Функция ПолучитьДанныеМакета()
    
        АдресХранилища = Новый УникальныйИдентификатор();
        ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
        Макет             = ОбработкаОбъект.ПолучитьМакет("ШаблонПисьмаПросрочка");
        Возврат ПоместитьВоВременноеХранилище(Макет, АдресХранилища);
       
    КонецФункции   
    

    Если перенести заполнение документа с сервера на клиент то вот этот код отказывается работать:

     Шаблон.Application.Documents(1).Content.Find.Execute("{Сумма}",,,,,,,,, ЭтаФорма.Сумма, 2);              
            Шаблон.Application.Documents(1).Content.Find.Execute("{Контрагент}",,,,,,,,, ЭтаФорма.Контрагент, 2);   
  11. Offline

    nomad_irk
    Гуру в 1С

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

    Чего говорит?
    Версия MSOffice на клиенте совпадает с версией на сервере?

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

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

Импортировал 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 не работает?

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

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

3 / 3 / 7

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

Сообщений: 638

1

13.12.2017, 12:05. Показов 17755. Ответов 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

1904 / 1304 / 465

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

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

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

1904 / 1304 / 465

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

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

15.12.2017, 18:19

7

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

1

1195 / 733 / 212

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

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

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

15.12.2017, 21:17

8

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

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

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

1

1904 / 1304 / 465

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

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

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

1904 / 1304 / 465

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

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

15.06.2022, 15:54

11

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

0

В платформе 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С.

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

[РЕШЕНО] Ошибка при вызове метода контекста получитьмакет 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. She

    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:
У Вас уже есть учётная запись?
  • Нет, зарегистрироваться сейчас.
  • Да, мой пароль:
  • Забыли пароль?

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

Поиск

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

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

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

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

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

Больше…

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

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

Импортировал 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.130\wu\data\WU,_Фамилия_Имя,_Филиал_г._Караганда.doc»);Документ = Word.Application.Documents(1);Документ.Application.Visible = Истина;Документ.Activate();КонецПроцедуры

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

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

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

Подсказка: Вы можете приложить к ответу файл или изображение щелкнув по значку или в редакторе.

3 / 3 / 7

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

Сообщений: 639

1

13.12.2017, 12:05. Показов 18062. Ответов 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

Сообщений: 639

13.12.2017, 14:09

 [ТС]

3

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



0



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

3 / 3 / 7

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

Сообщений: 639

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

1965 / 1350 / 480

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

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

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

Сообщений: 639

15.12.2017, 15:15

 [ТС]

6

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



0



1965 / 1350 / 480

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

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

15.12.2017, 18:19

7

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



1



1231 / 763 / 218

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

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

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

15.12.2017, 21:17

8

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

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

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



1



1965 / 1350 / 480

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

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

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



1965 / 1350 / 480

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

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

15.06.2022, 15:54

11

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



0



Дорогие форумчане! Нужно печатать в 1С ЗУП 2.5 договор с сотрудником, но почему-то не работает создание печатного документа Active Document’а Word: При нажатии кнопки создания печатного документа выдаёт ошибку: «Не удалось сформировать внешнюю печатную форму. Ошибка при вызове метода контекста (Получить): Не удалось создать объект. Возможно, отсутствует соответсвующее приложение.» Но Ворд на компьютере установлен и хорошо открывает документы. Может кто-нибудь знает, в чём может быть дело?

«Но Ворд на компьютере установлен и хорошо открывает документы.» Какой версии и давно ли установлен?

Ворд 2007-й, у других пользователей он тоже стоит и создаёт документы Active Document Word у других пользователей, а на именно на одном компьютере активно не хочет это делать

Тэги: 1С 8

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

Понравилась статья? Поделить с друзьями:
  • Ошибка при заполнении птс как исправить
  • Ошибка при записи образа диска на флешку
  • Ошибка при вызове метода контекста полноенаименование
  • Ошибка при загрузке меню пользователь не авторизован
  • Ошибка при заполнении заявления на госуслугах