| 
			
			 | 
		#1 | 
| 
			
			 Administrator 
		
			
	 | 
	
	
	
		
		
			
			
			Как в query создать relation вида...
			 
			
			... неравно. 
		
		
		
		
		
		
			Например, хочу сделать query вида: <pre> InventTrans T1, T2; select T2 join T1 where T2.InventDimId == T1.InventDimId && T2.InventTransId != T1.InventTransId;</pre> Если у кого-нибудь есть идеи, как это реализовать с помощью query, пожалуйста, поделитесь. 
				__________________ 
		
		
		
		
	Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Не очень понятен смысл этого выражения. Попарно все движения с одинаковой складской аналитикой. А зачем? Это ж офигительная выборка получится. А смысла никакого... 
		
		
		
		
		
		
			
		
		
		
		
	В любом случае - неравенство это тип связи notexist. А почему именно query? Почему не хочешь выбрать все InventDim'ы, а затем проверить внутри на несовпадение? Среди выбранного богатства совпадающие inventTransID составят несколько процентов... Т.е. с запросом провозишься, а выиграешь несколько процентов... Стоит ли?  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Administrator 
		
			
	 | 
	
	
	
		
		
			
			
			Наверное, не очень корректно сформулировал...
			 
			
			В виде SQL-запросов то, что я хочу сделать, выглядит примерно так: 
		
		
		
		
		
		
			<pre> InventTrans T1, T2; select firstonly T1 where T1.InventTransId == X; while select T2 where T2.InventDimId == T1.InventDimId && T2.InventTransId != T1.InventTransId { // bla, bla, bla... }</pre> Это я хочу сделать с помощью query, чтобы использовать эту выборку в отчете. Проблема в том, что при создании query для отчета единственный доступный тип связи, это "==", причем сравниваются только поля (с фиксированными величинами сравнивать нельзя). Правда, если делать отчет мастером отчетов, то иногда получается сравнить с фиксированной величиной (эти связи добавляются автоматически), а вот в ручную такую связь добавить не удается. Можно поподробнее про связь notexist. Каким образом ее создать? 
				__________________ 
		
		
		
		
	Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			notexist не надо создавать это свойство JoinMode  у датасорса. 
		
		
		
		
		
		
			
		
		
		
		
	Насчет мастера и сравнения с константой. Можно подробнее?  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Administrator 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Изначально опубликовано mazzy  
Насчет мастера и сравнения с константой. Можно подробнее? 
				__________________ 
		
		
		
		
	Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Ладно - поделюсь стратегическим знанием  
		
		
		
		
		
		
		
	![]() static void FedTest(Args _args) { Query qry; QueryRun qrun; InventTrans inventTrans1,inventTrans2; QueryBuildDataSource qbds; QueryBuildRange qbr; qry = new Query(); qbds=qry.addDataSource(tablenum(inventTrans),"it1"); qbds=qbds.addDataSource(tablenum(inventTrans),"it2"); qbds.relations(false); qbr=qbds.addRange(fieldnum(inventTrans,voucher)); qbr.value("( (it1.InventDimId != it2.InventDimId ) && (it1.inventTransId == it2.inventTransId) )"); qrun = new QueryRun(qry); qrun.reset(); while (qrun.next()) { inventTrans1 = qrun.getNo(1); inventTrans2 = qrun.getNo(2); print inventTrans1.InventTransId, " ", inventTrans1.InventDimId," ",inventTrans2.InventTransId," ",inventTrans2.inventDimId; pause; } }  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Administrator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Спасибо, но это фильтрация через Range  
		
		
		
		
		
		
			  В принципе, тоже подойдет, но просто ради спортивного интереса я пытаюсь ее сделать через relation. Кажется, mazzy прав, стоит попробовать JoinMode NotExist. Пока не было времени проверить. Как сделаю, сообщу. 
				__________________ 
		
		
		
		
	Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Если при использовании данного подхода включить трассировку SQL-запросов, можно увидеть, что Axapta генерирует вполне правильный join двух таблиц, который очень даже быстро отрабатывает. 
		
		
		
		
		
		
		
	Собственно - не вижу никаких преимуществ использования relation в данной ситуации.  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			max, спасибо. Только узнать бы "когда" она это делает. 
		
		
		
		
		
		
		
	fed, запрос генерируется нормальный. Это да. Есть только один недостаток: это делается через программирование. А как сделать без программирования? И еще одно замечание: если через программирование, то второе условие в range value лишнее. Лучше прилинковать таблицы явно через addDynalink, а не через range.  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Привет mazzy ! 
		
		
		
		
		
		
		
	Ну - собственно - если у тебя две одинковых таблицы в запросе отчета, то тебе все равно придеться метод fetch перепрограммировать, иначе тебе до нужного экземпляра таблицы не добраться. Кстати - и за что же ты так программирование не любишь ? Я же не предлагаю систему корреспонденции проводок переделать  .
		 | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Да. точно. Придется. Я не подумал об этом. 
		
		
		
		
		
		
		
	Программирование я люблю. Просто мне кажется, что программисты очень часто забывают о стандартных и штатных фичах программы (и сам такой). В результате строки срываются на ровном месте. Поэтому первый вопрос, который я себе задаю - как это сделать без программирования. Кроме того, Аксапта позиционируется как готовая программа. Она таковой и является. В моей Аксапта-практике - если возникает необходимость глобального программирования, то чаще всего я чего-то не понимаю или не знаю. Например, этот вопрос max'а: сделать query вида. В такой формулировке можно сделать только программированием. НО! Наверняка макс не просто так вопрос задает. Наверняка он решает какую-то важную задачу. Уверен, что существует решение его задачи без программирования. Уверен, что его задачу можно решить в Аксапте быстрее и эффективнее, если решать ее без программирования. Max, скажи, что за проблема то?  | 
| 
	
 |