|  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, 08:57 | #4 | 
| Участник | 
			
			Я соврал, в query их как раз и нужно вешать))) тем не менее, выборка в queryRun1 и queryRun2 не совпадают...
		 | 
|  | 
|  01.08.2014, 09:02 | #5 | 
| Участник | 
			
			В общем, вот почему не сходится: queryRun1 - это запрос датасорса на форме. Датасорс выводится в грид. На грид вешается фильтр... вот это самое значение фильтра при копировании не учитывается. учитываются только рэйнджи, которые прописаны программно (там executeQuery перекрыт...). Вот. как добавить значения фильтра из грида в queryRun2?
		 | 
|  | 
|  01.08.2014, 09:05 | #6 | 
| Участник | 
			
			Ошибаетесь. Структура запроса: джойны, рейнджы, сортировки и т.д. - это все задается на уровне query. QueryRun же это класс отвечающий за перебор записей соответствующего Query. К стати, на уровне QueryRun ещё задается сопоставление курсоров запроса с конкретными экземплярами временных таблиц, если таковые участвуют в запросе. Вот они видимо не скопируются. Можно ещё попробовать вот так, но не уверен что это поможет. X++: queryRun2 = new QueryRun(queryRun1.pack()); | 
|  | 
|  01.08.2014, 09:07 | #7 | 
| Участник | Цитата: 
		
			Сообщение от Vasiliusis
			   В общем, вот почему не сходится: queryRun1 - это запрос датасорса на форме. Датасорс выводится в грид. На грид вешается фильтр... вот это самое значение фильтра при копировании не учитывается. учитываются только рэйнджи, которые прописаны программно (там executeQuery перекрыт...). Вот. как добавить значения фильтра из грида в queryRun2? Извиняюсь, наоборот. Как передать в отчет отфильтрованные данные из формы? Последний раз редактировалось S.Kuskov; 01.08.2014 в 09:10. | 
|  | |
| За это сообщение автора поблагодарили: Vasiliusis (1). | |
|  01.08.2014, 09:08 | #8 | 
| Мрачный тип | 
			
			Поможет, класс SysQuery именно так реализует всякие сервисные подсчеты для передаваемых запросов ...
		 
				__________________ Мы летаем, кружимся, нагоняем ужасы ... | 
|  | |
| За это сообщение автора поблагодарили: S.Kuskov (2). | |
|  01.08.2014, 09:14 | #9 | 
| Участник | Цитата: 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:14 | #10 | 
| Участник | Цитата: 
		
			Сообщение от S.Kuskov
			   Вам в этом случае нужен не DataSource.QueryRun().Query(), а DataSource.Query(). Извиняюсь, наоборот. Как передать в отчет отфильтрованные данные из формы?   | 
|  | 
|  01.08.2014, 09:15 | #11 | 
| Участник | 
			
			полезный класс, если нужно, например, пересобрать запрос, объеденить. Но заметьте, работает он все равно с классом Query, а не QueryRun. Поэтому вести речь о клонировании именно QueryRun, со всем его контекстом - вообще говоря нельзя.
		 | 
|  | 
|  01.08.2014, 13:12 | #12 | 
| Мрачный тип | 
			
			S.Kuskov, неправда Ваша - всякие count<Всякое>() в нем работают именно с объектом типа QueryRun и именно его клонируют через контейнер, производя вычисления.
		 
				__________________ Мы летаем, кружимся, нагоняем ужасы ... | 
|  | 
|  01.08.2014, 13:57 | #13 | 
| Участник | Цитата: Вот небольшой пример: X++: static void JobTEST_QueryRunPack(Args _args) { Query query; QueryRun queryRun1, queryRun2; TmpABC TmpABC1; ; query = new Query(); query.addDataSource(tableNum(TmpABC)); TmpABC1.clear(); TmpABC1.Amount = 123.45; TmpABC1.doInsert(); queryRun1 = new QueryRun(query); queryRun1.setCursor(TmpABC1); info(strfmt("SysQuery::countTotal(queryRun1): %1", SysQuery::countTotal(queryRun1))); // 0 info(""); queryRun2 = new QueryRun(queryRun1.pack()); // "клонируем" QueryRun info("queryRun2:"); info("{"); while (queryRun2.next()) // {} { TmpABC1 = queryRun2.get(tableNum(TmpABC)); info(strfmt("%1", TmpABC1.Amount)); } info("}"); info(""); info("queryRun1:"); info("{"); while (queryRun1.next()) // {123,45} { TmpABC1 = queryRun1.get(tableNum(TmpABC)); info(strfmt("%1", TmpABC1.Amount)); } info("}"); } | 
|  | 
|  04.08.2014, 06:58 | #14 | 
| Мрачный тип | 
			
			Угу, про времянки, читая ответ по диагонали, я как-то пролетел мимо    
				__________________ Мы летаем, кружимся, нагоняем ужасы ... | 
|  | 
|  | 
| 
 |