28.11.13 — 12:33
Создал в общихМакетах Макет типа ActiveDocument с расширением doc. Не получает с ним работать. Подскажите что не так. Делаю на УФ. Вот код
&НаКлиенте
Процедура Печать(Команда)
ПолучитьМакетНаСервере(«ПФ_DOC_Договор»);
//MSWord = Договор.Получить;
КонецПроцедуры
Процедура ПолучитьМакетНаСервере(ИмяМакета)
Договор = ПолучитьОбщийМакет(ИмяМакета);
MSWord = Договор.Получить;
конецпроцедуры
Выскакивает ошибка
Ошибка при вызове метода контекста (Получить)
MSWord = Договор.Получить();
1 — 28.11.13 — 12:34
&НаСервере забыл?
2 — 28.11.13 — 12:36
Если не указываешь директиву, то по умолчанию означает что код будет выполняться на сервере
3 — 28.11.13 — 12:37
Да я пробовал и &НаСервере и &НаСервереБезКонтекста. Все-равно не получается
4 — 28.11.13 — 12:40
А зачем ты пишешь Получить()? Ведь у тебя это не хранилище…
5 — 28.11.13 — 12:43
(4) А как надо сделать что бы заработало
6 — 28.11.13 — 12:44
MSWord = ПолучитьОбщийМакет(ИмяМакета);
не?
7 — 28.11.13 — 12:48
А потом как начать работать с документом что бы можно было заполнять поля в нем?
8 — 28.11.13 — 12:49
Я ставлю
Документ = MSWord.Application.Documents(1);
Документ.Activate();
У меня сразу выскакивает
Поле объекта не обнаружено (Application)
Документ = MSWord.Application.Documents(1);
Весь инет облазил. У всех работает. Может я что с начала не правильно делал
9 — 28.11.13 — 12:52
(8) А ты что, заполнять его на сервере собрался?
10 — 28.11.13 — 12:53
Ну вроде как так надо делать.
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();
КонецЕсли;
КонецПроцедуры //СформироватьПечатнуюФорму()
12 — 28.11.13 — 13:06
(11) Спасибо. Попробую. Надеюсь заработает
13 — 28.11.13 — 13:08
ПолучитьДанныеДляПечати() выполняется &НаСервере
14 — 02.12.13 — 12:03
&НаСервереБезКонтекста
Процедура ПолучитьМакетНаСервере()
Макет = ПолучитьОбщийМакет(«ПФ_DOC_Договор»);
Ком = Макет.Получить();
Ком.Application.Visible = 1;
конецПроцедуры
&НаКлиенте
Процедура Напечатать(Команда)
Состояние(НСтр(«ru = ‘Выполняется формирование печатных форм'»));
ПолучитьМакетНаСервере();
КонецПроцедуры
Ошибка при вызове метода контекста (Получить)
Ком = Макет.Получить();
Что не так? Сделал как написано в книге «Профессиональная разработка в системе 1С».
В общих макетах создал .doc макет, в него скопировал содержимое документа. Пытаюсь его получить, вылетает ошибка. Помоги разобрать, как сделать через ActiveDocument
15 — 02.12.13 — 12:04
Тип созданного макета — ActiveDocument
16 — 02.12.13 — 12:06
Делаю все это во внешней обработке
17 — 02.12.13 — 12:08
(14) что за ошибка?
18 — 02.12.13 — 12:09
Ошибка при вызове метода контекста (Получить)
Ком = Макет.Получить();
19 — 02.12.13 — 12:10
хз, попробуй так
текОбъект = ЭтаФорма.РеквизитФормыВЗначение(«Объект»);
Макет = текОбъект.ПолучитьМакет(«ПФ_DOC_Договор»);
20 — 02.12.13 — 12:11
(19) Делал, не получается
21 — 02.12.13 — 12:15
(14) (18) Ты (4) Читал?
&НаСервереБезКонтекста
Процедура ПолучитьМакетНаСервере()
Ком = ПолучитьОбщийМакет(«ПФ_DOC_Договор»);
Ком.Application.Visible = 1;
конецПроцедуры
&НаКлиенте
Процедура Напечатать(Команда)
Состояние(НСтр(«ru = ‘Выполняется формирование печатных форм'»));
ПолучитьМакетНаСервере();
КонецПроцедуры
Так работает?
22 — 02.12.13 — 12:17
(4) я читал
23 — 02.12.13 — 12:19
(21) Сделал так, выскочила другая ошибка
Поле объекта не обнаружено (Application)
Ком.Application.Visible = 1;
Я еще раз повторюсь, делал по примеру, который приведен в книге.
24 — 02.12.13 — 12:20
Ну если не работает, как там приведен, вот я спрашиваю у Вас все, форумчане. Так как считаю этот форум одним из лучших по 1С, почти всегда тут можно найти решение проблем
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 |
434 / 305 / 92 Регистрация: 28.05.2014 Сообщений: 1,247 |
|
13.12.2017, 13:53 |
2 |
Владислаучык, в той же статье автор пишет ещё следующее: Скорее всего проблема в ворде или в правах системы. Он корректно установлен? Попробуйте другую версию Ворда. Ну или на крайний случай можно проделать это на другой машине.
1 |
3 / 3 / 7 Регистрация: 21.03.2013 Сообщений: 638 |
|
13.12.2017, 14:09 [ТС] |
3 |
0 |
Владислаучык 3 / 3 / 7 Регистрация: 21.03.2013 Сообщений: 638 |
||||||||
13.12.2017, 16:52 [ТС] |
4 |
|||||||
Phil, Да, такой тип Добавлено через 2 часа 42 минуты
Так макет нельзя вернуть, а если на сервере сделать сразу, то тоже ошибка отсутствует отображение типа для ActiveDocument
0 |
polax 1830 / 1248 / 445 Регистрация: 16.01.2015 Сообщений: 5,458 |
||||
14.12.2017, 10:25 |
5 |
|||
Владислаучык, Вот рабочий код. Неделю назад делал ВПФ с макетом в Ворде
0 |
3 / 3 / 7 Регистрация: 21.03.2013 Сообщений: 638 |
|
15.12.2017, 15:15 [ТС] |
6 |
polax, Приложение = Новый ComObject («Word.Application»); — вот тут ошибка, Ошибка при вызове конструктора (ComObject)
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 |
Либо делаете не на сервере я путаю? может наоборот — делаете на сервере?
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 |
434 / 305 / 92 Регистрация: 28.05.2014 Сообщений: 1,247 |
|
13.12.2017, 13:53 |
2 |
Владислаучык, в той же статье автор пишет ещё следующее: Скорее всего проблема в ворде или в правах системы. Он корректно установлен? Попробуйте другую версию Ворда. Ну или на крайний случай можно проделать это на другой машине. 1 |
3 / 3 / 7 Регистрация: 21.03.2013 Сообщений: 637 |
|
13.12.2017, 14:09 [ТС] |
3 |
0 |
Владислаучык 3 / 3 / 7 Регистрация: 21.03.2013 Сообщений: 637 |
||||||||
13.12.2017, 16:52 [ТС] |
4 |
|||||||
Phil, Да, такой тип Добавлено через 2 часа 42 минуты
Так макет нельзя вернуть, а если на сервере сделать сразу, то тоже ошибка отсутствует отображение типа для ActiveDocument 0 |
polax 1785 / 1209 / 438 Регистрация: 16.01.2015 Сообщений: 5,322 |
||||
14.12.2017, 10:25 |
5 |
|||
Владислаучык, Вот рабочий код. Неделю назад делал ВПФ с макетом в Ворде
0 |
3 / 3 / 7 Регистрация: 21.03.2013 Сообщений: 637 |
|
15.12.2017, 15:15 [ТС] |
6 |
polax, Приложение = Новый ComObject («Word.Application»); — вот тут ошибка, Ошибка при вызове конструктора (ComObject) 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 |
Либо делаете не на сервере я путаю? может наоборот — делаете на сервере? 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 |
|
||
---|---|---|---|
Здравствуйте. Импортировал word-документ в справочник «Филиал», в макет как Active document. Есть форма списка и форма элемента списка, сделал кнопку на форме элемента, при нажатии вызов процедуры: &НаКлиенте Макет = Справочники.Филиал.ПолучитьМакет(«Макет»).Получить();Документ = Макет.Application.Documents(1);Документ.Activate();Макет.Application.Visible = Истина;Макет.Activate(); Надо чтобы документ из макета открывался в ворде у пользователя, просто открывался без заполнения какими-либо данными из формы. Подскажите пожалуйста, добрые специалисты, как это правильно сделать? Может вообще по другому можно, как-то проще? Благодарю. |
Yandex |
|
||
---|---|---|---|
IBReiter |
|
||
---|---|---|---|
Код 1C v 8.3
|
Lavr |
|
||
---|---|---|---|
В жиме толстого клиента все работает, а в web-интерфейсе ошибка: Ошибка при вызове метода контекста (Получить) Через web-интерфейс этот метод должен работать? |
IBReiter |
|
||
---|---|---|---|
Проверил на платформе 8.3.6.2152 и в браузере хром — все ок, работает алоритм. У вас конфигурация вообще какая? |
Lavr |
|
||
---|---|---|---|
Платформа 8.2 Конфигурация УП, с нуля пишу, очень простая с 7-ю справочниками. |
IBReiter |
|
||
---|---|---|---|
Режимы совместимости? как вариант.. Ну а так, попробуйте на 8.3 ещё |
Lavr |
|
||
---|---|---|---|
Не работает в совместимости. Оставлю тогда так: &НаКлиентеПроцедура СлужебнаяЗаявка(Команда) Word = Новый COMОбъект («Word.Application»);Word.Documents.Open («192.168.47.130wudataWU,_Фамилия_Имя,_Филиал_г._Караганда.doc»);Документ = Word.Application.Documents(1);Документ.Application.Visible = Истина;Документ.Activate();КонецПроцедуры |
IBReiter |
|
||
---|---|---|---|
И на 8.3 не работает? Вам совместимость нужна |
Подсказка:Вы можете добавить любую страничку в Социальные закладки щелкнув по значку соцсетей (в вверху) |
Войти или зарегистрироваться
[РЕШЕНО] Ошибка при вызове метода контекста получитьмакет activedocument
Тема в разделе «Конфигурирование на платформе «1С:Предприятие 8″», создана пользователем Persempre, 29 янв 2015.
-
Offline
Persempre
Опытный в 1С- Регистрация:
- 18 июл 2012
- Сообщения:
- 868
- Симпатии:
- 3
- Баллы:
- 29
Доброго времени суток. Суть проблемы в печати как понимаете. Запихнул Word в макет. Дальше заполнил закладки, обработал и тд. На локальной машине работает. А на боевой базе не взлетело. Код ниже, в чем затык не пойму
Код:
&НаКлиенте Процедура УведомлениеОбУвольненииИГ(Команда) УведомлениеОбУвольненииИГНаСервере(); КонецПроцедуры &НаСервере Процедура УведомлениеОбУвольненииИГНаСервере() //ActiveDoc) ТаблицаПараметров.Очистить(); // Открываем Word ActiveDoc = Справочники.ДополнительныеСведенияИФайлы.ПолучитьМакет("УведомлениеОбУвольнении"); WordObj = ActiveDoc.Get(); WordObj.Application.Visible = 1;
Persempre,
29 янв 2015
#1
-
Offline
nomad_irk
Гуру в 1С- Регистрация:
- 20 окт 2008
- Сообщения:
- 9.901
- Симпатии:
- 1.035
- Баллы:
- 204
на сервере не установлен WORD?
nomad_irk,
29 янв 2015
#2
Persempre нравится это.
-
Offline
Draco
Модераторы
Команда форума
Модератор- Регистрация:
- 28 окт 2009
- Сообщения:
- 13.722
- Симпатии:
- 961
- Баллы:
- 204
Ну первый вопрос парвильный Офис то на сервере есть?
Persempre нравится это.
-
Offline
Persempre
Опытный в 1С- Регистрация:
- 18 июл 2012
- Сообщения:
- 868
- Симпатии:
- 3
- Баллы:
- 29
Persempre,
30 янв 2015
#4
-
Offline
nomad_irk
Гуру в 1С- Регистрация:
- 20 окт 2008
- Сообщения:
- 9.901
- Симпатии:
- 1.035
- Баллы:
- 204
nomad_irk,
30 янв 2015
#5
Persempre нравится это.
-
Offline
Draco
Модераторы
Команда форума
Модератор- Регистрация:
- 28 окт 2009
- Сообщения:
- 13.722
- Симпатии:
- 961
- Баллы:
- 204
Ну или права у пользователя под которым это запускается на сервере еть на офис серверный.
-
Offline
Persempre
Опытный в 1С- Регистрация:
- 18 июл 2012
- Сообщения:
- 868
- Симпатии:
- 3
- Баллы:
- 29
Спасибо, вопрос решен. Заполнение нужно было делать на клиенте. Только скорость заполнения адски маленькая. как буд-то человек кнопки нажимает. Как ускорить не знаю
Persempre,
30 янв 2015
#7
(Вы должны войти или зарегистрироваться, чтобы ответить.)
Показать игнорируемое содержимое
- Похожие темы
-
8.х
Ошибка при вызове метода контекста (Выполнить):Синтаксическая ошибка «И»
She,
3 сен 2009, в разделе: Отчеты и обработки для «1С:Предприятие 8»
- Ответов:
- 3
- Просмотров:
- 2.908
-
8.х ОБМЕН
Ошибка выполнения запроса (Ошибка при вызове метода контекста (Выполнить))
AlenaAS,
27 авг 2014, в разделе: Обмен данными в «1С:Предприятие 8»
- Ответов:
- 9
- Просмотров:
- 4.867
-
[РЕШЕНО]
Ошибка в обработке Ошибка при вызове метода контекста (Выполнить) плюс вылет программы
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С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.
Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.
Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ЭтоГруппа ";
НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
КонецЦикла;
1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.
В конфигураторе находим строку и метод, на который указывало сообщение об ошибке, и нажимаем на него правой кнопкой мыши. Выбираем пункт «Поиск в синтакс-помощнике» и платформа самостоятельно ищет справочную информацию по выделенному методу. В справке мы видим не только подробное описание параметров и самого метода, но и пример. Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает.
Чаще всего причиной подобных ошибок выступают следующие факторы:
- Невнимательность;
- Отсутствие опыта или знаний;
- Несогласованность действий разработчиков друг с другом;
- Изменения в методах контекста в новых версиях платформы.
Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.
Lavr |
|
||
---|---|---|---|
Здравствуйте. Импортировал word-документ в справочник «Филиал», в макет как Active document. Есть форма списка и форма элемента списка, сделал кнопку на форме элемента, при нажатии вызов процедуры: &НаКлиенте Макет = Справочники.Филиал.ПолучитьМакет(«Макет»).Получить();Документ = Макет.Application.Documents(1);Документ.Activate();Макет.Application.Visible = Истина;Макет.Activate(); Надо чтобы документ из макета открывался в ворде у пользователя, просто открывался без заполнения какими-либо данными из формы. Подскажите пожалуйста, добрые специалисты, как это правильно сделать? Может вообще по другому можно, как-то проще? Благодарю. |
Yandex |
|
||
---|---|---|---|
IBReiter |
|
||
---|---|---|---|
Код 1C v 8.3
|
Lavr |
|
||
---|---|---|---|
В жиме толстого клиента все работает, а в web-интерфейсе ошибка: Ошибка при вызове метода контекста (Получить) Через web-интерфейс этот метод должен работать? |
IBReiter |
|
||
---|---|---|---|
Проверил на платформе 8.3.6.2152 и в браузере хром — все ок, работает алоритм. У вас конфигурация вообще какая? |
Lavr |
|
||
---|---|---|---|
Платформа 8.2 Конфигурация УП, с нуля пишу, очень простая с 7-ю справочниками. |
IBReiter |
|
||
---|---|---|---|
Режимы совместимости? как вариант.. Ну а так, попробуйте на 8.3 ещё |
Lavr |
|
||
---|---|---|---|
Не работает в совместимости. Оставлю тогда так: &НаКлиентеПроцедура СлужебнаяЗаявка(Команда) Word = Новый COMОбъект («Word.Application»);Word.Documents.Open («\192.168.47.130wudataWU,_Фамилия_Имя,_Филиал_г._Караганда.doc»);Документ = Word.Application.Documents(1);Документ.Application.Visible = Истина;Документ.Activate();КонецПроцедуры |
IBReiter |
|
||
---|---|---|---|
И на 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)