|
|
#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. |
|
|