| 
			
			 | 
		#21 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			 Кстати, обратите внимание, что у вашем случае активируется кнопка сброса фильтра. Если ее нажать, то увидите что хотите
		
	 
 | 
| 
	
 | 
| 
			
			 | 
		#22 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Эта кнопка активируется в случае расхождения м-ду выполняемым запросом (тот что в QueryRun().Query()) и, так сказать, базовым запросом (который находится в датасорс.Query()). При этом вызывается заново метод датасорс.ExecuteQuery(), который передает в QueryRun() запрос из Query() датасорса. 
		
		
		
		
		
		
			В вашем случае вы изменили запрос датасорс.Query(). Запрос в QueryRun().Query() отличается от него, поэтому активизировалась кнопка. При сбросе измененный запрос попадает в QueryRun() и вы видете его. Обратите внимание, что в фильтрации записей теперь видно ваше условие. 
				__________________ 
		
		
		
		
	Axapta v.3.0 sp5 kr2  | 
| 
	
 | 
| 
			
			 | 
		#23 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Но это значит что пользователь может изменить запрос прямо из формы. а как этого избежать? записать его QueryRun().Query() 
		
		
		
		
		
		
		
	Можно тогда вопрос, мне нужно из набора записей убрать записи. которые находятся в другом наборе, один убирает когда я доавляю в датасорс таблицу, с определенным критерием но с признаком joinMode::NoExistsJoin, вкогда присоеднияю вторуб таблицу со сложным условием - возникает ощущение что это условие не воспринимается и игнорируется.... короче говоря вопрос в следующем , как правильно исключить записи с помощью joinMode::NoExistsJoin, последовательно по 2 наборам записей  | 
| 
	
 | 
| 
			
			 | 
		#24 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Но это значит что пользователь может изменить запрос прямо из формы. а как этого избежать?
		
	 
По поводу второго вопроса - приведите запрос sql который желаете получить 
				__________________ 
		
		
		
		
	Axapta v.3.0 sp5 kr2  | 
| 
	
 | 
| 
			
			 | 
		#25 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			ну например 
		
		
		
		
		
		
		
	Код: Select inventtable.itemid from inventtable where itemid not in (SELECT inventtable.itemid FROM inventtable inner join inventsum on inventtable.itemid = inventsum.itemid where InventSum.Inventdimid = ' АН00000031' AND InventSum.PostedQty + InventSum.Received - InventSum.Deducted + InventSum.Registered - InventSum.Picked - InventSum.ReservPhysical > 0 )  | 
| 
	
 | 
| 
			
			 | 
		#26 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А зачем во вложенном запросе нужна InventTable?
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	Axapta v.3.0 sp5 kr2  | 
| 
	
 | 
| 
			
			 | 
		#27 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			согласен не нужна...  
		
		
		
		
		
		
		
	просто делал запрос на основе других - поторопился, вопрос остается открытым  | 
| 
	
 | 
| 
			
			 | 
		#28 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			сформировал критерий, знаю как запихнуть его с помощью AddRange, 
		
		
		
		
		
		
		
	теперь не знаю как реализовать "отнимание" этих записей  | 
| 
	
 | 
| 
			
			 | 
		#29 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 X++: Query q = new Query(); ; q.addDataSource(tablenum(InventTable)); q.dataSourceTable(tablenum(InventTable)).addDataSource(tablenum(InventSum)); q.dataSourceTable(tablenum(InventSum)).joinMode(JoinMode::NoExistsJoin); q.dataSourceTable(tablenum(InventSum)).addLink(fieldnum(InventTable, ItemId), fieldnum(InventSum, ItemId)); 
				__________________ 
		
		
		
		
	Axapta v.3.0 sp5 kr2  | 
| 
	
 | 
| 
			
			 | 
		#30 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			тк делал,  
		
		
		
		
		
		
		
	но когда добавляешь еще одну таблицу с Jo inMode::NoExistsJoin, второго условия как будто и нет  | 
| 
	
 | 
| 
			
			 | 
		#31 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Если я вас правильно понял, то попробуйте так 
		
		
		
		
		
		
			X++: q.dataSourceTable(tablenum(InventSum)).joinMode(JoinMode::NoExistsJoin); q.dataSourceTable(tablenum(InventSum)).fetchMode(QueryFetchMode::One2One); 
				__________________ 
		
		
		
		
	Axapta v.3.0 sp5 kr2  | 
| 
	
 | 
| 
			
			 | 
		#32 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			fetchMode(Q ueryFetchMode::One2One) - я понимаю что это связано со связью типа 1 -1 или 1 ко многим. но все равно ен объясните причем здесь это?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#33 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			определенное движение есть... но работаето либо одно условие c joinMode::InnerJoin либо второе... 
		
		
		
		
		
		
		
	все действия производятся в init формы  | 
| 
	
 | 
| 
			
			 | 
		#34 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Приведите свой код, как вы формируете запрос.  
		
		
		
		
		
		
			Без этого получается гадание на кофейной гуще  
		
				__________________ 
		
		
		
		
	Axapta v.3.0 sp5 kr2  | 
| 
	
 | 
| 
			
			 | 
		#35 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			По поводу использования fetchMode(QueryFetchMode::One2One) 
		
		
		
		
		
		
			При разборе полетов выяснилось, что при использовании такого режима для следующего Query X++: Query q = new Query(); QueryBuildDatasource qbds; ; qbds = q.addDatasource(tablenum(table1)); qbds.AddDatasource(tablenum(table2)); qbds.DatasourceTable(tablenum(table2)). joinMode(JoinMode::[No]ExistsJoin); qbds.DatasourceTable(tablenum(table2)). fetchMode(QueryFetchMode::One2One); qbds.DatasourceTable(tablenum(table2)). addLink(fieldnum(Table1, field1), fieldnum(Table2, field2)); qbds.AddDatasource(tablenum(table3)); qbds.DatasourceTable(tablenum(table3)). joinMode(JoinMode::[No]ExistsJoin); qbds.DatasourceTable(tablenum(table3)). fetchMode(QueryFetchMode::One2One); qbds.DatasourceTable(tablenum(table3)). addLink(fieldnum(Table1, field2), fieldnum(Table3, field2)); X++: select * from table1 where [not] Exists(select 'x' from table2 where table1.field1 = table2.field1 and [not] Exists(select 'x' from table3 where table1.field2 = table3.field2)) Если использовать подключение источников данных ч/з Exists, то такой запрос работает как ожидалось. Если же использовать NotExists, то необходимо рассматривать каждый запрос по отдельности для правильного составления. 2 Bars В вашем случае я бы предложил сделать следующее 1. Подключать первым InventSum 2. Подключать его как ExistsJoin, 3. В условии изменить сравнение с ">" на "<=" 
				__________________ 
		
		
		
		
	Axapta v.3.0 sp5 kr2  | 
| 
	
 | 
| 
			
			 | 
		#36 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Спасибо, попробую 
		
		
		
		
		
		
		
	хотя в принципе процесс уже немного изменили и критерии соответсвенно тоже... но на будущее обязательно запомню.  | 
| 
	
 |