|
Оболочка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(); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |