Имя: Пароль:
1C
1С v8
Активное окно MS Word 2007. Как лучше сделать?
0 dva1c
 
04.07.13
12:23
Из карточки сотрудника формируется печатная форма в MS Word2007. После формирования MS Word2007 остается в трее Windows.
Для наглядности см. ссылку
http://savepic.org/3867765.jpg
Все работало, но сегодня был выполнен переход на "ферму" из 2-х серверов. Там установлен Word2007 (раньше был Word2003).
После окончания формирования файла Word, он остается в трее, а не активизируется.
Поиск дал ссылки:
v8: 1C+WORD, Разбираю пример
v8: Как сделать окно MS Word активным при печати из 1С?
Книга знаний: v8: Заполнение полей документа Word (шаблон Active Document)
http://msdn.microsoft.com/en-us/library/bb221340(v=office.12).aspx

Вопрос: как сделать без "костылей" (на скриншоте это "Предупреждение"), чтобы сформированный документ, явно показывался на экране (был активным)
Сам текст обработки:

   Попытка
       Договор = ПолучитьМакет("Макет");
       ОбъектWord = Договор.Получить();
       ДокументWord = ОбъектWord.Application.Documents(1);
       ДокументWord.Activate();
   Исключение
       Сообщить(ОписаниеОшибки(),СтатусСообщения.ОченьВажное);
       Возврат Неопределено;
   КонецПопытки;    
   СоздатьИЗаполнитьТЗподстановок();        
   Для Каждого Стр ИЗ ТЗп Цикл
       ПоискИЗаменаВВорде(ДокументWord,Стр.Шаблон,Стр.СтрокаЗамены);        
   КонецЦикла;    
   ОбъектWord.Application.Visible = 1;
   ОбъектWord.Activate();    
   Предупреждение("Создан документ Microsoft Word, он открыт, но его не видно. Поищите его в панели!!!", 60, "***ВНИМАНИЕ***");
       Возврат Неопределено;
1 dva1c
 
04.07.13
12:32
Мне что-то, не совсем понятно: что нужно сделать, чтобы окно Word активизировалось.
Подскажите знающие коллеги!
Заранее спасибо!
2 dk
 
04.07.13
12:36
ОбъектWord.ActiveWondow.Activate();
3 dk
 
04.07.13
12:37
ОбъектWord тип какой?
4 dva1c
 
04.07.13
12:47
(2) ОбъектWord.ActiveWindow.Activate() не помогло.
(3) ОбъектWord - это макет ActiveDocument
5 dk
 
04.07.13
12:52
прям в отладчике какой тип пишет у ОбъектWord
6 dva1c
 
04.07.13
12:54
(5) Сейчас посмотрю отладчиком )
7 dva1c
 
04.07.13
13:05
(5) ОбъектWord - это ComOбъект.
8 dva1c
 
04.07.13
13:08
(5) Сделать ОбъектWord.ActiveWindow.Visible = Истина?
Сейчас оно Ложь.
9 dva1c
 
04.07.13
13:12
Попробовал (8). Мимо денег (
Что можно попробовать?
10 skunk
 
04.07.13
13:13
11 dva1c
 
04.07.13
13:14
(10) Спасибо! Проверяю.
12 dk
 
04.07.13
13:15
раз непонятно что там в ОбъектWord
то ОбъектWord.Application.ActiveWindow visible и activate попробовать
не люблю конструкцию
ОбъектWord = Договор.Получить();
возвращает какой-то недоделанный объект
13 dva1c
 
04.07.13
13:17
(12) А как верно?
(10) Выругалось на
{ВнешняяОбработка.ТрудовойДоговор.МодульОбъекта(328)}: Поле объекта не обнаружено (WindowState)
   ОбъектWord.WindowState = 2;
14 MiniMuk
 
04.07.13
13:25
ОбъектWord = Договор.Получить();
макетом ты получаешь документ а не ворд
корректнее будет
документ = Договор.Получить();
ОбъектWord  = документ .Application
Если докуметы ворда открыт то по идее конструкция
.Documents(1); берет первый документ открытый этой СОМ-моделью ворда.
15 skunk
 
04.07.13
13:28
ДокументWord.ActiveWindow.WindowState
16 George Wheels
 
04.07.13
13:32
Свернуть, развернуть окно?
17 dva1c
 
04.07.13
13:53
Спасибо за рекомендации. Проверяю (15)
18 dva1c
 
04.07.13
14:03
Большое спасибо за помощь (век живи - век учись)!
Вот код:

   Попытка
       Договор = ПолучитьМакет("Макет");
       Документ = Договор.Получить();  //ОбъектWord
       ОбъектWord = Документ.Application;
       ДокументWord = ОбъектWord.Application.Documents(1);
       ДокументWord.Activate();
   Исключение
       Сообщить(ОписаниеОшибки(),СтатусСообщения.ОченьВажное);
       Возврат Неопределено;
   КонецПопытки;    
   СоздатьИЗаполнитьТЗподстановок();        
   Для Каждого Стр ИЗ ТЗп Цикл
       ПоискИЗаменаВВорде(ДокументWord,Стр.Шаблон,Стр.СтрокаЗамены);        
   КонецЦикла;    
   ОбъектWord.Application.Visible = 1;
   ОбъектWord.Activate();    
   ОбъектWord.WindowState = 2;
   ОбъектWord.WindowState = 1;
19 skunk
 
04.07.13
15:08
ОбъектWord.Application.Visible = 1;
   ОбъектWord.Activate();

уже не нужно