В общем, код должен выглядеть примерно так:
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);