Я тоже не нашел решения. Похоже, очередной глюк парсинга расширенного Range.
Чтобы увидеть проблему в dax2012 сделал джоб по таблице оборотно-сальдовой ведомости. Там есть поля типа массив
В dax2012 есть метод query.getSQLStatement(), который позволяет увидеть запрос SQL. Но эту функцию надо выполнять на стороне сервера.
X++:
static void Job_Test(Args _args)
{
MenuFunction mf;
Query query;
QueryBuildDataSource qbds;
QueryBuildRange qbRange;
;
// перезапускаем job на стороне сервера
if ( ! isRunningOnServer())
{
mf = classFactory::makeObjectOnServer(classNum(MenuFunction));
mf.objectType(MenuItemObjectType::Job);
mf.runOn(ClassRunMode::Server);
mf.object(funcName());
mf.run();
return;
}
info('Обычный фильтр по полю-массиву');
query = new Query();
qbds = query.addDataSource(tableNum(RLedgerTurnoverSheetHeader), 'T1');
qbds.addSelectionField(fieldNum(RLedgerTurnoverSheetHeader, RecId));
qbRange = qbds.addRange(fieldNum(RLedgerTurnoverSheetHeader, GroupParam), 2);
qbRange.value('XXXXXX');
info(qbds.toString());
info(query.getSQLStatement());
info('');
info('Расширенный фильтр по полю-массиву');
query = new Query();
qbds = query.addDataSource(tableNum(RLedgerTurnoverSheetHeader), 'T1');
qbds.addSelectionField(fieldNum(RLedgerTurnoverSheetHeader, RecId));
qbRange = qbds.addRange(fieldNum(RLedgerTurnoverSheetHeader, RecId));
qbRange.value('(T1.GroupParam[2] == "XXXXXX")');
info(qbds.toString());
info(query.getSQLStatement());
}
Видно, что в случае использования обычного фильтра на SQL подставляется поле "GROUPPARAM2_", а при использовании расширенного фильтра корректного парсинга уже нет и подставляется поле "GROUPPARAM"
Т.е. в dax2012 нельзя использовать в расширенных фильтрах поля типа массив