| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Здравствуйте уважаемые. 
		
		
		
		
		
		
		
	Вот с такой проблемой столкнулся: есть код X++: QueryBuildDataSource qbdsMain = query.dataSourceTable(tablenum(BankPaymentOrderJour_RU)); QueryBuildDataSource qbdsLedgerJoined; qbdsLedgerJoined = qbdsMain.addDataSource(tablenum(BankAccountTrans),'BankAccountTrans'); if (bankPaymentOrderJourReport_RU.dimension()) { qbdsLedgerJoined.addRange(fieldId2Ext(fieldnum(BankAccountTrans, Dimension),1)).value(bankPaymentOrderJourReport_RU.dimension()); } qbdsLedgerJoined.relations(true); qbdsLedgerJoined.joinMode(JoinMode::NoExistsJoin);  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 северный Будда 
		
			
	 | 
	
	
	
		
		
		
		 
			
			То, что нет фильтра - неудивительно. NotExistsJoin всего лишь позволяет отобрать те записи, которым нет соответствия в подчинённом датасоурсе. Никакие фильтры на него наложить не получится. Для этого нужен InnerJoin
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	С уважением, Вячеслав  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А какие варианты решения данной проблемы могут быть? Мне нужны записи из таблицы BankPaymentOrderJour_RU которых нет в BankAccountTrans и у которых, опять же, в BankAccountTrans  есть заданный Dimension.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
  Ну вы и формулируете ![]() Если я правильно понял задачу, то вы хотите отобрать все записи BankPaymentOrderJour_RU для которых в таблице BankAccountTrans нет записей с указанным Dimension. Dimension - это масив? Коли так, то range нужно накладывать отдельно на каждый фильтруемый элемент масива X++: dimension = bankPaymentOrderJourReport_RU.dimension();
qbdsLedgerJoined.addRange(fieldId2Ext(fieldnum(BankAccountTrans, Dimension),1)).value(dimension[1]) | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 северный Будда 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Думаю, что дело тут не в Range, а в 
		
		
		
		
		
		
			X++: qbdsLedgerJoined.relations(true);
				__________________ 
		
		
		
		
	С уважением, Вячеслав  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от pitersky
			 
 
			Думаю, что дело тут не в Range, а в 
		
	X++: qbdsLedgerJoined.relations(true); | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			После формирования query, в качестве самоконтроля, можно вывести в инфолог текст получившегося SQL-запроса. 
		
		
		
		
		
		
		
	X++: info(query.DataSourceNo(1).toString());  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			помогите перевести вот этот запрос с SQL в нечно красивейшее через  QueryBuildDataSource  
		
		
		
		
		
		
			![]() X++: Select VendInvoiceJour.InvoiceDate,VSN_PURCHORDERJOUR.CENTERPROFIX,VendInvoiceTrans.ItemId from VendInvoiceJour inner join VendInvoiceTrans on VendInvoiceTrans.PurchId = VendInvoiceJour.PurchId inner join PurchTable on PurchTable.PurchId = VendInvoiceTrans.PurchId inner join PurchLine on PurchLine.PurchId = PurchTable.PurchId inner join VSN_PURCHORDERJOUR on VSN_PURCHORDERJOUR.ORDERID = PurchLine.VSN_PURCHORDERID where VSN_PURCHORDERJOUR.CENTERPROFIX= '008-001' and VendInvoiceJour.InvoiceDate >= '2011/03/01' and VendInvoiceJour.InvoiceDate <= '2011/03/20' ![]() и может есть у кого нить ссылки на литературу по этому делу на русском языке? 
				__________________ 
		
		
		
		
	Работа программиста и шамана имеют много общего!- Оба бормочут непонятные слова, совершают непонятные действия и не могут объяснить как оно работает....  
			 | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Нет никаких принципиальных отличий между добавлением второй таблицы и добавлением последующих. Лиса-а-а, вы попробуйте, если не получиться, то выложите свой код, кто-нибудь обязательно поможет и заодно раскажет в чём была проблема. 
		
		
		
		
		
		
		
	Получить готовое решение с нуля как-то не педагогично  
		 | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			если вы пытались и у вас не получилось, то скорее всего у вас ошибка в fetchmode, нужно всем соединяемым таблицам задать: 
		
		
		
		
		
		
		
	X++: qbds.fetchMode(QueryFetchMode::One2One);  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Лиса-а-а (1). | |
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			такс.. начинаю с малого, но и тут засада 
		
		
		
		
		
		
			X++:    Query                   query = this.queryRun().query();
    QueryBuildDataSource    
    dataSourceJourTest  = query.addDataSource(tableNum(VendInvoiceJour));
    dataSourceJourTest  = dataSourceJourTest.addDataSource(VendInvoiceTrans,'VendInvoiceTrans');
 
    dataSourceJourTest.addLink(fieldnum(VendInvoiceTrans, PurchId), fieldnum(VendInvoiceJour, PurchId));
   dataSourceJourTest.relations(true);
    dataSourceJourTest.joinMode(joinMode::ExistsJoin);если dataSourceJourTest.relations(true); убераю то вообще по каким то непонятным палям их цепляет  
		
				__________________ 
		
		
		
		
	Работа программиста и шамана имеют много общего!- Оба бормочут непонятные слова, совершают непонятные действия и не могут объяснить как оно работает....  
			 | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 X++: dataSourceJourTest.addLink(fieldnum(VendInvoiceJour, PurchId), fieldnum(VendInvoiceTrans, PurchId)); 
				__________________ 
		
		
		
		
		
			Sergey Nefedov Последний раз редактировалось SRF; 03.07.2012 в 11:02.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Лиса-а-а (1). | |
| 
			
			 | 
		#13 | 
| 
			
			 Administrator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Лиса-а-а, 
		
		
		
		
		
		
			Во-первых, почему вы делаете joinMode(JoinMode::ExistsJoin), если в SQL запросе, который вы хотите получить, везде inner join? Во-вторых, relations(true) автоматически загружает связи между таблицами из AOT. Соответственно, все те связи, что вы в явном виде определили заранее перед этим через addLink(), будут проигнорированы. В-третьих, в addLink() первый параметр - fieldId поля из таблицы верхнего уровня, а второй - из таблицы текущего уровня. То есть, в вашем случае должно быть так: X++: dataSourceJourTest.addLink(fieldnum(VendInvoiceJour, PurchId), fieldnum(VendInvoiceTrans, PurchId)); 
				__________________ 
		
		
		
		
	Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Лиса-а-а (1). | |
| 
			
			 | 
		#14 | 
| 
			
			 Administrator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Да, и в догонку - связывать VendInvoiceJour и VendInvoiceTrans только по PurchId неправильно. Задумайтесь о том, что будет, если по одной закупке будет проведено две накладных.
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me  | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 NavAx 
		
			
	 | 
	
	
	
		
		
		
		 
			
			qbds = query.addDataSource(tableNum(VendInvoiceJour)); 
		
		
		
		
		
		
		
	qbds.addRange(fieldnum(VendInvoiceJour, InvoiceDate)).value(QueryRange('2011/03/01','2011/03/20')); qbds.addRange(fieldnum(VendInvoiceJour, CENTERPROFIX)).value(QueryValue('008-001')); qbds = qbds.addDataSource(tableNum(VendInvoiceTrans)); qbds.relations(false); qbds.joinMode(joinMode::InnerJoin); qbds.addLink(fieldnum(VendInvoiceJour, PurchId), fieldnum(VendInvoiceTrans, PurchId)); qbds = qbds.addDataSource(tableNum(PurchTable)); qbds.relations(false); qbds.joinMode(joinMode::InnerJoin); qbds.addLink(fieldnum(VendInvoiceJour, PurchId), fieldnum(PurchTable, PurchId)); qbds = qbds.addDataSource(tableNum(PurchLine)); qbds.relations(false); qbds.joinMode(joinMode::InnerJoin); qbds.addLink(fieldnum(PurchTable, PurchId), fieldnum(PurchLine, PurchId)); qbds = qbds.addDataSource(tableNum(VSN_PURCHORDERJOUR)); qbds.relations(false); qbds.joinMode(joinMode::InnerJoin); qbds.addLink(fieldnum(PurchLine, VSN_PURCHORDERID), fieldnum(VSN_PURCHORDERJOUR, ORDERID)); qbds.addRange(fieldnum(VSN_PURCHORDERJOUR, CENTERPROFIX)).value(QueryValue('008-001')); // правильнее qbds = query.addDataSource(tableNum(VendInvoiceJour)); qbds.addRange(fieldnum(VendInvoiceJour, InvoiceDate)).value(QueryRange('2011/03/01','2011/03/20')); qbds.addRange(fieldnum(VendInvoiceJour, CENTERPROFIX)).value(QueryValue('008-001')); qbds = qbds.addDataSource(tableNum(VendInvoiceTrans)); qbds.relations(false); qbds.joinMode(joinMode::InnerJoin); qbds.addLink(fieldnum(VendInvoiceJour, PurchId), fieldnum(VendInvoiceTrans, PurchId)); qbds.addLink(fieldnum(VendInvoiceJour, PurchId), fieldnum(VendInvoiceTrans, PurchId)); qbds.addLink(fieldnum(VendInvoiceJour, InvoiceId), fieldnum(VendInvoiceTrans, InvoiceId)); qbds.addLink(fieldnum(VendInvoiceJour, InvoiceDate), fieldnum(VendInvoiceTrans, InvoiceDate)); qbds.addLink(fieldnum(VendInvoiceJour, numberSequenceGroup), fieldnum(VendInvoiceTrans, numberSequenceGroup)); qbds.addLink(fieldnum(VendInvoiceJour, InternalInvoiceId), fieldnum(VendInvoiceTrans, InternalInvoiceId)); qbds = qbds.addDataSource(tableNum(PurchLine)); qbds.relations(false); qbds.joinMode(joinMode::InnerJoin); qbds.addLink(fieldnum(VendInvoiceTrans, InventTransId), fieldnum(PurchLine, InventTransId)); qbds = qbds.addDataSource(tableNum(VSN_PURCHORDERJOUR)); qbds.relations(false); qbds.joinMode(joinMode::InnerJoin); qbds.addLink(fieldnum(PurchLine, VSN_PURCHORDERID), fieldnum(VSN_PURCHORDERJOUR, ORDERID)); qbds.addRange(fieldnum(VSN_PURCHORDERJOUR, CENTERPROFIX)).value(QueryValue('008-001'));  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Лиса-а-а (1). | |
| 
			
			 | 
		#16 | 
| 
			
			 MCITP 
		
			
	 | 
	
	
	
		
		
			
			 Цитата: 
	
![]() но возможно причина просто в том, что ваш параметр аналитики (bankPaymentOrderJourReport_RU.dimension()) - пустой? Тогда как я понимаю при такой записи рэндж действительно не добавится. Надо добавить queryValue() видимо... 
				__________________ 
		
		
		
		
	Zhirenkov Vitaly  | 
| 
	
 | 
| 
	
	 | 
	
			 
			Похожие темы
		 | 
	||||
| Тема | Ответов | |||
| AddRange не фильтрует | 6 | |||
| Расширенный AddRange и OuterJoin | 0 | |||
| Расширенный AddRange | 3 | |||
| addRange | 7 | |||
| Можно ли редактировать форму, если на нее наложен addRange? | 10 | |||
		
  |