07.07.2016, 13:12 | #1 |
Участник
|
Query для HcmPosition (запрос по таблице, соссылкой на себя же)
Коллеги, нужна ваша помощь по теоретической части 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) |
|
07.07.2016, 13:43 | #2 |
Участник
|
А что именно не работает?
|
|
07.07.2016, 13:45 | #3 |
Участник
|
|
|
07.07.2016, 13:47 | #4 |
Участник
|
Покажите как обходите запрос и выбираете значения полей PositionId
|
|
07.07.2016, 14:03 | #5 |
Участник
|
по сути, мне нужно воспроизвести этот квери HcmPositionList (используемый на форме HcmPositionList) в коде
не понял вопроса Последний раз редактировалось Music; 07.07.2016 в 14:10. |
|
07.07.2016, 14:22 | #6 |
Участник
|
В самом запросе на первый взгляд всё правильно. Поэтому думаю что ошибка в получении значений.
Вы как этот запрос используете? Как в коде получаете значения? |
|
07.07.2016, 14:23 | #7 |
Участник
|
так в том то и дело, что пока просто беру что есть в самих таблицах. т.е. данные оригинальные
|
|
07.07.2016, 14:34 | #8 |
Участник
|
покажите код
|
|
|
За это сообщение автора поблагодарили: Music (1). |
07.07.2016, 14:50 | #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. |
|
07.07.2016, 14:54 | #10 |
Участник
|
пока писал, исправил кучу ошибок... вроде заработало... хм...
ключевой момент оказался в номере инстанса queryRun.get() Последний раз редактировалось Music; 07.07.2016 в 15:17. |
|