| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Проблема с количеством в QueryBuildRange.Value()
			 
			
			Доброго времени суток! Подскажите пож-та в такой ситуации: 
		
		
		
		
		
		
		
	У меня на методе active() одного датасорса происходит вызов QueryBuildRange.Value(x1, x2,.., xn) для фильтрации другого датасорса. И если в метод value() передается много знач. (для 3х все работает норм.) то после нескольких срабатываний active() Аксапта вылетает... Помогите выбраться из сложившейся ситуации  
		 | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 NavAx 
		
			
	 | 
	
	
	
		
		
		
		 
			
			а как она "вылетает" ? Может выдается ошибка SQL-инструкции?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Microsoft Business Solutions-Axapta - обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства. 
		
		
		
		
		
		
		
	Просит отправить отчет в Microsoft и т.д...  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Возможно нужно каждый раз делать qbds.clearRanges?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 NavAx 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Опишите что за источники,  по какому полю идет фильтрация, что за переменные x1, x2,.., xn
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			И за одно скажите, много - это сколько?
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	Безвыходным мы называем положение, выход из которого нам не нравится.  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Источники простые - табл. шапка и табл. строки, переменные - это просто значения itemId по которому связаны таблицы.  
		
		
		
		
		
		
		
	Смысл такой: когда я передвигаюсь по строкам шапки фильтруется табл. строк, но только теми значениями которыми я передаю в QueryBuildRange.Value()... Например для одной записи табл. шапки это будет QueryBuildRange.Value(1, 2, 3) а для другой QueryBuildRange.Value(5, 6, 7, 8). Кстати Аксапта вылетает не только когда несколько раз вызовется active(), достаточно просто закрыть эту форму ![]() Может другой способ есть как это реализовать?  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			1. Попробуйте таки перед присвоением новых значений делать 
		
		
		
		
		
		
			
		
		
		
		
	QBDS.clearRange(fieldNum(YourTable, ItemId)); 2. Вы так числа и передаете? или это вы описались? Добавьте еще queryValue вызов То есть QBR.value(queryValue("'Н1', 'Н2', 'Н3'")); 3. Показывайте код метода active(); (а почему бы не делать это на executeQuery подчиненного датасорса?)  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А QueryBuildRange вы где и как получаете?
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	Axapta v.3.0 sp5 kr2  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Подчиненный датасорс: 
		
		
		
		
		
		
		
	PHP код: 
	
			
	PHP код: 
	
			
	Вот и все что есть.  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			У вас датасоурсы связаны друг с другом? 
		
		
		
		
		
		
			И еще. Почему метод Active() не возвращает значения и нет вызова super() или это вы сокращенно опубликовали? 
				__________________ 
		
		
		
		
		
			Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 29.08.2006 в 13:21.  | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от AndyD
			
			 
У вас датасоурсы связаны друг с другом? 
		
	Последний раз редактировалось laxer; 29.08.2006 в 13:23.  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Может в строке, полученной в selectItemd() - слишком много значений? 472 - максимальное количество
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			откуда такие сведения про 472?  
		
		
		
		
		
		
			
		
		
		
		
	То что строка ограничена понятно, но думаю что по длине, а не по количеству значений. Поправьте если неправ  | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Axapta 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Хм... Ради интереса проверил... 
		
		
		
		
		
		
		
		
			Вот это - вылетает. А если поменять 475 на 474 - работает. При этом если увеличивать длину ренджа, а не кол-во элементов - ничего не меняется...   X++: static void Job666(Args _args) { query q; QueryBuildDataSource qbds; QueryBuildRange qbr; QueryRun qr; LedgerJournalTable l; str a; int i; #define.MaxLength(475) ; for (i=1;i<#MaxLength;i++) { a+=int2str(i)+','; } a+=int2str(#MaxLength); q =new Query(); qbds = q.addDataSource(tablenum(LedgerJournalTable)); qbr = qbds.addRange(fieldNum(LedgerJournalTable, journalNum)); qbr.value(a); qr = new queryRun(q); while (qr.next()) { l = qr.getNo(1); print l.JournalNum; } } Последний раз редактировалось oip; 30.08.2006 в 15:51.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: slava (1). | |
| 
			
			 | 
		#16 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			у меня работает и при MaxLength(1000) 
		
		
		
		
		
		
			
		
		
		
		
	10000 уже не потянул. и я имел ввиду, что если, к примеру, вместо чисел 1.. были бы более длинные числа, типа a+= '00000'+int2str(i) + ','; то вылетало бы уже меньше чем при 474 Может и нет, конечно  | 
| 
	
 | 
| 
			
			 | 
		#17 | 
| 
			
			 Axapta 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от kashperuk
			
			 
у меня работает и при MaxLength(1000) 
		
	10000 уже не потянул. Цитата: 
	
		
			Сообщение от kashperuk
			
			 
и я имел ввиду, что если, к примеру, вместо чисел 1.. были бы более длинные числа, типа  
		
	a+= '00000'+int2str(i) + ','; то вылетало бы уже меньше чем при 474 Может и нет, конечно Я же написал: "При этом если увеличивать длину ренджа, а не кол-во элементов - ничего не меняется... " Последний раз редактировалось oip; 30.08.2006 в 11:10.  | 
| 
	
 | 
| 
			
			 | 
		#18 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Ага. я тоже проверил только что. 
		
		
		
		
		
		
			
		
		
		
		
	Аксапта: 3.0 SP3 трехзвенка, Oracle 10g 2000 слагаемых уже тоже не тянет.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: oip (1). | |
| 
			
			 | 
		#19 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			474 это не длина ренджа, а количество элементов в нем
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#20 | 
| 
			
			 Axapta 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от kashperuk
			
			 
Ага. я тоже проверил только что. 
		
	Аксапта: 3.0 SP3 трехзвенка, Oracle 10g 2000 слагаемых уже тоже не тянет. Проверил у себя на сп3 - тоже 474. Оракла нет, поэтому проверить не могу. ![]() Цитата: 
	
		
			Сообщение от ntr
			
			 
474 это не длина ренджа, а количество элементов в нем 
		
	![]() "При этом если увеличивать длину ренджа, а не кол-во элементов - ничего не меняется... " Последний раз редактировалось oip; 30.08.2006 в 11:15.  | 
| 
	
 |