Ларчик у меня открылся вот как. Изначально почитав
http://www.axaptapedia.com/Expressions_in_query_ranges я использовал ExistsJoin. Потом спасибо S.Kuskov тип связи изменился на InnerJoin. И тогда встал вопрос, а почему структура query до сих пор такая? Почему бы не поднять InventLocation выше? Поднял и все заработало. Код который бил показан он тестовый и поэтому упрошенный. Сейчас рабочий код выглядит так
X++:
qbds = query.addDataSource(tablenum(InventTransferTable));
qbds.orderMode(OrderMode::GroupBy);
qbds.addSortField(fieldnum(InventTransferTable, TransferId));
qbds.addSortField(fieldnum(InventTransferTable, InventLocationIdTo));
qbds.addSortField(fieldnum(InventTransferTable, InventLocationIdFrom));
qbds.addSortField(fieldnum(InventTransferTable, InventLocationIdTransit));
qbds.addSortField(fieldnum(InventTransferTable, InventLocationIdLater));
qbds.addSortField(fieldnum(InventTransferTable, ReceiveDate));
qbds.addSortField(fieldnum(InventTransferTable, TransferStatus));
qbds.addSortField(fieldnum(InventTransferTable, InventLocationIdLater));
if (fromDate && toDate)//Дата
{
qbds.addRange(fieldnum(InventTransferTable, ReceiveDate)).value(strfmt('%1..%2', fromDate, toDate));
}
if (receivedOnly)
{
qbds.addRange(fieldnum(InventTransferTable, TransferStatus)).value(QueryValue(InventTransferStatus::Received));
}
else
{
qbds.addRange(fieldnum(InventTransferTable, TransferStatus)).value(QueryValue(InventTransferStatus::Shipped));
qbds.addRange(fieldnum(InventTransferTable, TransferStatus)).value(QueryValue(InventTransferStatus::Received));
}
if (inventLocationId_From)//Отправлено Откуда
{
qbds.addRange(fieldnum(InventTransferTable, InventLocationIdFrom)).value(inventLocationId_From);
}
if (inventLocationId_To)//Отправлено Куда
{
qbds.addRange(fieldnum(InventTransferTable, InventLocationIdTo)).value(inventLocationId_To);
}
if (inventLocationType != InventLocationType::Standard)
{
qbdsInventLocationFrom = qbds.addDataSource(tablenum(InventLocation));
qbdsInventLocationFrom.addLink(fieldNum(InventTransferTable, InventLocationIdFrom), fieldNum(InventLocation, InventLocationId));
qbdsInventLocationFrom.joinMode(JoinMode::InnerJoin);
qbdsInventLocationFrom.fetchMode(QueryFetchMode::One2One);
qbdsInventLocationTo = qbds.addDataSource(tableNum(InventLocation));
qbdsInventLocationTo.addLink(fieldNum(InventTransferTable, InventLocationIdTo), fieldNum(InventLocation, InventLocationId));
qbdsInventLocationTo.joinMode(JoinMode::InnerJoin);
qbdsInventLocationTo.fetchMode(QueryFetchMode::One2One);
qbrDataAreaId = qbdsInventLocationTo.addRange(fieldNum(InventLocation, DataAreaId));
qbrDataAreaId.value(strFmt('((%1.%3 == %4) || (%2.%3 == %4))',
qbdsInventLocationFrom.name(),
qbdsInventLocationTo.name(),
fieldStr(InventLocation, InventLocationType),
any2int(inventLocationType)));
}
qbds1 = qbds.addDataSource(tablenum(InventTransferLine));
qbds1.addLink(fieldnum(InventTransferTable, TransferId), fieldnum(InventTransferLine , TransferId));
qbds1.joinMode(JoinMode::InnerJoin);
qbds1.orderMode(OrderMode::GROUPBY);
qbds1.fetchMode(QueryFetchMode::One2One);
qbds1.addSortField(fieldnum(InventTransferLine, ItemId));
qbds1.addSortField(fieldnum(InventTransferLine, Out_ItemId));
qbds1.addSortField(fieldnum(InventTransferLine, QtyTransfer));
qbds2 = qbds1.addDataSource(tableNum(InventSum));
qbds2.addLink(fieldnum(InventTransferLine, ItemId), fieldNum(InventSum, ItemId));
qbds2.joinMode(joinMode::InnerJoin);
qbds2.orderMode(OrderMode::GROUPBY);
qbds2.fetchMode(QueryFetchMode::One2One);
qbds2.addSortField(fieldnum(InventSum, ItemId));
qbds2.addSelectionField(fieldnum(InventSum, ReservPhysical), SelectionField::SUM);
qbds2.addSelectionField(fieldnum(InventSum, PostedQty), SelectionField::SUM);
qbds2.addSelectionField(fieldnum(InventSum, Received), SelectionField::SUM);
qbds2.addSelectionField(fieldnum(InventSum, Deducted), SelectionField::SUM);
qbds2.addSelectionField(fieldnum(InventSum, Registered), SelectionField::SUM);
qbds2.addSelectionField(fieldnum(InventSum, Picked), SelectionField::SUM);
qbds2.addRange(fieldnum(InventSum, Closed)).value(SysQuery::value(NoYes::No));
qbds2.addRange(fieldNum(InventSum, PhysicalInvent)).value("> 0");
queryRun = new QueryRun(query);