| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Подскажите, плиззз. Как из такого джоба создать запрос.. 
		
		
		
		
		
		
		
	джоб: while select inventJournalTable join inventDim where inventDim.inventDimId == inventJournalTable.InventDimID && inventdim.InventLocationId =='А' join inventdim1 where inventdim1.inventDimId == inventJournalTable.ToInventDimID && inventdim1.InventLocationId =='Б' Создала запрос в таком виде, он отрабатывает только первый джойн... qbds1 = query.addDataSource(tableNum(InventJournalTable)); qbds2 = qbds1.addDataSource(tableNum(InventDim)); qbds2.addLink(fieldNum(InventJournalTable, InventDimId), fieldNum(InventDim, InventDimId)); qbds3 = qbds2.addDataSource(tableNum(InventLocation)); qbds3.addLink(fieldNum(InventDim, InventLocationId), fieldNum(InventLocation, InventLocationId)); qbds3.addRange(fieldNum(InventLocation, InventLocationId)).value('А'); Пыталась дальше делать по образу и подобию дописать... qbds4 = qbds1.addDataSource(tableNum(InventDim)); qbds4.addLink(fieldNum(InventJournalTable, ToInventDimId), fieldNum(InventDim, InventDimId)); qbds5 = qbds4.addDataSource(tableNum(InventLocation)); qbds5.addLink(fieldNum(InventDim, InventLocationId), fieldNum(InventLocation, InventLocationId)); qbds5.addRange(fieldNum(InventLocation, InventLocationId)).value('Б'); Но всё равно только qbds1,qbds2,qbds3 отрабатывают.... что ещё могла упустить?  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Что вы точно упустили, так это QueryFetchMode 
		
		
		
		
		
		
			
		
		
		
		
	X++:     QueryBuildDataSource qbds1, qbds2, qbds3, qbds4, qbds5;
    Query query = new Query();
    qbds1 = query.addDataSource(tableNum(InventJournalTrans));
    qbds2 = qbds1.addDataSource(tableNum(InventDim));
    qbds2.addLink(fieldNum(InventJournalTrans, InventDimId), fieldNum(InventDim, InventDimId));
    qbds2.fetchMode(QueryFetchMode::One2One);
    qbds3 = qbds2.addDataSource(tableNum(InventLocation));
    qbds3.addLink(fieldNum(InventDim, InventLocationId), fieldNum(InventLocation, InventLocationId));
    qbds3.addRange(fieldNum(InventLocation, InventLocationId)).value('?');
    qbds3.fetchMode(QueryFetchMode::One2One);
    qbds4 = qbds1.addDataSource(tableNum(InventDim));
    qbds4.addLink(fieldNum(InventJournalTrans, ToInventDimId), fieldNum(InventDim, InventDimId));
    qbds4.fetchMode(QueryFetchMode::One2One);
    qbds5 = qbds4.addDataSource(tableNum(InventLocation));
    qbds5.addLink(fieldNum(InventDim, InventLocationId), fieldNum(InventLocation, InventLocationId));
    qbds5.addRange(fieldNum(InventLocation, InventLocationId)).value('?');
    qbds5.fetchMode(QueryFetchMode::One2One);
    info(query.dataSourceNo(1).toString()); 
		 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 ---------------- 
		
			
	 | 
	
	
	
		
		
		
		 
			
			да и зачем вам  qbds3, qbds5
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Во-первых не понятно зачем джоинить InventLocation, если условие накладывается на InventLocationId. 
		
		
		
		
		
		
		
	Можно попробовать добавить следующее: qbds2.fetchMode(QueryFetchMode::One2One); qbds4.fetchMode(QueryFetchMode::One2One);  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			просто нужно выцепить по аналитике с какого склада на какой переместили? 
		
		
		
		
		
		
		
	вот и не знаю как подцепить... С какого склада по InventDimID, получается отфильтровать записи.. А вот второй раз прийти в inventdim по полю ToInventDimID , не получается... join inventdim1 where inventdim1.inventDimId == inventJournalTable.ToInventDimID && inventdim1.InventLocationId =='Б' можете ещё что посоветуете..  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			 fetchMode не помог..., всё равно срабатывает только фильтр "С какого склада" (
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А как вы проверяете некорректность?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Просто вывожу инфо после отработки джоба и  запроса 
		
		
		
		
		
		
		
	В джобе выводятся нужные журналы. А вот когда запускаю Query , то выводятся журналы, которые удовлетворяют ограничению по дате и "Складу с ", который привязан к InventDimId. А то что привязка идёт по ToInventDimid- не срабатывает...  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Попробуйте отказаться от qbds3 и qbds5. А условия: 
		
		
		
		
		
		
		
	qbds3.addRange(fieldNum(InventLocation, InventLocationId)).value('А'); qbds5.addRange(fieldNum(InventLocation, InventLocationId)).value('Б'); замените на: qbds2.addRange(fieldNum(InventDim, InventLocationId)).value('А'); qbds4.addRange(fieldNum(InventDim, InventLocationId)).value('Б');  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от pdojn
			 
 
			Попробуйте отказаться от qbds3 и qbds5. А условия: 
		
	qbds3.addRange(fieldNum(InventLocation, InventLocationId)).value('А'); qbds5.addRange(fieldNum(InventLocation, InventLocationId)).value('Б'); замените на: qbds2.addRange(fieldNum(InventDim, InventLocationId)).value('А'); qbds4.addRange(fieldNum(InventDim, InventLocationId)).value('Б'); Как тогда это будет всё выглядеть?  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Вот так:  
		
		
		
		
		
		
			
		
		
		
		
	![]() X++: while select inventJournalTable join inventDim where inventDim.inventDimId == inventJournalTable.InventDimID && inventdim.InventLocationId =='А' join inventdim1 where inventdim1.inventDimId == inventJournalTable.ToInventDimID && inventdim1.InventLocationId =='Б'  | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
  Но этот запрос, у меня давно уже работает... А как это в executeQuery прописать))  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А будет как раз то, что вам нужно 
		
		
		
		
		
		
		
	  - наложен фильтр по соответствующим складам.
		 | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Это был ответ на вопрос: 
		
		
		
		
		
		
			
		
		
		
		
	Именно так и будет выглядеть, а соответственно и это должно:  | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			То есть нижеприведенный job - это аналог написанного вами запроса с select 
		
		
		
		
		
		
			
		
		
		
		
	X++: static void QueryFetchModeExample(Args _args) { /* while select inventJournalTable join inventDim where inventDim.inventDimId == inventJournalTable.InventDimID && inventdim.InventLocationId =='?' join inventdim1 where inventdim1.inventDimId == inventJournalTable.ToInventDimID && inventdim1.InventLocationId =='?' */ QueryBuildDataSource qbds1, qbds2, qbds3; Query query = new Query(); qbds1 = query.addDataSource(tableNum(InventJournalTable)); qbds2 = qbds1.addDataSource(tableNum(InventDim)); qbds2.addLink(fieldNum(InventJournalTable, InventDimId), fieldNum(InventDim, InventDimId)); qbds2.fetchMode(QueryFetchMode::One2One); qbds2.addRange(fieldNum(InventDim, InventLocationId)).value(queryValue('?')); qbds3 = qbds1.addDataSource(tableNum(InventDim)); qbds3.addLink(fieldNum(InventJournalTable, ToInventDimId), fieldNum(InventDim, InventDimId)); qbds3.fetchMode(QueryFetchMode::One2One); qbds3.addRange(fieldNum(InventDim, InventLocationId)).value(queryValue('?')); info(query.dataSourceNo(1).toString()); }  | 
| 
	
 | 
| 
			
			 | 
		#16 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
  .А мне нужно запрос на форме... и для меня это действительно большой вопрос, на который я не могу ответить... А также не могу до конца представить как должен выглядеть qwery... Буду очень благодарна, если ткнёте носом в чём я не права....  | 
| 
	
 | 
| 
			
			 | 
		#17 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Ну если не верите... вот весь запрос... 
		
		
		
		
		
		
		
	public void executeQuery() { Query query = new Query(); QueryBuildDataSource qbds1, qbds2, qbds3,qbds4, qbds5; QueryRun queryRun; str dateFilter; ; // Установка фильтра строк заказов по дате поставки dateFilter = date2str(StartFilter.dateValue(), 123,2,2,2,2,2); dateFilter += '..' + date2str(EndFilter.dateValue(), 123,2,2,2,2,2); qbrFilterDate.value(dateFilter); qbds1 = query.addDataSource(tableNum(InventJournalTable)); qbds1.addRange(fieldNum(InventjournalTable, Posted)).value(SysQuery::value(NoYes::Yes)); qbds1.addRange(fieldNum(InventjournalTable, JournalType)).value(SysQuery::value(InventJournalType::Transfer)); qbds1.addRange(fieldNum(InventjournalTable, PostedDate)).value(dateFilter); qbds2 = qbds1.addDataSource(tableNum(InventDim)); qbds2.addLink(fieldNum(InventJournalTable, InventDimId), fieldNum(InventDim, InventDimId)); qbds2.fetchMode(QueryFetchMode::One2One); qbds3 = qbds2.addDataSource(tableNum(InventLocation)); qbds3.addLink(fieldNum(InventDim, InventLocationId), fieldNum(InventLocation, InventLocationId)); qbds3.addRange(fieldNum(InventLocation, InventLocationId)).value(FilterLocationFrom.text()); qbds3.fetchMode(QueryFetchMode::One2One); qbds4 = qbds1.addDataSource(tableNum(InventDim)); qbds4.addLink(fieldNum(InventJournalTable, ToInventDimId), fieldNum(InventDim, InventDimId)); qbds4.fetchMode(QueryFetchMode::One2One); qbds5 = qbds4.addDataSource(tableNum(InventLocation)); qbds5.addLink(fieldNum(InventDim, InventLocationId), fieldNum(InventLocation, InventLocationId)); qbds5.addRange(fieldNum(InventLocation, InventLocationId)).value(FilterLocationFrom.text()); qbds5.fetchMode(QueryFetchMode::One2One); queryRun = new QueryRun(query); // info(qbds1.toString() + '\n' + qbds2.toString()+ '\n' + qbds3.toString()); while (queryRun.next()) { if (queryRun.changed(tableNum(InventJournalTable))) { inventJournalTable = queryRun.get(tableNum(InventJournalTable)); info(inventJournalTable.JournalId ); } } super(); }  | 
| 
	
 | 
| 
			
			 | 
		#18 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Всё... Спасибо всем... Нашла свою ошибку... Убрала всё лишнее...;-)
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
	
	 | 
	
			 
			Похожие темы
		 | 
	||||
| Тема | Ответов | |||
| Суммы по двум таблицам | 17 | |||
| Запрос по трем таблицам | 12 | |||
| Почему join запрос разбивается на подзапросы!? | 59 | |||
| Группировка по двум и более таблицам | 2 | |||
| Как выполнить запрос созданный в переменной | 12 | |||
		
  |