Цитата:
Сообщение от
ZVV
Это вы меня "Логгером" назвали?
Извините, совсем плохим стал. Прошу великодушнейшего прощения.
Нашел тот запрос, в котором споткнулся в свое время с fetchMode. DAX 4.0 SP2 EE. Исходный запрос упростил для отображения работы именно fetchMode. Нюанс, с которым столкнулся вчера: сие не отрабатывает, если датасорса 2. Т.е. важно, чтобы датасорсов было больше двух.
Итак:
X++:
static void vsuh_testFetchMode(Args _args)
{
CustTrans custTrans;
CustTable custTable;
Currency currency;
Query query;
QueryBuildDataSource qbds1, qbds2, qbds3;
QueryRun qr;
Counter cnt;
;
query = new Query();
qbds1 = query.addDataSource(tablenum(CustTrans));
qbds2 = qbds1.addDataSource(tablenum(CustTable));
// qbds2.fetchMode(QueryFetchMode::One2One);
qbds2.relations(true);
qbds3 = qbds1.addDataSource(tablenum(Currency));
// qbds3.fetchMode(QueryFetchMode::One2One);
qbds3.relations(true);
qr = new QueryRun(query);
while (qr.next() && cnt < 10)
{
custTrans = qr.getNo(1);
custTable = qr.getNo(2);
currency = qr.getNo(3);
info(strfmt("%1-%2-%3!", custTrans.Voucher, custTable.AccountNum, currency.CurrencyCode));
cnt++;
}
}
В этом режиме (по умолчанию, как я уже писал выше) fetchMode = QueryFetchMode::One2Many
В таблице CustTrans ваучеры уникальные - т.е. в двух записях всегда присутствуют разные ваучеры.
Итак, вариант 1 - как в джобе (fetchMode у всех QueryFetchMode::One2Many).

вариант 2 - включаем fetchMode One2One у датасорса №2

вариант 3 - включаем fetchMode One2One у датасорса №3 и fetchMode One2Many у датасорса №2

вариант 4 - включаем fetchMode One2One у датасорсов №2 и №3

на датасорс №1 значение свойства fetchMode влияния не оказывает.
Из примера - видно - что строки выбираются всегда - а "шапки" (в моем примере они подчинены строкам) - в зависимости от параметра fetchMode