16.08.2010, 12:20 | #1 |
Участник
|
QueryRun, аналогичный select'у
Коллеги, всем привет.
Столкнулся с маленькой проблемкой, надеюсь получить помощь в ее решении. Есть исходный запрос X++ X++: select sum(AmountMST) from ledgerTrans where ledgerTrans.AccountNum == "68.000" && ledgerTrans.TransDate >= 01\01\2010 && ledgerTrans.TransDate <= 31\03\2010 join tableId from ledgerTransOffset where ledgerTransOffset.BondBatch_RU == ledgerTrans.BondBatch_RU && ledgerTransOffset.BondBatchTrans_RU == ledgerTrans.BondBatchTrans_RU && ledgerTransOffset.Crediting != ledgerTrans.Crediting && ledgerTransOffset.AccountNum == "19.320"; |
|
16.08.2010, 12:23 | #2 |
Moderator
|
Последний раз редактировалось Gustav; 16.08.2010 в 12:25. |
|
|
За это сообщение автора поблагодарили: Skvorcal (1). |
16.08.2010, 12:46 | #4 |
Участник
|
Хм, связи "==" реализуются посредством addLink, а все прочие связи - посредством "addRange".
Если я все правильно понял, то получается как-то вот так? X++: query = new Query(); qbds = query.addDataSource(tableNum(LedgerTrans)); qbds.orderMode(OrderMode::GroupBy); qbds.addSelectionField(fieldNum(LedgerTrans, AmountMST), SelectionField::Sum); qbr = qbds.addRange(fieldNum(LedgerTrans, AccountNum)); qbr.value("68.000"); qbr = qbds.addRange(fieldNum(LedgerTrans, TransDate)); qbr.value(SysQuery::range(01\01\2010, 31\03\2010)); qbdsOffset = qbds.addDataSource(tableNum(LedgerTrans)); qbdsOffset.addSelectionField(fieldNum(LedgerTrans, tableId)); qbdsOffset.joinMode(JoinMode::INNERJOIN); qbdsOffset.relations(false); qbdsOffset.addLink(fieldnum(LedgerTrans, BondBatch_RU), fieldnum(LedgerTrans, BondBatch_RU)); qbdsOffset.addLink(fieldnum(LedgerTrans, BondBatchTrans_RU), fieldnum(LedgerTrans, BondBatchTrans_RU)); qbr = qbdsOffset.addRange(fieldNum(LedgerTrans, Crediting)); qbr.value('(' + fieldStr(LedgerTrans, Crediting) + '!=' + qbds.name() + '.' + fieldStr(LedgerTrans, Crediting) +')'); qbr = qbdsOffset.addRange(fieldNum(LedgerTrans, AccountNum)); qbr.value("19.320"); queryRun = new QueryRun(query); |
|