Коллеги, добрый день! Столкнулся с непонятной ситуацией. Не понимаю что, я делаю не так. Есть форма с фильтрами для запуска отчёта с кнопкой ВЫБОР. Пользователь нажимает кнопку и задает нужные ему фильтры. затем эти фильтры мне нужно скопировать в другой квери. Что имеем:
1. Запрос на кнопке выбор:
X++:
void initQuery()
{
Query query = new Query();
QueryBuildDataSource qbdsTable;
QueryBuildDataSource qbdsLine;
;
qbdsTable = query.addDataSource(tablenum(PurchMarkupRptTable));
qbdsTable.addGroupByField(fieldNum(PurchMarkupRptTable PurchId));
qbdsTable.addGroupByField(fieldNum(PurchMarkupRptTable RequestNumOfCarrier));
qbdsTable.addGroupByField(fieldNum(PurchMarkupRptTable, VendAccount));
qbdsLine = qbdsTable.addDataSource(tableNum(PurchMarkupRptLine));
qbdsLine.relations(true);
qbdsLine.joinMode(JoinMode::ExistsJoin);
queryrun = new SysQueryRun(query);
}
2. Затем в run накладываю ограничения на дату
X++:
this.queryRun().query().dataSourceTable(tableNum(PurchMarkupRptTable)).addRange(fieldNum(PurchMarkupRptTable DeliveryDate)).value(SysQuery::range(fromDate, toDate));
3. К примеру, пользователь установил фильтр по полю валюта. имеем запрос вида
NAME:
queryRun
VALUE:
Query object 138c3128: SELECT * FROM PurchMarkupRptTable(PurchMarkupRptTable_1) GROUP BY PurchMarkupRptTable.PurchId, PurchMarkupRptTable.RequestNumOfCarrier, PurchMarkupRptTable.VendAccount WHERE ((DeliveryDate>={ts '2013-01-01 00:00:00.000'} AND DeliveryDate<={ts '2013-12-31 00:00:00.000'})) AND ((PurchMarkupRptTable(PurchMarkupRptTable_1).CurrencyCode = N'AMD')) EXISTS JOIN * FROM PurchMarkupRptLine(PurchMarkupRptLine_1) WHERE PurchMarkupRptTable.LineNumber = PurchMarkupRptLine.LineNumber AND PurchMarkupRptTable.PurchId = PurchMarkupRptLine.PurchId
TYPE:
QueryRun
4. переписываю рейнджи в новый квери, запрос из пункта 3 лежит в queryRun
X++:
for (i = 1; i <= queryRun.query().dataSourceCount(); i++)
{
qbdsFrom = queryRun.query().dataSourceNo(i);
for (j = 1; j <= qbdsFrom.rangeCount(); j++)
{
qbrFrom = qbdsFrom.range(j);
if (qbrFrom.value())
{
qbr = q.dataSourceNo(i).addRange(qbdsFrom.range(j).field());
qbr.value(qbrFrom.value());
}
}
}
Проблема в том, что выбранные пользователем фильтры такая штука в упор не видит. Кроме тех, которые наложены на поля из уникального индекса и фильтра на дату. Так же смущает
AND ((PurchMarkupRptTable(PurchMarkupRptTable_1).CurrencyCode = N'AMD')), почему не
AND CurrencyCode = N'AMD'???
Что я делаю не так? Заранее спасибо