Сейчас код выглядит так.
X++:
query = new Query(querystr(myQuery));
qbdsItt = query.datasourcetable(tableNum(InventTransferTable));
qbdsItt.addRange(fieldnum(InventTransferTable, ReceiveDate)).value(SysQuery::range(20\05\2017, toDay()));
qbdsItt.addRange(fieldnum(InventTransferTable, TransferStatus)).value(SysQuery::value(InventTransferStatus::Received)); // может быть, лучше сразу задать в запросе в АОТ
// нет так как это параметр который передается с формы, он может быть и не указан так же как и склад и диапазон дат
qbdsItt.addRange(fieldnum(InventTransferTable, InventLocationIdFrom)).value('242');
qbdsIlTo = query.datasourcetable(tableNum(InventLocation),1);
qbdsIlFrom = query.datasourcetable(tableNum(InventLocation),2);
if (inventLocationType != InventLocationType::Standard)
{
qbrDataAreaId = qbdsIlTo.addRange(fieldNum(InventLocation, DataAreaId));
qbrDataAreaId.value(strFmt('((%1.%3 = %4) || (%2.%3 = %4))',
qbdsIlTo.name(),
qbdsIlFrom.name(),
fieldStr(InventLocation, InventLocationType),
any2int(inventLocationType)));
}
s = query.datasourceno(1).toString();
info(s);
queryRun = new QueryRun(query);
iRowCountTmp = SysQuery::countLoops(queryRun);
В Query перепроверил все relation. Сейчас все есть. Вот только не понимаю почему в текстовом запросе нет упоминания InventTransferLine?
SELECT * FROM InventTransferTable WHERE ((ReceiveDate>={ts '2017-05-20 00:00:00.000'} AND ReceiveDate<={ts '2017-06-19 00:00:00.000'})) AND ((TransferStatus = 2)) AND ((InventLocationIdFrom = N'242')) JOIN * FROM InventLocation WHERE InventTransferTable.InventLocationIdTo = InventLocation.InventLocationId AND ((((InventLocationTo.InventLocationType = 3) || (InventLocationFrom.InventLocationType = 3)))) JOIN * FROM InventLocation WHERE InventTransferTable.InventLocationIdFrom = InventLocation.InventLocationId