![]() |
#12 |
Участник
|
![]()
В общем так... вот код, который формирует запрос (он несколько изменился) :
X++: q = new Query(); qbds_lb = q.addDataSource(tableNum(LedgerBalancesDimTrans)); qbds_lbbuf = qbds_lb.addDataSource(tableNum(LedgerBalancesDimTrans)); qbds_lbbuf.relations( false ); qbds_lbbuf.joinMode(JoinMode::NoExistsJoin); qbds_lb.orderMode(OrderMode::GroupBy); qbds_lb.addSortField(fieldId); qbr = qbds_lb.addRange(fieldNum(LedgerBalancesDimTrans, TransDate)); qbr.value(SysQuery::range(DateNull(), dateEndMth(ledgerJournalDistribTable.Period))); qbr = qbds_lbbuf.addRange(fieldNum(LedgerBalancesDimTrans, TransDate)); qbr.value(SysQuery::range(DateNull(), dateEndMth(ledgerJournalDistribTable.Period))); if (LedgerDistribByAlg.OffsetAccountNum) { qbr = qbds_lb.addRange(fieldNum(LedgerBalancesDimTrans, AccountNum)); qbr.value(SysQuery::value(LedgerDistribByAlg.OffsetAccountNum)); qbr = qbds_lbbuf.addRange(fieldNum(LedgerBalancesDimTrans, AccountNum)); qbr.value(SysQuery::value(LedgerDistribByAlg.OffsetAccountNum)); } if (LedgerDistribByAlg.BaseAccountNum) { qbr = qbds_lb.addRange(fieldNum(LedgerBalancesDimTrans, AccountNum)); qbr.value(SysQuery::value(LedgerDistribByAlg.BaseAccountNum)); qbr = qbds_lbbuf.addRange(fieldNum(LedgerBalancesDimTrans, AccountNum)); qbr.value(SysQuery::value(LedgerDistribByAlg.BaseAccountNum)); } switch (_dimensionNumber) { case 1: if (ledgerDistribByAlg.DimLedgerDistribByAlg[1]) { qbr = qbds_lb.addRange(fieldName2Id(tableNum(LedgerBalancesDimTrans), "dimension[1]")); qbr.value(ledgerDistribByAlg.DimLedgerDistribByAlg[1]); qbr = qbds_lbbuf.addRange(fieldName2Id(tableNum(LedgerBalancesDimTrans), "dimension[1]")); qbr.value(ledgerDistribByAlg.DimLedgerDistribByAlg[1]); } break; case 2: if (ledgerDistribByAlg.DimLedgerDistribByAlg[2]) { qbr = qbds_lb.addRange(fieldName2Id(tableNum(LedgerBalancesDimTrans), "dimension[2]")); qbr.value(ledgerDistribByAlg.DimLedgerDistribByAlg[2]); qbr = qbds_lbbuf.addRange(fieldName2Id(tableNum(LedgerBalancesDimTrans), "dimension[2]")); qbr.value(ledgerDistribByAlg.DimLedgerDistribByAlg[2]); } break; case 5: if (ledgerDistribByAlg.DimLedgerDistribByAlg[3]) { qbr = qbds_lb.addRange(fieldName2Id(tableNum(LedgerBalancesDimTrans), "dimension[5]")); qbr.value(ledgerDistribByAlg.DimLedgerDistribByAlg[3]); qbr = qbds_lbbuf.addRange(fieldName2Id(tableNum(LedgerBalancesDimTrans), "dimension[5]")); qbr.value(ledgerDistribByAlg.DimLedgerDistribByAlg[3]); } break; } ds1 = strfmt("%1.%2", qbds_lb.name(), fieldName); ds2 = strfmt("%1.%2", qbds_lbbuf.name(), fieldName); queryExression = strfmt("((NOT(%2 = %1)) AND ((%2 = %1) OR (NOT(%1 = ''))))", ds1, ds2 ); qbr = qbds_lbbuf.addRange(fieldId); qbr.value(queryExression); qR = new QueryRun(q); // qR.reset(); while (qR.next()) { lb = qR.getNo(1); // . . . // Something to do // . . . } Код: SELECT * FROM LedgerBalancesDimTrans GROUP BY LedgerBalancesDimTrans.Dimension[5] ASC WHERE ((TransDate<=30.11.2005)) AND ((AccountNum = 25.0200) OR (AccountNum = 20.0100)) NOTEXISTS JOIN * FROM LedgerBalancesDimTrans WHERE ((TransDate<=30.11.2005)) AND ((AccountNum = 25.0200) OR (AccountNum = 20.0100)) AND ((((NOT(LedgerBalancesDimTrans_1_1.dimension[5] = LedgerBalancesDimTrans_1.dimension[5])) AND ((LedgerBalancesDimTrans_1_1.dimension[5] = LedgerBalancesDimTrans_1.dimension[5]) OR (NOT(LedgerBalancesDimTrans_1.dimension[5] = '')))))) Попробовал практически все варинаты... так и не работает... Как это Аксапта парсит такие запросы.... или это вообще сделать не реально? (тогда нужно действовать напрямую) Если убрать строки X++: qbr = qbds_lbbuf.addRange(fieldId); qbr.value(queryExression); Последний раз редактировалось rkrivov; 15.11.2005 в 12:01. |
|
Теги |
query, программно, фильтр, запрос (query) |
|
![]() |
||||
Тема | Ответов | |||
Вопрос по Query с агрегатной функцией | 11 | |||
Вопрос про Query | 5 | |||
Вопрос по query и join | 2 | |||
Вопрос по запросу (query) | 2 | |||
Вопрос знатокам QBE и Query в AXAPTA | 6 |
|