| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Всем здравствуйте! 
		
		
		
		
		
		
		
	В форме 7023 Sales Price Worksheet на кнопке Функции добавил MenuItem, кот. вызывает новый отчет для импорта цен из Excel: ImportSalesPricefromExcel.RUN; (где ImportSalesPricefromExcel - это переменная типа Report, соответствующая новому отчету). В отчете установлено свойство ProcessingOnly=True; один DataItem Integer с фильтром на 1. В отчете содержится следующий код: На OnPreReport: IF NOT CREATE(xlApp,TRUE) THEN BEGIN CLEAR(xlApp); ERROR(Text000); END; На Integer - OnAfterGetRecord(): [Делаются разные проверки на заполненность iFile, iSheet;] xlApp.Visible := FALSE; xlApp.Workbooks.Open(iFile); xlBook := xlApp.ActiveWorkbook; [проверка на существование листа с именем iSheet;] xlSheet := xlBook.Worksheets.Item(iSheet); xlSheet.Activate; xlRange := xlSheet.UsedRange; IF Found THEN BEGIN Import(); //В функции Import просматриваю таблицу Excel и заполняю таблицу 7023 Sales Price Worksheet. xlBook.Save; MESSAGE(Text005); END; xlBook.Close(FALSE); xlApp.Quit; CLEAR(xlApp); В Text005 содержится 'Загрузка завершена'. После завершения работы отчета иногда!!! появляется сообщение <<'Импорт Цен Продажи из Excel' не может быть закрыто, так как система работает>>, и уже за ним <<Загрузка завершена>>. Причем первое сообщение появляется не всегда, иногда после второго запуска, иногда после первого, иногда после третьего... При пошаговом выполнении в Debugger оно вообще никогда не появляется. Причем загрузка выполняется корректно вне зависимости от появления этого сообщения. В чем может быть дело??? При запуске отчета из ObjectDesigner, а не из формы 7023 подобного сообщения не наблюдалось. Что предпринималось для решения проблемы: -для вызова отчета использовался Report.Run(50005); -для вызова отчета использовались свойства Action и RunObject у MenuItem. -много еще всего. P.S. Разработка ведется в Navision 5.0, хотя, скорее всего, та же ошибка и в других версиях.  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Скорей всего он выполняет цикл: На Integer - OnAfterGetRecord(): 
		
		
		
		
		
		
		
	а в ней он пытается закрыть книгу после первого цикла. я думаю должно быть так: Код: IF Found THEN BEGIN Import(); //В функции Import просматриваю таблицу Excel и заполняю таблицу 7023 Sales Price Worksheet. xlBook.Save; MESSAGE(Text005); END ELSE BEGIN xlBook.Close(FALSE); xlApp.Quit; CLEAR(xlApp); END;  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			ImportSalesPricefromExcel.RUNMODAL;
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			by_HT, в свойствах DataItem указан фильтр только на 1 (SORTING(Number) WHERE(Number=CONST(1))). 
		
		
		
		
		
		
		
	Пробовал ставить BreakPoint в OnAfterGetRecord - он заходит туда только один раз. Чтобы Excel не висел в процессах, в случае успеха тоже надо делать xlBook.Close(False); xlApp.Quit; Clear(xlApp); Я привел сокращенный код, в оригинале этот кусок такой: IF Found THEN BEGIN xlSheet := xlBook.Worksheets.Item(iSheet); xlSheet.Activate; Import(); xlBook.Save; MESSAGE(Text005); END ELSE BEGIN xlBook.Close(FALSE); xlApp.Quit; CLEAR(xlApp); ERROR(Text008); END; xlBook.Close(FALSE); xlApp.Quit; CLEAR(xlApp); Romeo, с Runmodal пробовал уже, вообще странные вещи получаются: форма запроса отчета закрыватеся, отчет начинает работать, появляется окно, что "...не может быть закрыто, так как система работает", потом мо сообщение, что Загрузка завершена, потом при возвращении фокуса в табличную часть формы 7023 опять появляется форма запроса моего отчета (заполненная, с именем файла Excel, с именем листа и т.д.) !!! и так по кругу. Но иногда, как и в случае с Run, все работает. У меня есть подозрение, что Navision пытается закрыть отчет не дождавшись, пока завершится вся работа внутри отчета (типа закрытия объектов Automation; в таблице, куда произвожу запись, некоторые поля заполняются через SalesPriceWksh.Validate(); SalesPriceWksh.Insert(True), т.е. с обработчиком; в функции Import вначале SalesPriceWksh.LOCKTABLE, а в конце Commit (хотя пробовал их комментарить, дело не в них)).  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Falcongeo, а вы часом индикатор процента выполнения не выводите на экран во время импорта?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Может OnPostDataItem, а не OnAfterGetRecord!
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Milk, не, явно никаких диалоговых окон не вывожу дополнительно. ShowPrintStatus в свойствах отчета = Yes, но для ProcessingOnly = Yes он не имеет значения вроде.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			by_HT, переделал все в OnPostDataItem - с третьего раза все равно появилось это сообщение! 
		
		
		
		
		
		
		
	 ((
		 | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Первый раз такое сообщение появилось, причем не понятно как от него избавиться теперь... 
		
		
		
		
		
		
		
	Проблема не именно с моим компьютером, на других тоже иногда появлятеся.  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Интересно, что с первого раза ничего не появляется... Обычно раза со второго-третьего, причем параметры на форме запроса (типа цены включают НДС или не включают, параметры округления и т.п.) должны быть различны в разных запусках...
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Поступило предложение добавить Sleep(1000), чтобы подождать и дать дополнительное время 
		
		
		
		
		
		
		
	системе на закрытие Excel. В обоих приведенных ниже вариантах xlBook.Close(FALSE); xlApp.Quit; SLEEP(10000); CLEAR(xlApp); xlBook.Close(FALSE); xlApp.Quit; CLEAR(xlApp); SLEEP(10000); ошибка все равно появляется!!! А 10 секунд - это большое время. Есть ли еще какие-то варианты решения проблемы? Могу выложить объекты где-нибудь, если кто-то хочет попробовать...  | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Попробуйте запускать отчет на форме, сначала очищая переменную report 
		
		
		
		
		
		
		
	CLEAR(ImportSalesPricefromExcel); ImportSalesPricefromExcel.RUN;  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Andrey, спасибо за идею. 
		
		
		
		
		
		
		
	Попробовал CLEAR(ImportSalesPricefromExcel); ImportSalesPricefromExcel.RUN; но с 3 раза все равно появилось сообщение. В отчете еще используется CU Common Dialog Management для выбора файла. Поэтому в OnInitReport добавил ClearAll на всякий случай. Но ошибка осталась! Пробовал еще не пользоваться окном выбора файла, а просто вводить имя файла в поле ввода - все равно ошибка...  | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Спасибо, helga! 
		
		
		
		
		
		
		
	Так и сделали. Сначала думали открыть Excel-файл, прочитать информацию, добавить текстовые комментарии, сохранить и закрыть. Но не получилось. После обработки делаем Excel видимым для пользователя и не делаем Quit: и результат можно сразу посмотреть, и ошибки не появляются ![]() Всем спасибо!  | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Helga, не совсем понял насчет FALSE. 
		
		
		
		
		
		
		
	Если использовать код XlAppl.Visible(FALSE); XlAppl.UserControl(FALSE); CLEAR(XlAppl); , то получим висящий в процессах Excel и все.  | 
| 
	
 | 
| 
			
			 | 
		#16 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
 
		 | 
| 
	
 |