| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Связывание нескольких таблиц
			 
			
			Каким образом средствами Axapta получить данный запрос: 
		
		
		
		
		
		
		
	SELECT A.ITEMGROUPID,A.ITEMID,SUM(B.AVAILPHYSICAL),C.INVENTDIMID,D.PRODDATE,D.INVENTBATCHID FROM INVENTTABLE A inner join INVENTSUM B on (A.ITEMID=B.ITEMID) inner join INVENTDIM C on ((b.inventdimid=c.inventdimid) and (B.AVAILPHYSICAL>0)) LEFT OUTER JOIN INVENTBATCH D ON ((C.INVENTBATCHID=D.INVENTBATCHID) AND (D.ITEMID = b.itemid)) GROUP BY A.ITEMGROUPID,A.ITEMID,B.ITEMID,C.INVENTDIMID,D.PRODDATE,D.INVENTBATCHID ORDER BY A.ITEMGROUPID DESC,A.ITEMID,B.ITEMID,C.INVENTDIMID,D.PRODDATE,D.INVENTBATCHID Все проблема в условии LEFT OUTER JOIN INVENTBATCH D ON ((C.INVENTBATCHID=D.INVENTBATCHID) AND (D.ITEMID = b.itemid)) Axpata строит внутренее объединение через WHERE, а мне необходимо через inner join Запрос необходим для показа в форме существующей номеклатуры с указанием даты производства товара. Задачу конечно можно решить через временный таблицы (скорость будет не очень) или не делать объединение с InventBatch, а показывать нужные поля из этой таблицы другим способом (через метод display) Но важно принципиально - можно построить такой запрос или нет  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Дмитрий Ерин 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А если "напрямую" к серверу? Не пробовал? Интересно, что получится...  
		
		
		
		
		
		
		
	PHP код: 
	
			
	 
		 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Про "прямой" SQL запрос я читал в форуме, но можно ли его каким либо образом "прикрутить" к визуальным компонентам на форме.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Дмитрий Ерин 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Да уж, с этим сложнее... 
		
		
		
		
		
		
		
	Если только "ручками", но это уже - маразм! Будем ждать ответов ГУРУ  
		 | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			В Data Source формы: 
		
		
		
		
		
		
		
	InventDim InventBatch (outer join с InventDim) InventSum (inner join с InventDim) далее по вкусу InventTable InventTableModule у меня такое же прошло с ГТД outer join строит именно left outer join в SQL  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			используй NotExist Join
			 
			
			Действительно, в аксапте нет Outer join. 
		
		
		
		
		
		
		
	Но в аксапте есть exist join и notexist join. Я, помнится мне, для получения запросов такого рода из аксапты использовал именно notexist join. Правда в итоге вместо одного запроса получается два. К томуже notexist join на больших БД работает довольно медленно. Что ж, исскуство требует жертв  
		 | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 Цитата: 
	
		
			Изначально опубликовано Ruff  
Вообще-то на менее сложных запросах работает медленно   
		
	 | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Проблему решил следующим образом 
		
		
		
		
		
		
		
	QBE: InventTable -ij InventSum --oj InventDim ---oj InventBatch --ij InventDim Связь InventSum.ItemID = InventBatch.ItemID установил через AddDynaLink Второй InventDim необходим в с случае установки фильтра по полю InventLocationID (Выдаем картотеку на определенном складе)  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 Цитата: 
	
		
			Изначально опубликовано Волчара  
Действительно, в аксапте нет Outer join. Но в аксапте есть exist join и notexist join. Я, помнится мне, для получения запросов такого рода из аксапты использовал именно notexist join. Правда в итоге вместо одного запроса получается два. К томуже notexist join на больших БД работает довольно медленно. Что ж, исскуство требует жертв   
		
	NotExistsJoin строит запрос вида not exists in (запрос) !!!  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Поспешил с предыдущим письмом: 
		
		
		
		
		
		
		
	(Проблему решил следующим образом QBE: InventTable -ij InventSum --oj InventDim ---oj InventBatch --ij InventDim Связь InventSum.ItemID = InventBatch.ItemID установил через AddDynaLink Второй InventDim необходим в с случае установки фильтра по полю InventLocationID (Выдаем картотеку на определенном складе)) Последнее выражение (ij InventDim) не странслируется в SQL-запрос. Ранее в форуме читал о такой фичи Axapta. Действительно это так или нет  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Изначально опубликовано jan_psn  
Поспешил с предыдущим письмом: (Проблему решил следующим образом QBE: InventTable -ij InventSum --oj InventDim ---oj InventBatch --ij InventDim Связь InventSum.ItemID = InventBatch.ItemID установил через AddDynaLink Второй InventDim необходим в с случае установки фильтра по полю InventLocationID (Выдаем картотеку на определенном складе)) Последнее выражение (ij InventDim) не странслируется в SQL-запрос. Ранее в форуме читал о такой фичи Axapta. Действительно это так или нет  | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Опишу возникшую проблему. 
		
		
		
		
		
		
		
	Стандартная форма Axapta SalesQuickQuote работает не совсем корреектно в некоторых случаях. Возникла необходимость в изменении поведения данной формы (создаю новую): 1. Данные отсортировать по номенклатурной группе, затем по наименованию 2. Подключить таблицу InventBatch (к примеру) и отсортировать по полю ProdDate 3. Выводить только товар имеющийся на определенном складе Проблема с подключением InventBatch: 1. Объединяем с InventSum через Outer Join 2. Как установить условие InventBatch.ItemID==InventSum.ItemID ? Сделал через AddDynaLink. Прошло - SQL запрос сформировался верным (смотрю через мониторинг) Напрашивается решение через расширенный фильтр, но не получилось. Следующая проблема - наложения условия на InventDim.InventLocationID При выполнении AddRange условие добавляется в ON, а необходимо в WHERE. В виду того что объединение внешнее, то записи все равно выводятся, но с пустым InventLocationID (если уловие не выполняется) Решил проблему следующим образом - подключил через InnerJoin еще InventDim и объеденил с первым InventDim и на добавленный InventDim наложил условие по InventLocationId. В результате получили InventTable -ij InventSum --oj InventDim ---oj InventBatch ---ij InventDim Криво все это. Чего то я не понимаю (не знаю).  | 
| 
	
 | 
| 
	
	 | 
	
		
  |