| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Ошибки Word 2003 при работе в терминальном режиме
			 
			
			AXAPTA 2.5 SP3 + Word 2003 
		
		
		
		
		
		
		
	Через ComWordDocument_RU открываю заренее созданный файл шаблона, наполняю имеющиеся в нем FormField и показываю результат пользователю. Если работа происходит в обычном сетевом режиме, т.е. экземпляр Word создается на машине клиента, то все в порядке. Но если приложение запускается через терминал, то непредсказуемым образом, на самых разных командах выскакивают совершенно "идиотские" сообщения об ошибках. Ну, например, на команде m_comApplication.version() Может выскочить "неверное число параметров"! Самое неприятное в том, что возникает не какая-то одна фиксированная ошибка, а ошибки возникают именно случайным образом. На случайной команде. Соответственно, иногда документ формируется вполне успешно и без ошибок. Полное ощущение, что иногда теряются или перепутываются адреса памяти. Как будто вместо ссылки на один объект по тому же адресу оказалась ссылка на другой объект. Хотя и в области памяти отведенной для Word В чем может быть причина подобного поведения? AXAPTA 2.5 SP3 + Word 2003  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Может быть причина в версии операционной системы ? 
		
		
		
		
		
		
		
	На клиенте у вас наверняка win2000 или XP А при работе в терминалке наверняка серверная ось а-ля Win2003.  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Да. Ну и что? Каким образом это может влиять? 
		
		
		
		
		
		
		
	Насколько я понимаю, при работе в терминальном режиме я полностью работаю в Win2003. Есть конфликт Office 2003 и Win2003?  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Злыдни 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А установку оffice на TerminalServer проводили с учетом рекомендаций? Там специальный ключик есть и последовательность установки
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании.  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			И чем отличается установка на сервер от установки на обычный ПК? Какие специальные ключи и последовательность установки?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Володя,  
		
		
		
		
		
		
		
	посмотри по ссылке http://support.microsoft.com/kb/828955/ Возможно, при установке Office было нарушено следующее: Цитата: 
	
		
			По умолчанию некоторые компоненты имеют состояние Недоступно. Не меняйте состояние таких компонентов на Запускать с моего компьютера. Это может привести к возникновению неполадок в работе приложений Office, которые используют данные компоненты. 
Внимание! По умолчанию некоторые компоненты имеют состояние Недоступно. Это необходимо для оптимизации работы в среде служб терминалов, включая устранение непредвиденных ошибок. Не изменяйте состояние таких компонентов на значение «Запускать с моего компьютера».  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Да, забыл... 
		
		
		
		
		
		
		
	А сервиспак на офис установлен? Должен быть SP2. Сначала попробуй установить его. Если уже установлен, то накати на новую установку офиса. Если будут проблемы, см. http://support.microsoft.com/kb/906323  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Дима, спасибо, попробуем переустановить Office. Хотя, конечно "найти другую терминалку, где нет Office" пока невозможно.  
		
		
		
		
		
		
		
	А SP2 уже накатили.  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Злыдни 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
Цитата: 
	
		
			Сообщение от somebody
			 
 
			Володя,  
		
	посмотри по ссылке http://support.microsoft.com/kb/828955/ Возможно, при установке Office было нарушено следующее: Надо снести и заново поставить Office. Или, как положено, поставить на другую терминалку, где нет Office. 
				__________________ 
		
		
		
		
	люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании.  | 
| 
	
 | 
| 
			
			 | 
		#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). | |
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			ага, получается, запустить и не дышать.  
		
		
		
		
		
		
			
		
		
		
		
	Но, спасибо за описание.  | 
| 
	
 | 
| 
			
			 | 
		#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.  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Пробуй Microsoft Office 2003 Русская версия, там всё норм должно работать
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Подниму старую тему  
		
		
		
		
		
		
		
	![]() Волею судеб сейчас мы работаем на Axapta 3.0 SP4 Build #11.0 При том корпоративный MS Office уже 2007 SP1 При передаче данных в Excel стала все чаще появляться ошибка "неверное число параметров". Прочитала эту тему, но в том проблема, что у нас нет возможности воспользоваться добавлением команды infolog.yield(); для устранения проблемы. Такого метода на infolog у нас просто нет. Есть ли смысл написать его самим? Кто может поделиться этим волшебным кодом?  | 
| 
	
 | 
| 
			
			 | 
		#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). | |
| 
			
			 | 
		#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)); Подскажите, как все же еще можно переделать.  | 
| 
	
 | 
| 
			
			 | 
		#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)); Подскажите, как все же еще можно переделать.  | 
| 
	
 | 
| 
			
			 | 
		#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). | |
| Теги | 
| документация, com-объект | 
| 
	
	 | 
	
| Опции темы | Поиск в этой теме | 
| Опции просмотра | |
		
  |