| 
			
			 | 
		#1 | 
| 
			
			 Злыдни 
		
			
	 | 
	
	
	
		
		
			
			
			Запрос по трем таблицам
			 
			
			Доброго всем дня, господа.  
		
		
		
		
		
		
			У меня вот какая дурацкая проблема: есть форма, в которую в качестве источников данных добавлены таблицы ReqPO, InventDim, InventSize (не спрашивайте, зачем третья, так надо  ). InventDim связан с ReqPO innerjoin-ом, аналогично связан InventSize с InventDim. То есть: ReqPO (InventDimId) InventDim InventDim (InventSizeId) InventSize Проблема вот какая - в гриде, в котором, по идее, должны отображаться строки ReqPO, происходит задвоение, затроение (и тд) каждой строки. Причина этого ясна: InventSizeId для разных ItemId могут совпадать (в таблице InventSize). Следовательно, надо как-то связать ReqPO с InventSIze по полю ItemId. А вот теперь вопрос - как их связать так, чтоб это было красиво и грамотно? Всем заранее спасибо. PS И еще: можно как-то на форме для источников данных сделать альтернативное связывание - либо связанные поля совпадают, либо поле в главной таблице вообще не заполнено? 
				__________________ 
		
		
		
		
	Все может быть и быть все может, все может быть или не быть, но быть того никак не может, чего совсем не может быть.  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 SAP 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Вот то что тебе надо http://www.axaptapedia.com/Expressions_in_query_ranges
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Злыдни 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Спасибо, но это мне не поможет (( Если это к PS - это первое, что я сделала -  попыталась через dataAreaId. Не получилось. 
		
		
		
		
		
		
			А по поводу главной пробелемы - это никак ее не решает, потому что явной связи ReqPO с InventSize нет, надо их сджойнить... 
				__________________ 
		
		
		
		
	Все может быть и быть все может, все может быть или не быть, но быть того никак не может, чего совсем не может быть.  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Как идея (не пробовал такого пока) 
		
		
		
		
		
		
		
	Отключить для датасорса InventSize AutoQuery=false и в init() этого датасорса написать запрос к InventSize с условием InventSize.InventSizeId == InventDim.InventSizeId and InventSize.ItemId == ReqPo.ItemId  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 SAP 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Как идея (не пробовал такого пока) 
Отключить для датасорса InventSize AutoQuery=false и в init() этого датасорса написать запрос к InventSize с условием InventSize.InventSizeId == InventDim.InventSizeId and InventSize.ItemId == ReqPo.ItemId  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Злыдни 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А зачем AutoQuery убивать? тогда придется ручками датасорс создавать. Прописать так связь с InventDim получится. А с Reqpo - нет, потому что при создании связи addLink-ом система ругается на ParentFieldId...
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	Все может быть и быть все может, все может быть или не быть, но быть того никак не может, чего совсем не может быть.  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Злыдни 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А, сообразила... ща попробую
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	Все может быть и быть все может, все может быть или не быть, но быть того никак не может, чего совсем не может быть.  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Злыдни 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Никак (( воспользуюсь дедовским способом, жаль.
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	Все может быть и быть все может, все может быть или не быть, но быть того никак не может, чего совсем не может быть.  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Извините, возможно сбил вас с верного пути, который указал konopello. Вот код, который работает для таблицы InventTrans. Надо поменять только на вашу ReqPo: 
		
		
		
		
		
		
		
	X++: public void init() { QueryBuildDataSource inventColorDataSource; QueryBuildRange inventColorItemRange; ; super(); inventColorDataSource = this.query().dataSourceTable(tableNum(InventColor)); inventColorItemRange = inventColorDataSource.addRange(fieldNum(InventColor, DataAreaId)); inventColorItemRange.value(strFmt('((%1.%2 == %3.%4)))', inventColor_ds.name(), fieldStr(InventColor, ItemId), inventTrans_ds.name(), fieldStr(InventTrans, ItemId))); } Успехов!  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			У Вас DS вна форме связаны по inner join. Для того, чтобы отображалась только одна строка, измените тип связи на ExistsJoin.
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	Андрей.  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А это уже явный OuterJoin.
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	Андрей.  | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Злыдни 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от petr
			 
 
			Извините, возможно сбил вас с верного пути, который указал konopello. Вот код, который работает для таблицы InventTrans. Надо поменять только на вашу ReqPo: 
		
	X++: public void init() { QueryBuildDataSource inventColorDataSource; QueryBuildRange inventColorItemRange; ; super(); inventColorDataSource = this.query().dataSourceTable(tableNum(InventColor)); inventColorItemRange = inventColorDataSource.addRange(fieldNum(InventColor, DataAreaId)); inventColorItemRange.value(strFmt('((%1.%2 == %3.%4)))', inventColor_ds.name(), fieldStr(InventColor, ItemId), inventTrans_ds.name(), fieldStr(InventTrans, ItemId))); } Успехов! Спасибо, Петр, оно заработало   Оказалось, что дохло оно из-за того, что ReqPO тоже был привязан... к сгруппированному ReqPO (ReqPOGroup). Сильно систему клинило...
		
				__________________ 
		
		
		
		
	Все может быть и быть все может, все может быть или не быть, но быть того никак не может, чего совсем не может быть.  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Злыдни 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Да, но проблема в том, что использовать existsJoin и outerJoin надо одновременно. То есть PS относился к первой же проблеме - чтоб отображались и те записи из ReqPO, в InventDim которых InventSizeId и не заполнен даже... 
		
		
		
		
		
		
			И, мне кажется, existsJoin несколько неправильно использовать, строка-то одна в гриде будет, но мне-то нужен не любой InventSize, а именно тот, у которого ItemId совпадает с ReqPOшным. 
				__________________ 
		
		
		
		
	Все может быть и быть все может, все может быть или не быть, но быть того никак не может, чего совсем не может быть.  | 
| 
	
 | 
| 
	
	 | 
	
			 
			Похожие темы
		 | 
	||||
| Тема | Ответов | |||
| Как собрать запрос? | 11 | |||
| Почему join запрос разбивается на подзапросы!? | 59 | |||
| Запрос по двум таблицам | 17 | |||
| Не работает запрос на нескольких компаниях | 3 | |||
| Как выполнить запрос созданный в переменной | 12 | |||
		
  |