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

1C. «Недопустимое значение параметра» при вызове макета в расширении

Дано: 1С (в данном примере конфигурация 1С:Университет ПРОФ), платформа 8.3.10. Создано расширение, в котором к документу добавлен новый макет. В модуле менеджера документа есть процедура, формирующая печатную форму на базе макета. Необходимо было заменить данную процедуру (при помощи директивы расширения «&Вместо») и заменить вызов встроенного макета на наш, добавленный в расширение.
Проблема: при вызове добавленного макета в момент его печати в режиме «1С:Предприятие» возникала ошибка при получении макета:

{ЗаявлениеПоступающегоРасширение Документ.ЗаявлениеПоступающего.МодульМенеджера(176)}: Ошибка при вызове метода контекста (ПолучитьМакет)
Макет = Документы.ЗаявлениеПоступающего.ПолучитьМакет («Расш1_МакетЗаявлениеПоступающего»);
по причине:
Недопустимое значение параметра (параметр номер ‘1’)

Код, вызывающий ошибку:

Варианты решения:

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

&НаСервере

Функция ПолучитьМакетЗаявленияИзРасширения()

    Макет = Документы.ЗаявлениеПоступающего.ПолучитьМакет («Расш1_МакетЗаявлениеПоступающего»);

    Возврат Макет;

КонецФункции

А затем из заменяемой процедуры вызвать эту функцию:

(как оказалось этот способ не нужен. Причину читайте ниже)

2. Другой вариант — перенести макеты в общие и следующей командой вызвать (получить) макет из «Общие макеты»:

Макет = ПолучитьОбщийМакет («Расш1_МакетЗаявлениеПоступающего»);

——
Видимо это всё-таки какой-то глюк платформы (протестировано на 8.3.10.2252 и 8.3.10.2299), но если просто добавить пустой макет в общие макеты в расширении, то команда, ранее вызывавшая ошибку (ПолучитьМакет из макета документа без допфункций на сервере), начинает нормально работать. При удалении пустого общего макета, команда вызова макета из документа снова вызывает ошибку (даже если вынесена в функцию на сервере, как показано в способе 1).
Т.е. если всё-таки хочется сделать макеты нормально в документе (ожидая, что когда-нибудь этот глюк исправят), то нужно сделать макет-заглушку в общих макетах. Например:

При этом, если в расширении добавлено несколько макетов к документу, то «заглушки» достаточно только одной.

Если Вам понравилась статья, пожалуйста, поставьте лайк, сделайте репост или оставьте комментарий. Если у Вас есть какие-либо замечания, также пишите комментарии.

Как ПолучитьМакет(«Макет») в документе? ☑ 0

LivingStar

03.09.13

10:53

При нажитии на кнопку в форме документа вылетает ошибка, —

{Документ.РасчетПремииМенеджера.Форма.ФормаДокумента(62)}: Ошибка при вызове метода контекста (ПолучитьМакет)

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

по причине:

Недопустимое значение параметра (параметр номер ‘1’)

У документа есть Макет, — «Макет» , почему ругается на него?

Процедура РасчетПремииНажатие(Элемент)

    // Вставить содержимое обработчика.

    Если НЕ ПолучитьДокументПланирования() тогда возврат; конецесли;

    //ЭтаФорма.ЭлементыФормы.Инд.Видимость=Истина;

    //Инд=0;

    Состояние(«Идет расчет премии менеджера, подождите …»);

    мен = ЭтаФорма.ЭлементыФормы.Менеджер.Значение;

    
    ТабДокумент = Новый ТабличныйДокумент;

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

1

rull9ss

03.09.13

10:54

попробуй полное имя указать

«Документы.ТвойДокумент.Макеты.ТвойМакет»

2

Wobland

03.09.13

10:56

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

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

3

Error pro

03.09.13

10:57

(0) УФ?

4

LivingStar

03.09.13

10:57

(1) ругается что нет поля объекта «Макет»

5

LivingStar

03.09.13

10:57

(2) только так??? спасибо, сейчас попробую, думал проще….

6

LivingStar

03.09.13

10:57

(3) Обычные формы

7

Wobland

03.09.13

10:58

(6) нет макета

8

Error pro

03.09.13

10:58

(6) Скопируй старый макет в новый. Попробуй изменить наименование.

9

LivingStar

03.09.13

11:00

(2) Процедура или функция с указанным именем не определена (РеквизитФормыВЗначение)

10

LivingStar

03.09.13

11:01

(8) Хотите сказать что так должно работать

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

это глюки?

11

rull9ss

03.09.13

11:01

(9) ну так откуда в обычных формах РеквизитФормыВЗначение??

12

LivingStar

03.09.13

11:01

(11) Понял!

(2) Значит это не подойдет!!!

Как в обычных формах это работает, получение доступа к макету документа.

13

Wobland

03.09.13

11:03

(10) ЭтотОбъект?

14

Cashtane

03.09.13

11:03

Макет = ЭтотОбъект.ПолучитьМакет(«Накладная»);

15

LivingStar

03.09.13

11:07

(13) Это выполняется в форме документа

16

Cashtane

03.09.13

11:07

(15) Вот поэтому и ЭтотОбъект.

17

Cashtane

03.09.13

11:08

Если бы был в модуле объекта мог бы просто вызвать: ПолучитьМакет(«Накладная»)

18

LivingStar

03.09.13

11:08

в тестовой базе смотрю, на эту строку не ругается, стало ругаться в рабочей (((

19

LivingStar

03.09.13

11:09

Вот в тестовой базе в модуле формы документа, прошло и не сругалось!!!

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

20

Infsams654

03.09.13

11:13

А это еще что за хр-нь ?

мен = ЭтаФорма.ЭлементыФормы.Менеджер.Значение;

Элемент формы связан по данным с реквизитом объекта/ТЧ объекта, либо с реквизитом формы. Так, что, надо сразу к ним и обращаться. А через ЭлементыФормы — это для несмышленых

21

LivingStar

03.09.13

11:14

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

    Макет = ЭтотОбъект.ПолучитьМакет(«Макет»);

22

Wobland

03.09.13

11:14

(21) назови его «77» уже

23

LivingStar

03.09.13

11:16

(21) Я первый раз этот код и документ вижу, и удивляюсь что он все время работал нормально

Сейчас в тестовой базе работает, а в рабочей стал ругаться на макет

(22) А почему нужно его переименовывать, в тестовой работает все без изменений, а тут что случилось?

24

LivingStar

03.09.13

11:16

(20) Я первый раз этот код и документ вижу, и удивляюсь что он все время работал нормально

25

Wobland

03.09.13

11:16

(23) это называется «танцы с бубном». отсекаются проблемы разной раскладки

26

Cashtane

03.09.13

11:18

(25) Видимо действительно этот случай. И не более.

27

palpetrovich

03.09.13

11:20

(24) в этом документе точно есть Макет «Макет»?

28

Error pro

03.09.13

11:23

(24) я тебе еще в (8) предложил переименовать макет. Тяжело сделать?

29

LivingStar

03.09.13

11:23

(27) Да конечно, говорю в копии базы все работает, в рабочей что то слетело.

Изменил название макета на «РасчетПМ»

Макет = ЭтотОбъект.ПолучитьМакет(«РасчетПМ»);

стало работать…выполняется…Ошибки уже на макете не выдает!

30

LivingStar

03.09.13

11:23

(28) переименовал!

31

LivingStar

03.09.13

11:24

Спасибо всем!

32

LivingStar

03.09.13

13:13

То есть это к примеру залез админ в 1с, исправил букву в другой раскладке в названии макета «Макет» и сохранил? Или это реально глюк такой 1с есть???

33

LivingStar

03.09.13

13:24

SABOTAGE ??!

34

hhhh

03.09.13

13:30

(32) наверно у формы слетело свойство «Данные». А потом кто-то кофе пил на твоем рабочем месте, махнул рукавом, зацепил клавиатуру, свойство и заполнилось как надо.

35

МихаилМ

03.09.13

13:47

ОбработкаОбъект.ПолучитьМакет(

36

LivingStar

03.09.13

13:52

(34) Непонятно как это бы так было, саботаж если только говорю!!!

(35) Макет документа, при чем тут обработка???

пробовал и так:

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

и так

Макет = ЭтотОбъект.ПолучитьМакет(«Макет»);

не получалось….пока не изменил название макета…

37

МихаилМ

03.09.13

14:01

(36)

извиняюсь. этотОбъект

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



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

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

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

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

Подсказка: Щелкнув по значку (справа от названия вопроса), вы получите список ответов на похожие вопросы!

Показывать по
10
20
40
сообщений

Новая тема

Ответить

Snz

Дата регистрации: 05.02.2009
Сообщений: 18

«Добрый день!<br> <br>Такая проблема: после обновления до версии 2.0.54.11 (типовая конф) возникает «Ошибка при вызове метода контекста (ПолучитьМакет)» в окне «Регистрация земленных участков».<br>Помогите разобраться, пожалуйста.<br> <br>{РегистрСведений.РегистрацияЗемельныхУчастков.Форма.Регистрация.Форма(68)}: Ошибка при вызове метода контекста (ПолучитьМакет)<br>Макет = Отчеты.РегламентированныйОтчетЗемельныйНалог.ПолучитьМакет(«Списки2011Кв1″);<br>по причине:Недопустимое значение параметра (параметр номер ‘1’)<br> <br>Платформа: 8.2.19.80»

uinny

Дата регистрации: 12.01.2008
Сообщений: 4814

Видимо, дело в том, что в отчете нет макета с таким наименованием. Есть макет «СпискиВыборка2011Кв1».

Денис (САМАРА)

Дата регистрации: 09.04.2008
Сообщений: 8351

DomninYV

Дата регистрации: 14.01.2014
Сообщений: 4

«У меня БП 3.0.28.13 но проблема та же.<br>Я решил так.<br>Открыл конфигуратор. <br>Конфигурация-Настройка поддержки.<br>Включить возможность изменения.<br>Настройка правил поддержки.<br>Переключатели 2 шт. Объект поставщика редактируется с сохранением поддержки.<br>ОК.<br>После сохранения открыть регистр сведений.Регистрация зем.участков.Формы.ФормаЗаписи.Модуль<br>Открыть процедуру.<br>»Процедура ЗагрузитьКодыКБК()<br> ИмяОбласти = ?(Год(Запись.Период) < 2012, «КодыКБК», «КБК_2012Кв1»);<br> Макет = Отчеты.РегламентированныйОтчетЗемельныйНалог.ПолучитьМакет(«Списки2011Кв1»);<br> ОбластьКодов = Макет.Области[ИмяОбласти];<br> <br> КодыКБК.Очистить();<br> Для Инд = ОбластьКодов.Верх По ОбластьКодов.Низ Цикл<br> Строка = КодыКБК.Добавить();<br> Строка.Код = Макет.Область(Инд, 1).Текст;<br> Строка.Название = Макет.Область(Инд, 2).Текст;<br> КонецЦикла;<br>КонецПроцедуры»<br>Изменить «Списки2011Кв1» на «СпискиВыбора2013Кв4″<br><br>Все сохранить.<br><br>Запустить 1 с.<br>У меня все работает.»

Snz

Дата регистрации: 05.02.2009
Сообщений: 18

релиз 2.0.54.12 все исправил :) Спасибо

Показывать по
10
20
40
сообщений

Читают тему:

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