![]() |
#1 |
Участник
|
добавить один Query в другой
коллеги, многократно обсуждавшуюся тему связывания двух запросов хотелось бы поднять вновь.
имею желание запустить тот же запрос по результатам работы первого, и мыслится мне в этой связи следующая конструкция. ... myQuery2 = new Query(myQuery1); this.addNewRangeValues(myQuery1); // тут мои запросы становятся разными, myQuery1 делает более узкую выборку. this.addExistsJoin(myQuery2, myQuery1); // а вот тут я хочу, чтобы мой первый, более узкий запрос прилепился к хвосту с условием exists join. какие будут соображения? дополнительные детали. коренная таблица reqTrans, из которой хочу выбрать только те записи, для которых по тем же itemId и CovInventDimId существуют плановые ордера. всяких разных фильтров и прочих таблиц пользователь может надобавлять безудержно в диалоге отчёта.
__________________
Felix nihil admirari |
|
![]() |
#2 |
Дмитрий Ерин
|
Цитата:
1) существуют в принципе (в таблице) или 2) существуют в видимой выборке (после фильтров пользователя)? В первом случае, мне кажется, можно обойтись без склеивания запросов. Просто приджойнить к myQuery1 еще один datasource, скажем, planReqTrans с наложенными фильтрами (которые подразумеваются в addNewRangeValues).
__________________
![]() |
|
![]() |
#3 |
Участник
|
разумеется, вариант номер 2.
по сути требуется добавить все источники данных с отношениями-связями и наложенными фильтрами из первого запроса "под хвост" второму и сделать exists join.
__________________
Felix nihil admirari |
|
![]() |
#4 |
Участник
|
Я не очень понял те танцы с бубнами, которые вы исполняете. Зачем вам два Query? Отображайте пользователю тот запрос по которому потом будете работать, пусть пользователь прямо в него добавляет всё что хочет.
|
|
![]() |
#5 |
Участник
|
Цитата:
пользователь видит тот запрос, по которому всё выводится, и все нужные фильтры туда добавляет. проблема в том, чтобы потом из таблицы reqTrans мне нужно разложить строки во временную таблицу, которая "кормит" отчёт, по столбцам в соответствии со значением refType. среди прочих параметров, доступных пользователю есть "показывать пустые строки", который решает, выводить ли всё содержимое или только те, где колонка "запланировано" не пуста. сейчас я запускаю запрос как есть, а потом "прибиваю" ненужные строки прямо во времянке. X++: /// <summary> /// Gets the data from <c>cgiCutOrderReportTmp</c> for those only with planned transactions. /// </summary> /// <returns> /// The <c>cgiCutOrderReportTmp</c> temporary table. /// </returns> private void getCgiCutOrderReportTmpPlannedOnly() { cgiCutOrderReportTmp cgiCutOrderReportTmpPlanned; delete_from cgiCutOrderReportTmp notexists join cgiCutOrderReportTmpPlanned where cgiCutOrderReportTmpPlanned.ItemId == cgiCutOrderReportTmp.ItemId && cgiCutOrderReportTmpPlanned.cgiInventColorId == cgiCutOrderReportTmp.cgiInventColorId && cgiCutOrderReportTmpPlanned.cgiQtyPlanned; }
__________________
Felix nihil admirari |
|
![]() |
#6 |
Участник
|
Цитата:
Проблема с реализацией Exists/notexists join. AX2009. Не используйте NotExists P.S.: Хотя по той же ссылке, что я привел говорят, что через Query оно должно работать. Нужно пробовать. Готового решения нет, но теоретически можно обойти пользовательский запрос и поэлементно скопировать его к себе. Последний раз редактировалось S.Kuskov; 05.02.2015 в 08:29. |
|
|
За это сообщение автора поблагодарили: wojzeh (1). |
![]() |
#7 |
Участник
|
Цитата:
Цитата:
Сообщение от S.Kuskov
![]() Проблема с реализацией Exists/notexists join.
AX2009. Не используйте NotExists во! вот именно об этом и речь! делал ли кто-нибудь уже такой поэлементный перенос?
__________________
Felix nihil admirari |
|
|
За это сообщение автора поблагодарили: Logger (1). |
![]() |
#8 |
Участник
|
Вот тут приводится код создания точной копии Query с перебиванием dynalink'ов в range'и. По аналогии можно и обычные range'и копировать, хотя, конечно, придется повозиться.
Последний раз редактировалось gl00mie; 05.02.2015 в 19:08. |
|
|
За это сообщение автора поблагодарили: wojzeh (1). |
![]() |
#9 |
Участник
|
Цитата:
Сообщение от gl00mie
![]() Вот тут приводится код создания точной копии Query с перебиванием dynalink'ов в range'и. По аналогии можно и обычные range'и копировать, хотя, конечно, придется повозиться.
не знал, что при стандартной передаче запроса что-то теряется. это ж полный экибастуз!
__________________
Felix nihil admirari |
|
![]() |
#10 |
Участник
|
|
|
![]() |
#11 |
Участник
|
не знаю.
__________________
Felix nihil admirari |
|
Теги |
query, range, relation, ax2012 |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|