| 
			
			 | 
		#1 | 
| 
			
			 северный Будда 
		
			
	 | 
	
	
	
		
		
			
			
			Внешняя кверя для фильтрации на форме
			 
			
			Всем доброго времени суток 
		
		
		
		
		
		
			Столкнулся с задачей, которая наверняка могла бы у многих вызвать интерес. Итак, у нас есть 1) форма-листпейдж с головным датасоурсом (например - SalesTable). 2) Пришедшая извне на форму кверя, которая содержит фильтрацию по SalesTable (например - список заказов по клиентам, объединённым неким признаком в CustTable) вопрос - как применить эту кверю к фильтрации на форме? Мы не знаем заранее, какие именно фильтры и на каком уровне вложенности заданы во внешней квере. Соответственно, хотелось бы не делать тупой перебор, а как-то сджойнить их по SalesId, к примеру. P.S. Версия - D365FO PU 27, есличо. Но не думаю, что это критично в данном случае. 
				__________________ 
		
		
		
		
		
			С уважением, Вячеслав Последний раз редактировалось pitersky; 19.08.2019 в 19:15.  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Ну так, попробуйте просто сджойнить: 
		
		
		
		
		
		
		
	DataSourceQuery exists join (ваша query) ?  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Мрачный тип 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
![]() Join "жирной" таблицы на саму себя с разными ограничениями в коде проще и изящнее, но тяжелее для SQL, чем просто воспроизведение ограничений. Может неплохо так "выстрелить" ... P.S. Решал похожую задачу, делая статистический анализатор данных с произвольной формы и произвольного грида с выводом результатов настраиваемых группировок в дерево и возможностью фильтрации с произвольного узла дерева результатов данных в родительском гриде. Вот как раз для фильтрации и использовал первоначально "ленивый" join, но по ходу практического применения пошел по "тупому" пути 
				__________________ 
		
		
		
		
		
			Мы летаем, кружимся, нагоняем ужасы ... Последний раз редактировалось TasmanianDevil; 20.08.2019 в 08:04.  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 северный Будда 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
у меня есть два qbds на SalesTable - из формы и внешняя и как их джойнить? 
				__________________ 
		
		
		
		
	С уважением, Вячеслав  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 NavAx 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Не знаю поможет или нет, но идеи можно поискать тут: 
		
		
		
		
		
		
		
	X++: CFMCustVendPaymProposalQueryHelper.copyRange(); SysQuery::mergeRanges(); SysQuery::copyDynalinks(); SysQuery::copyDataSource();  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Еще как вариант: Через query::insert_recordset() сохранить salesid из внешнего query во временную таблицу. Потом основной query заджойнить с этой таблицей через exists join. Парсить приходящий запрос не придется. Итерироваться по всем записям, чтобы каждый salesId в фильтр запихать - тоже не придется. query::insert_recordset() уйдет на SQL Server как единственный запрос.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: S.Kuskov (5), pitersky (2). | |
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Выгрузить во временную таблицу идентификаторы записей отфильтрованные внешним запросом и приджойнить её. Нужно конечно замерить производительность, но всё сильно будет зависеть от конкретных условий.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			вариантов два. 
		
		
		
		
		
		
			выковыривать в коде все range из входящего query и вставлять их в query формы. сделать вьюху или времяночку на базе входящей квери, и приджойнивать её к источнику формы. 
				__________________ 
		
		
		
		
	Felix nihil admirari  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
делал такое постоянно. например, отфильтруй-ка мне все заказы на продажу, которые связаны с таким-то сейлом по связанной группе комиссионных. ну и так далее. 
				__________________ 
		
		
		
		
	Felix nihil admirari  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А просто открыть две формы рядом? Одну с Вашим отфильтрованным списком, а другая SalesTable. Штатный DynaLink обеспечит первую форму как "оглавление", а подчиненная SalesTable как форму-деталировку 
		
		
		
		
		
		
			Что-то в самой постановке вопрос не правильное. Если выбранных заказов много, то теряется смысл. Меняем "шило" (исходная форма) на "мыло" (SalesTable) с безумными накладными расходами. Если выбранных значений мало, то перебор решает... 
				__________________ 
		
		
		
		
	- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря...  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Administrator 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
				__________________ 
		
		
		
		
	Возможно сделать все. Вопрос времени  | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 примерно вот так перебирать и добавлять нужные поля для фильтрации, если их не очень много. если много и сложно, то времяночка и джойн на неё 
				__________________ 
		
		
		
		
	Felix nihil admirari  | 
| 
	
 | 
| 
	
	 | 
	
		
  |