|
01.08.2014, 08:15 | #1 |
Участник
|
Клонировать QueryRun
Добрый день!
Вопрос на 5 копеек: у меня есть объект queryRun1. Как мне создать его копию и поместить скажем в queryRun2? |
|
01.08.2014, 08:21 | #2 |
Участник
|
X++: queryRun2 = new QueryRun(queryRun1.query()); |
|
01.08.2014, 08:52 | #3 |
Участник
|
|
|
01.08.2014, 09:05 | #4 |
Участник
|
Ошибаетесь. Структура запроса: джойны, рейнджы, сортировки и т.д. - это все задается на уровне query.
QueryRun же это класс отвечающий за перебор записей соответствующего Query. К стати, на уровне QueryRun ещё задается сопоставление курсоров запроса с конкретными экземплярами временных таблиц, если таковые участвуют в запросе. Вот они видимо не скопируются. Можно ещё попробовать вот так, но не уверен что это поможет. X++: queryRun2 = new QueryRun(queryRun1.pack()); |
|
01.08.2014, 09:08 | #5 |
Мрачный тип
|
Поможет, класс SysQuery именно так реализует всякие сервисные подсчеты для передаваемых запросов ...
__________________
Мы летаем, кружимся, нагоняем ужасы ... |
|
|
За это сообщение автора поблагодарили: S.Kuskov (2). |
01.08.2014, 09:15 | #6 |
Участник
|
полезный класс, если нужно, например, пересобрать запрос, объеденить. Но заметьте, работает он все равно с классом Query, а не QueryRun. Поэтому вести речь о клонировании именно QueryRun, со всем его контекстом - вообще говоря нельзя.
|
|
01.08.2014, 08:57 | #7 |
Участник
|
Я соврал, в query их как раз и нужно вешать))) тем не менее, выборка в queryRun1 и queryRun2 не совпадают...
|
|
01.08.2014, 09:14 | #8 |
Участник
|
Цитата:
X++: static void QueryRunTest(Args _args) { Query q; QueryRun qr1, qr2; QueryBuildDataSource qbds; InventTable inventTable; ; q = new Query(); qbds = q.addDataSource(tablenum(InventTable)); qbds.addRange(fieldnum(InventTable, ItemId)).value("2320"); qbds.addSelectionField(fieldnum(InventTable, ItemId)); qbds.addSelectionField(fieldnum(InventTable, ItemName)); qr1 = new QueryRun(q); while (qr1.next()) { inventTable = qr1.get(tablenum(InventTable)); info(strfmt("%1 (%2)", inventTable.ItemId, inventTable.ItemName)); } info(""); qr2 = new QueryRun(qr1.query()); while (qr2.next()) { inventTable = qr2.get(tablenum(InventTable)); info(strfmt("%1 (%2)", inventTable.ItemId, inventTable.ItemName)); } }
__________________
// no comments |
|
01.08.2014, 09:02 | #9 |
Участник
|
В общем, вот почему не сходится: queryRun1 - это запрос датасорса на форме. Датасорс выводится в грид. На грид вешается фильтр... вот это самое значение фильтра при копировании не учитывается. учитываются только рэйнджи, которые прописаны программно (там executeQuery перекрыт...). Вот. как добавить значения фильтра из грида в queryRun2?
|
|
01.08.2014, 09:07 | #10 |
Участник
|
Цитата:
Сообщение от Vasiliusis
В общем, вот почему не сходится: queryRun1 - это запрос датасорса на форме. Датасорс выводится в грид. На грид вешается фильтр... вот это самое значение фильтра при копировании не учитывается. учитываются только рэйнджи, которые прописаны программно (там executeQuery перекрыт...). Вот. как добавить значения фильтра из грида в queryRun2?
Извиняюсь, наоборот. Как передать в отчет отфильтрованные данные из формы? Последний раз редактировалось S.Kuskov; 01.08.2014 в 09:10. |
|
|
За это сообщение автора поблагодарили: Vasiliusis (1). |
01.08.2014, 09:14 | #11 |
Участник
|
Цитата:
Сообщение от S.Kuskov
Вам в этом случае нужен не DataSource.QueryRun().Query(), а DataSource.Query().
Извиняюсь, наоборот. Как передать в отчет отфильтрованные данные из формы? |
|
|
|