|
01.03.2007, 11:02 | #1 |
Участник
|
Ошибки Word 2003 при работе в терминальном режиме
AXAPTA 2.5 SP3 + Word 2003
Через ComWordDocument_RU открываю заренее созданный файл шаблона, наполняю имеющиеся в нем FormField и показываю результат пользователю. Если работа происходит в обычном сетевом режиме, т.е. экземпляр Word создается на машине клиента, то все в порядке. Но если приложение запускается через терминал, то непредсказуемым образом, на самых разных командах выскакивают совершенно "идиотские" сообщения об ошибках. Ну, например, на команде m_comApplication.version() Может выскочить "неверное число параметров"! Самое неприятное в том, что возникает не какая-то одна фиксированная ошибка, а ошибки возникают именно случайным образом. На случайной команде. Соответственно, иногда документ формируется вполне успешно и без ошибок. Полное ощущение, что иногда теряются или перепутываются адреса памяти. Как будто вместо ссылки на один объект по тому же адресу оказалась ссылка на другой объект. Хотя и в области памяти отведенной для Word В чем может быть причина подобного поведения? AXAPTA 2.5 SP3 + Word 2003 |
|
01.03.2007, 11:20 | #2 |
Участник
|
Может быть причина в версии операционной системы ?
На клиенте у вас наверняка win2000 или XP А при работе в терминалке наверняка серверная ось а-ля Win2003. |
|
01.03.2007, 11:36 | #3 |
Участник
|
Да. Ну и что? Каким образом это может влиять?
Насколько я понимаю, при работе в терминальном режиме я полностью работаю в Win2003. Есть конфликт Office 2003 и Win2003? |
|
01.03.2007, 14:41 | #4 |
Злыдни
|
А установку оffice на TerminalServer проводили с учетом рекомендаций? Там специальный ключик есть и последовательность установки
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. |
|
01.03.2007, 15:01 | #5 |
Участник
|
И чем отличается установка на сервер от установки на обычный ПК? Какие специальные ключи и последовательность установки?
|
|
01.03.2007, 16:04 | #6 |
Участник
|
Володя,
посмотри по ссылке http://support.microsoft.com/kb/828955/ Возможно, при установке Office было нарушено следующее: Цитата:
По умолчанию некоторые компоненты имеют состояние Недоступно. Не меняйте состояние таких компонентов на Запускать с моего компьютера. Это может привести к возникновению неполадок в работе приложений Office, которые используют данные компоненты.
Внимание! По умолчанию некоторые компоненты имеют состояние Недоступно. Это необходимо для оптимизации работы в среде служб терминалов, включая устранение непредвиденных ошибок. Не изменяйте состояние таких компонентов на значение «Запускать с моего компьютера». |
|
01.03.2007, 16:16 | #7 |
Участник
|
Да, забыл...
А сервиспак на офис установлен? Должен быть SP2. Сначала попробуй установить его. Если уже установлен, то накати на новую установку офиса. Если будут проблемы, см. http://support.microsoft.com/kb/906323 |
|
01.03.2007, 16:57 | #8 |
Злыдни
|
Цитата:
Цитата:
Сообщение от somebody
Володя,
посмотри по ссылке http://support.microsoft.com/kb/828955/ Возможно, при установке Office было нарушено следующее: Надо снести и заново поставить Office. Или, как положено, поставить на другую терминалку, где нет Office.
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. |
|
01.03.2007, 16:50 | #9 |
Участник
|
Дима, спасибо, попробуем переустановить Office. Хотя, конечно "найти другую терминалку, где нет Office" пока невозможно.
А SP2 уже накатили. |
|
21.02.2008, 18:20 | #10 |
Участник
|
Если у кого-то возникнет похожая проблема, то решение найдено (не прошло и года ). Основные причины следующие:
1. При передаче значений, отличных от целочисленных, в методы объектов Word желательно оборачивать их в класс COMVariant(). Т.е. передавать в качестве параметра не строку, а объект. Следует обратить внимание на методы создания нового документа на базе шаблона и работу с полями Word. Например, создание документа на базе шаблона: X++: COM comDocuments; COMVariant varTemlateName; ; (...) if (_template) { varTemlateName = new COMVariant(COMVariantInOut::IN, COMVariantType::VT_BSTR); varTemlateName.bStr(_template); m_comDocument = comDocuments.Add(varTemlateName); } else { m_comDocument = comDocuments.Add(); } (...) 2. Следует избегать сложных "вложенных" функций с включением обращений к свойствам Com объектов. Например, высока вероятность ошибки при использовании такого синтаксиса X++: if (str2num(m_comApplication.version()) >= 9) X++: numVersion = str2num(m_comApplication.version());
if (numVersion >= 9) Короче, на терминалке "халява" - не проходит. Необходимо более строго следить за синтаксисом. |
|
|
За это сообщение автора поблагодарили: russ (1), kashperuk (5), Logger (5), alex55 (1), plumbum (1). |
21.02.2008, 18:28 | #11 |
Участник
|
ага, получается, запустить и не дышать.
Но, спасибо за описание. |
|
21.03.2011, 09:59 | #12 |
Участник
|
Аналогичная проблема возникает и при создании отчетов в ексель.
По утверждению EMEA Dynamics AX Support, одной из причин может быть фишка операционки - ghost window. Они предлагают следующие варианты решения проблем: Цитата:
Workaround 1:
Disable Window Ghosting as described in this post. Workaround 2: Debug the X++ code down to the line that is causing the error. Once identified, insert one line before this statement a call to the yield method of the xInfo class. Example: infolog.yield(); namespace = outlook.getNamespace(#mapidef); Workaround 3: Debug the X++ code down to the line that is causing the error. Once identified, place the statement inside a try / catch block. In the catch block simply retry the operation. Example: int retryCount = 3; //... try { namespace = outlook.getNamespace(#mapidef); } catch(Exception::Error) { retryCount--; if(retryCount > 0) retry; else throw(Exception::Error); } X++: infolog.yield(); Последний раз редактировалось jkspb; 21.03.2011 в 10:05. |
|
27.09.2011, 10:41 | #13 |
Участник
|
Пробуй Microsoft Office 2003 Русская версия, там всё норм должно работать
|
|
01.11.2012, 06:36 | #14 |
Участник
|
Подниму старую тему
Волею судеб сейчас мы работаем на Axapta 3.0 SP4 Build #11.0 При том корпоративный MS Office уже 2007 SP1 При передаче данных в Excel стала все чаще появляться ошибка "неверное число параметров". Прочитала эту тему, но в том проблема, что у нас нет возможности воспользоваться добавлением команды infolog.yield(); для устранения проблемы. Такого метода на infolog у нас просто нет. Есть ли смысл написать его самим? Кто может поделиться этим волшебным кодом? |
|
01.11.2012, 11:09 | #15 |
Участник
|
Перепешите метод класса ComOfficeDocument_RU.visible() следующим образом
X++: // Show / hide application public void visible(boolean _bVisible = true) { ComVariant comVariant; COMDispFunction funcDisp; ; if (!m_comApplication) throw error(StrFmt("@DIS100406", this.GetApplicationName())); this.activate(_bVisible); // Activate application, if necessary comVariant = ComVariant::createFromBoolean(_bVisible); // RTG, 05.08.2010, МВБ --> // По непонятным причинам в Excel 2007 следующая команда ИНОГДА приводит к ошибке // Метод был вызван с неверным числом параметров. // Чтобы ее обойти необходимо сделать присвоение свойству через COMDispFunction // m_comApplication.Visible(comVariant); funcDisp = new COMDispFunction(m_comApplication, "Visible", COMDispContext::PROPERTYPUT); funcDisp.call(comVariant); funcDisp.finalize(); // RTG, 05.08.2010, МВБ <-- }
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
За это сообщение автора поблагодарили: Antonuch (1). |
30.06.2017, 04:46 | #16 |
Участник
|
Прошло время. Волею судеб сейчас мы все еще работаем на Axapta 3.0 SP4 Build #11.0
При том корпоративный MS Office уже 2013. Ошибка работы с Excel снова появилась, причем метод visible() уже переделан. Обращение к Excel происходит вот таким образом: excel = new COMExcelDocument_RU(); excel.newFile(#ReportTemplatePath_FileServer + "ApplicationFSS.xltx", false); excel.insertValue(bookmark, substr(_content, i, 1)); Подскажите, как все же еще можно переделать. |
|
30.06.2017, 07:35 | #17 |
Участник
|
Цитата:
Сообщение от Fizik
Прошло время. Волею судеб сейчас мы все еще работаем на Axapta 3.0 SP4 Build #11.0
При том корпоративный MS Office уже 2013. Ошибка работы с Excel снова появилась, причем метод visible() уже переделан. Обращение к Excel происходит вот таким образом: excel = new COMExcelDocument_RU(); excel.newFile(#ReportTemplatePath_FileServer + "ApplicationFSS.xltx", false); excel.insertValue(bookmark, substr(_content, i, 1)); Подскажите, как все же еще можно переделать. |
|
03.07.2017, 13:42 | #18 |
Участник
|
Цитата:
Сообщение от Fizik
Прошло время. Волею судеб сейчас мы все еще работаем на Axapta 3.0 SP4 Build #11.0
При том корпоративный MS Office уже 2013. Ошибка работы с Excel снова появилась, причем метод visible() уже переделан. Обращение к Excel происходит вот таким образом: excel = new COMExcelDocument_RU(); excel.newFile(#ReportTemplatePath_FileServer + "ApplicationFSS.xltx", false); excel.insertValue(bookmark, substr(_content, i, 1)); Подскажите, как все же еще можно переделать. Вставить значение можно так: X++: public void insertValue(BookMark _bookMark, anyType _anyVal, int _workSheet = 1) { COM comRange; ; this.checkExistDocument(); comRange = this.findRange(_bookMark, _workSheet); this.insertValueInRange(comRange, _anyVal); } X++: // Creates object range type named the same way as Excel bookmark // bookMark -> Excel bookmark name public COM findRange(PPO_MSOfficeBookMark bookMark, int _workSheet = 1) // was protected { COM comRange, comWorkSheet; COM comApplication; ; if (m_comDocument) { comWorkSheet = this.getWorkSheet(_workSheet); comApplication = m_comDocument.application(); comWorkSheet.activate(); if (comWorkSheet && comApplication) { comRange = comApplication.range(bookMark); } } return comRange; } X++: // Exporting value in Range object // comRange -> Range object // anyVal -> Varible for export to Range object protected void insertValueInRange(COM _comRange, anyType _anyVal) { _comRange.value2(_anyVal); }
__________________
// no comments |
|
|
За это сообщение автора поблагодарили: Logger (1). |