19.08.2019, 19:11 | #1 |
северный Будда
|
Внешняя кверя для фильтрации на форме
Всем доброго времени суток
Столкнулся с задачей, которая наверняка могла бы у многих вызвать интерес. Итак, у нас есть 1) форма-листпейдж с головным датасоурсом (например - SalesTable). 2) Пришедшая извне на форму кверя, которая содержит фильтрацию по SalesTable (например - список заказов по клиентам, объединённым неким признаком в CustTable) вопрос - как применить эту кверю к фильтрации на форме? Мы не знаем заранее, какие именно фильтры и на каком уровне вложенности заданы во внешней квере. Соответственно, хотелось бы не делать тупой перебор, а как-то сджойнить их по SalesId, к примеру. P.S. Версия - D365FO PU 27, есличо. Но не думаю, что это критично в данном случае.
__________________
С уважением, Вячеслав Последний раз редактировалось pitersky; 19.08.2019 в 19:15. |
|
20.08.2019, 06:07 | #2 |
Участник
|
Ну так, попробуйте просто сджойнить:
DataSourceQuery exists join (ваша query) ? |
|
20.08.2019, 07:51 | #3 |
Мрачный тип
|
Цитата:
Join "жирной" таблицы на саму себя с разными ограничениями в коде проще и изящнее, но тяжелее для SQL, чем просто воспроизведение ограничений. Может неплохо так "выстрелить" ... P.S. Решал похожую задачу, делая статистический анализатор данных с произвольной формы и произвольного грида с выводом результатов настраиваемых группировок в дерево и возможностью фильтрации с произвольного узла дерева результатов данных в родительском гриде. Вот как раз для фильтрации и использовал первоначально "ленивый" join, но по ходу практического применения пошел по "тупому" пути
__________________
Мы летаем, кружимся, нагоняем ужасы ... Последний раз редактировалось TasmanianDevil; 20.08.2019 в 08:04. |
|
20.08.2019, 17:04 | #4 |
северный Будда
|
Цитата:
у меня есть два qbds на SalesTable - из формы и внешняя и как их джойнить?
__________________
С уважением, Вячеслав |
|
20.08.2019, 17:30 | #5 |
NavAx
|
Не знаю поможет или нет, но идеи можно поискать тут:
X++: CFMCustVendPaymProposalQueryHelper.copyRange(); SysQuery::mergeRanges(); SysQuery::copyDynalinks(); SysQuery::copyDataSource(); |
|
20.08.2019, 17:40 | #6 |
Moderator
|
Еще как вариант: Через query::insert_recordset() сохранить salesid из внешнего query во временную таблицу. Потом основной query заджойнить с этой таблицей через exists join. Парсить приходящий запрос не придется. Итерироваться по всем записям, чтобы каждый salesId в фильтр запихать - тоже не придется. query::insert_recordset() уйдет на SQL Server как единственный запрос.
|
|
|
За это сообщение автора поблагодарили: S.Kuskov (5), pitersky (2). |
20.08.2019, 17:42 | #7 |
Участник
|
Выгрузить во временную таблицу идентификаторы записей отфильтрованные внешним запросом и приджойнить её. Нужно конечно замерить производительность, но всё сильно будет зависеть от конкретных условий.
|
|
20.08.2019, 21:44 | #8 |
Участник
|
вариантов два.
выковыривать в коде все range из входящего query и вставлять их в query формы. сделать вьюху или времяночку на базе входящей квери, и приджойнивать её к источнику формы.
__________________
Felix nihil admirari |
|
20.08.2019, 21:49 | #9 |
Участник
|
Цитата:
делал такое постоянно. например, отфильтруй-ка мне все заказы на продажу, которые связаны с таким-то сейлом по связанной группе комиссионных. ну и так далее.
__________________
Felix nihil admirari |
|
20.08.2019, 23:56 | #10 |
Участник
|
А просто открыть две формы рядом? Одну с Вашим отфильтрованным списком, а другая SalesTable. Штатный DynaLink обеспечит первую форму как "оглавление", а подчиненная SalesTable как форму-деталировку
Что-то в самой постановке вопрос не правильное. Если выбранных заказов много, то теряется смысл. Меняем "шило" (исходная форма) на "мыло" (SalesTable) с безумными накладными расходами. Если выбранных значений мало, то перебор решает...
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
21.08.2019, 07:10 | #11 |
Administrator
|
Цитата:
__________________
Возможно сделать все. Вопрос времени |
|
21.08.2019, 16:20 | #12 |
Участник
|
примерно вот так перебирать и добавлять нужные поля для фильтрации, если их не очень много. если много и сложно, то времяночка и джойн на неё
__________________
Felix nihil admirari |
|
|
|