AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.11.2007, 12:05   #1  
Daido is offline
Daido
Участник
Аватар для Daido
 
105 / 10 (1) +
Регистрация: 13.07.2007
как юзать чужой wordDocument
привет всем, подскажите пожалуйста, скажем есть чужой метод Create_Report(EmplId)
X++:
 void Create_Report(EmplId _emplid) 
wordDocument.tableAddRow();
 wordDocument.tableInsertValue(i,1,VirtualNetworkEducation.description);
 wordDocument.tableInsertValue(i,2,VirtualNetworkEducation.EducationDiploma);
как мне юзать с своего класса
X++:
 Reports.Create_Report(EmplId);
т.е передавая EmplId хочу сформировать отчет с помощью класса Reports.Create_Report
Старый 02.11.2007, 13:09   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Daido, предполагаю, что класс Reports, что бы это не было, предоставляет интерфейс для вывода файлов в Ворд - в том числе он сам инициализирует нужные классы.
Поэтому wordDocument там видимо инициализируется где-то при инициализации класса.
Старый 02.11.2007, 13:26   #3  
Daido is offline
Daido
Участник
Аватар для Daido
 
105 / 10 (1) +
Регистрация: 13.07.2007
не совсем вас понел kashperuk
т.е я открываю сам шаблон
X++:
wordDocument = new ComWordDocument_RU();
 wordDocument.newFile(templateFile, false);
чужой класс формирует отчет
X++:
Reports.Create_Report(EmplId);
потом мне надо ещё раз в ту книгу доступ получить (сохранить куда то и закрыть)
X++:
 wordDocument.documentSaveAs("C:\\My_Report.doc");
 wordDocument.quitApplication(true);
кстатье,я не могу получить доступ 2 раз к этой книге, вроде закрываю,вроде в процессе WINWORD.EXE не висит,а пишет что файл занят другим процессом,я не сколько раз формирую шаблон и сохраняю под "C:\\My_Report.doc" или я не правильно закрываю, но это 2-й вопрос

Последний раз редактировалось Daido; 02.11.2007 в 13:43.
Старый 02.11.2007, 13:35   #4  
Daido is offline
Daido
Участник
Аватар для Daido
 
105 / 10 (1) +
Регистрация: 13.07.2007
X++:
COM doc;
 COM app;
  wordDocument.documentSaveAs("C:\\Report_T2.doc");
   doc =wordDocument.getComDocument();
    app = doc.Application();
    doc.close(false);
    app.quit(false);
как закрыть ворд ? вроде закрывается,в процессе не висит,а когда повторно хочу сохранить файл,пишет
Цитата:
Данный файл открыт токлько для чтения
(С:\Report_T2.doc)
дело в том что я этот шаблон несколько раз формирую и сохраняю в С:\Report_T2.doc

Последний раз редактировалось Daido; 02.11.2007 в 14:44.
Старый 02.11.2007, 15:14   #5  
Daido is offline
Daido
Участник
Аватар для Daido
 
105 / 10 (1) +
Регистрация: 13.07.2007
и так пробовал
X++:
  wordDocument.documentSaveAs("C:\\Report_T2.doc");
                     wordDocument.quitApplication(true);
                     wordDocument.finalize();
Цитата:
Данный файл открыт токлько для чтения
(С:\Report_T2.doc)
Старый 02.11.2007, 16:51   #6  
e@gle is offline
e@gle
MCTS
MCBMSS
 
164 / 72 (3) ++++
Регистрация: 11.04.2005
Адрес: Минск
Все вроде с большего нормально. Должен закрываться и открываться корректно.
А как у вас отработает такой вот джоб, если его запустить несколько раз?
X++:
static void Job98(Args _args)
{
    COM         COMApplication, comDocuments, comDocument;
    ;

    COMApplication  = new COM("Word.Application");
    comDocuments    = COMApplication.Documents();
    COMDocument     = comDocuments.Add("c:\\1.doc");


    COMDocument.saveAs("c:\\1.doc");
    COMDocument.saved(true);
    COMDocument.finalize();
    COMApplication.Quit();
}
__________________
С уважением, Павел Цераниди.
На пути к совершенству нет конца. Каждое новое достижение является отправной точкой для следующего крупного шага.
Старый 03.11.2007, 07:45   #7  
Daido is offline
Daido
Участник
Аватар для Daido
 
105 / 10 (1) +
Регистрация: 13.07.2007
инфолог пишет
Цитата:
Сообщение (10:45:03)
Метод "Add" в COM-объекте класса "Documents" возвратил код ошибки 0x800A141F (<неизвестно>), который означает: Не удалось прочитать документ. Возможно, он поврежден.
Попробуйте выполнить следующие действия:
* Откройте файл с помощью команды ''Открыть и восстановить''.
* Откройте файл с помощью конвертера резервных копий.
пока так решил сделать, делаю батник (.bat) с текстом
Цитата:
del *.doc
и создаю tmp папку и сохраняю файл под именем EmplId, каждый раз при открытий своего класса запускаю свои батник только как с DAX запустить внешний приложение .bat

Последний раз редактировалось Daido; 03.11.2007 в 08:04.
Старый 03.11.2007, 08:21   #8  
Daido is offline
Daido
Участник
Аватар для Daido
 
105 / 10 (1) +
Регистрация: 13.07.2007
может мне надо закрыть документ с помощью метода closeDocument, подскажите параметры метода closeDocument
пишу
Цитата:
wordDocument.closeDocument(true,1);
пишет
Цитата:
документ должен быть переопределен
Старый 05.11.2007, 16:29   #9  
e@gle is offline
e@gle
MCTS
MCBMSS
 
164 / 72 (3) ++++
Регистрация: 11.04.2005
Адрес: Минск
Цитата:
инфолог пишет...
Это на джоб, приведенный ранее?

Батник запустить:
Цитата:
WinApi::shellExecute("c:\\1.bat");
__________________
С уважением, Павел Цераниди.
На пути к совершенству нет конца. Каждое новое достижение является отправной точкой для следующего крупного шага.
Старый 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 предсказуемо подключится в единственную сессию.
Старый 07.11.2007, 14:19   #11  
Daido is offline
Daido
Участник
Аватар для Daido
 
105 / 10 (1) +
Регистрация: 13.07.2007
всем спасибо, вопрос снять, разобрался )))
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Интеграция Аксапты 3.0 с "чужой" зарплатой renat DAX: Программирование 11 04.08.2003 16:33
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 12:44.