Показать сообщение отдельно
Старый 06.11.2007, 18:11   #10  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Daido Посмотреть сообщение
т.е я открываю сам шаблон
X++:
wordDocument = new ComWordDocument_RU();
 wordDocument.newFile(templateFile, false);
чужой класс формирует отчет
X++:
Reports.Create_Report(EmplId);
потом мне надо ещё раз в ту книгу доступ получить (сохранить куда то и закрыть)
X++:
 wordDocument.documentSaveAs("C:\\My_Report.doc");
 wordDocument.quitApplication(true);
А вы уверены в том, что отчет Create_Report(EmplId) строится в той же сессии (приложении) Word - т.е. в той, которую вы открываете как new ComWordDocument_RU()? Что-то я сомневаюсь...

Мне кажется, вам нужно сначала запускать чужой отчет, а потом подключаться в эту "чужую" Word-сессию примерно таким оператором:
X++:
wordApp = COM::getObject('Word.Application');
по аналогии с тем, как было сделано для Excel здесь: Как проинициализировать COM уже запущенным приложением (Excel)?

Некоторое неудобство такого подхода заключается в том, что если запущено несколько сессий Ворд (например, вы еще сами вручную редактируете какой-то свой документ), то нельзя предсказать в какую сессию подключится COM::getObject. Поэтому перед началом такого процесса все другие Ворды необходимо закрыть, и тогда COM::getObject предсказуемо подключится в единственную сессию.