![]() |
#11 |
Участник
|
В общем, код должен выглядеть примерно так:
X++: Query query = new Query(querystr(myQuery)); QueryBuildDataSource qbdsItt = query.datasourcetable(tableNum(InventTransferTable)); // никаких Create! только читаем QueryBuildDataSource qbdsIlTo = query.datasourcetable(tableNum(InventLocation),1); // первый по порядку. Или query.datasource("InventLocationTo") позволяет получить датасорс по имени QueryBuildDataSource qbdsIlFrom = query.datasourcetable(tableNum(InventLocation),2); // второй по порядку. Или query.datasource Debug::assert(qbdsItt); Debug::assert(qbdsIlTo); Debug::assert(qbdsIlFrom); qbdsItt.addRange(fieldnum(InventTransferTable, ReceiveDate)).value(SysQuery::range(fromDate, toDate)); qbdsItt.addRange(fieldnum(InventTransferTable, TransferStatus)).value(SysQuery::value(InventTransferStatus::Received)); // может быть, лучше сразу задать в запросе в АОТ qbdsItt.addRange(fieldnum(InventTransferTable, InventLocationIdFrom)).value(inventLocationId); if (inventLocationType != InventLocationType::Standard) { SysQuery::findOrCreateRange(qbdsIlTo, fieldNum(InventLocation, DataAreaId)) .value(strFmt('((%1.%3 = %4) || (%2.%3 = %4))', qbdsIlTo.name(), qbdsIlFrom.name(), fieldStr(InventLocation, InventLocationType), any2int(inventLocationType))); } //info(qbdsItt.ToString()); queryRun = new QueryRun(query); rowCount = SysQuery::countLoops(queryRun); Последний раз редактировалось mazzy; 19.06.2017 в 18:59. |
|