| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Коллеги, нужна ваша помощь по теоретической части query! 
		
		
		
		
		
		
		
	На не рабочем примере HcmPosition: X++:     HcmPosition                 position,
                                parentPosition;
    
    QueryRun                    queryRun;
    Query                       ret = new Query();
    QueryBuildDataSource        qbdsPosition,
                                qdbsParentPosition,
                                qbdsHierarchy,
                                qbdsHierarchyType;
    qbdsPosition    = ret.addDataSource(tableNum(HcmPosition));
    qbdsHierarchy   = qbdsPosition.addDataSource(tableNum(HcmPositionHierarchy));
    qbdsHierarchy.clearLinks();
    qbdsHierarchy.addLink(fieldNum(HcmPosition, RecId), fieldNum(HcmPositionHierarchy, Position));
    qbdsHierarchy.joinMode(JoinMode::InnerJoin);
    qbdsHierarchy.fetchMode(QueryFetchMode::One2One);
    
        qdbsParentPosition   = qbdsHierarchy.addDataSource(tableNum(HcmPosition));
        qdbsParentPosition.clearLinks();
        qdbsParentPosition.addLink(fieldNum(HcmPositionHierarchy, ParentPosition), fieldNum(HcmPosition, RecId));
        qdbsParentPosition.joinMode(JoinMode::InnerJoin);
        qdbsParentPosition.fetchMode(QueryFetchMode::One2One);В итоге нужно получить в запросе два поля: PositionId (из HcmPosition) + PositionId (по полю ParentPosition из HcmPositionHierarchy)  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А что именно не работает?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Покажите как обходите запрос и выбираете значения полей PositionId
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			по сути, мне нужно воспроизвести этот квери HcmPositionList (используемый на форме HcmPositionList) в коде 
		
		
		
		
		
		
		
		
			не понял вопроса  
		Последний раз редактировалось Music; 07.07.2016 в 14:10.  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			В самом запросе на первый взгляд всё правильно. Поэтому думаю что ошибка в получении значений. 
		
		
		
		
		
		
		
	Вы как этот запрос используете? Как в коде получаете значения?  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			так в том то и дело, что пока просто беру что есть в самих таблицах. т.е. данные оригинальные
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			покажите код
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Music (1). | |
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Job: 
		
		
		
		
		
		
		
		
			X++: int enumNumber = 0; HcmPosition position, parentPosition; HcmPositionHierarchy hierarchy; QueryRun queryRun; Query ret = new Query(); QueryBuildDataSource qbdsPosition, qdbsParentPosition, qbdsHierarchy; qbdsPosition = ret.addDataSource(tableNum(HcmPosition)); qbdsHierarchy = qbdsPosition.addDataSource(tableNum(HcmPositionHierarchy)); qbdsHierarchy.clearLinks(); qbdsHierarchy.addLink(fieldNum(HcmPosition, RecId), fieldNum(HcmPositionHierarchy, Position)); qbdsHierarchy.joinMode(JoinMode::OuterJoin); qbdsHierarchy.fetchMode(QueryFetchMode::One2One); qdbsParentPosition = qbdsHierarchy.addDataSource(tableNum(HcmPosition)); qdbsParentPosition.clearLinks(); qdbsParentPosition.addLink(fieldNum(HcmPositionHierarchy, ParentPosition), fieldNum(HcmPosition, RecId)); qdbsParentPosition.joinMode(JoinMode::InnerJoin); qdbsParentPosition.fetchMode(QueryFetchMode::One2One); queryRun = new QueryRun(ret); while (queryRun.next()) { enumNumber++; position = queryRun.get(TableNum(HcmPosition), 1); parentPosition = queryRun.get(TableNum(HcmPosition), 2); info(strFmt('%1: %2 / %3)', enumNumber, position.PositionId, parentPosition.PositionId )); } info(int2str(enumNumber)); } Последний раз редактировалось Music; 07.07.2016 в 14:54.  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			пока писал, исправил кучу ошибок... вроде заработало... хм... 
		
		
		
		
		
		
		
		
			ключевой момент оказался в номере инстанса queryRun.get() Последний раз редактировалось Music; 07.07.2016 в 15:17.  | 
| 
	
 |