Привет.
Пишем модификацию под 12-ку R3
задействовали array поля (аналог Dimension)
И вдруг выясняется что для измерений начиная с 2-ки extended query в 12-ке не работает. Хотя это было вылечено еще в 2009-й.
Обычный Query работает.
Пример - джобик отрабатывает в 2009-й
для SysDimension::Center в бд уходит запрос с фильтром такого вида
X++:
(DIMENSION2_=N'1929')
а в 2012-й аналогичный джоб приводит к
(имена полей в 12-ке у нас конечно другие - свои значения - здесь стоит Dimension чисто для иллюстрации)
Но если поставить обычный Query то в 12-ке тоже работает.
Может можно как-то это исправить ?
В синтаксисе extendedQuery что-то поменять.
X++:
static void Job503_TestDim(Args _args)
{
Query query;
QueryBuildDataSource qbds;
SysQueryRun queryRun;
SalesTable salesTable;
void test(SysDimension _finSysDimension, SysDim _num)
{
;
setPrefix(strFmt("%1 - %2", _finSysDimension, _num));
query = new query();
query.literals(1);
qbds = query.addDataSource(tableNum(SalesTable));
qbds.addSelectionField(fieldNum(SalesTable, SalesId));
// extended query для измерений начиная с 2 не работает в 12-ке
qbds.addRange(fieldNum(SalesTable, RecId)).value(
strFmt('((%1.%2=="%3"))',
qbds.name(),
fieldid2name(tablenum(SalesTable), fieldid2ext(fieldnum(SalesTable, Dimension), Dimensions::code2ArrayIdx(_finSysDimension))),
SysQuery::value(_num)
)
);
/*
// а обычный query - работает
qbds.addRange(fieldid2ext(fieldnum(SalesTable, Dimension), Dimensions::code2ArrayIdx(_finSysDimension))).value(
SysQuery::value(_num)
);
*/
queryRun = new SysQueryRun(query);
// info(queryRun.toString());
info(queryRun.query().dataSourceNo(1).toString()); // поправил для 2009-й
if (queryRun.next())
{
salesTable = queryRun.get(tableNum(SalesTable));
info(strFmt("%1", salesTable.SalesId));
}
else
{
warning(strFmt("Нет записей"));
}
}
;
setPrefix(strFmt("Test"));
// test(SysDimension::Department, '001'); // для SysDimension::Department - все работает в Extended Query
// test(SysDimension::Department, '002');
test(SysDimension::Center, '1929'); // а для SysDimension::Center - уже нет
// test(SysDimension::Center, '222');
}