AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.08.2019, 19:11   #1  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Внешняя кверя для фильтрации на форме
Всем доброго времени суток

Столкнулся с задачей, которая наверняка могла бы у многих вызвать интерес.
Итак, у нас есть
1) форма-листпейдж с головным датасоурсом (например - SalesTable).
2) Пришедшая извне на форму кверя, которая содержит фильтрацию по SalesTable (например - список заказов по клиентам, объединённым неким признаком в CustTable)

вопрос - как применить эту кверю к фильтрации на форме? Мы не знаем заранее, какие именно фильтры и на каком уровне вложенности заданы во внешней квере. Соответственно, хотелось бы не делать тупой перебор, а как-то сджойнить их по SalesId, к примеру.

P.S. Версия - D365FO PU 27, есличо. Но не думаю, что это критично в данном случае.
__________________
С уважением,
Вячеслав

Последний раз редактировалось pitersky; 19.08.2019 в 19:15.
Старый 20.08.2019, 06:07   #2  
Pandasama is offline
Pandasama
Участник
 
457 / 137 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
Ну так, попробуйте просто сджойнить:
DataSourceQuery exists join (ваша query) ?
Старый 20.08.2019, 07:51   #3  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Цитата:
Сообщение от pitersky Посмотреть сообщение
хотелось бы не делать тупой перебор, а как-то сджойнить их по SalesId, к примеру.
Не конкретно в данном случае, а вообще в контексте такой задачи - я за тупость, она надежнее
Join "жирной" таблицы на саму себя с разными ограничениями в коде проще и изящнее, но тяжелее для SQL, чем просто воспроизведение ограничений. Может неплохо так "выстрелить" ...

P.S. Решал похожую задачу, делая статистический анализатор данных с произвольной формы и произвольного грида с выводом результатов настраиваемых группировок в дерево и возможностью фильтрации с произвольного узла дерева результатов данных в родительском гриде. Вот как раз для фильтрации и использовал первоначально "ленивый" join, но по ходу практического применения пошел по "тупому" пути
__________________
Мы летаем, кружимся, нагоняем ужасы ...

Последний раз редактировалось TasmanianDevil; 20.08.2019 в 08:04.
Старый 20.08.2019, 17:04   #4  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Цитата:
Сообщение от Pandasama Посмотреть сообщение
Ну так, попробуйте просто сджойнить:
DataSourceQuery exists join (ваша query) ?
как вы это себе представляете?
у меня есть два qbds на SalesTable - из формы и внешняя
и как их джойнить?
__________________
С уважением,
Вячеслав
Старый 20.08.2019, 17:30   #5  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
Не знаю поможет или нет, но идеи можно поискать тут:
X++:
CFMCustVendPaymProposalQueryHelper.copyRange();
SysQuery::mergeRanges();
SysQuery::copyDynalinks();
SysQuery::copyDataSource();
Старый 20.08.2019, 17:40   #6  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,909 / 5730 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Еще как вариант: Через 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  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Выгрузить во временную таблицу идентификаторы записей отфильтрованные внешним запросом и приджойнить её. Нужно конечно замерить производительность, но всё сильно будет зависеть от конкретных условий.
Старый 20.08.2019, 21:44   #8  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
674 / 512 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
вариантов два.

выковыривать в коде все range из входящего query и вставлять их в query формы.

сделать вьюху или времяночку на базе входящей квери, и приджойнивать её к источнику формы.
__________________
Felix nihil admirari
Старый 20.08.2019, 21:49   #9  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
674 / 512 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
Цитата:
Сообщение от pitersky Посмотреть сообщение
как вы это себе представляете?
у меня есть два qbds на SalesTable - из формы и внешняя
и как их джойнить?
как наши отцы и деды джойнили! прям на форме добавить новый датасорс на времянку и заполнять её в момент открытия или по мере надобности

делал такое постоянно. например, отфильтруй-ка мне все заказы на продажу, которые связаны с таким-то сейлом по связанной группе комиссионных. ну и так далее.
__________________
Felix nihil admirari
Старый 20.08.2019, 23:56   #10  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
А просто открыть две формы рядом? Одну с Вашим отфильтрованным списком, а другая SalesTable. Штатный DynaLink обеспечит первую форму как "оглавление", а подчиненная SalesTable как форму-деталировку

Что-то в самой постановке вопрос не правильное. Если выбранных заказов много, то теряется смысл. Меняем "шило" (исходная форма) на "мыло" (SalesTable) с безумными накладными расходами. Если выбранных значений мало, то перебор решает...
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 21.08.2019, 07:10   #11  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,322 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от pitersky Посмотреть сообщение
P.S. Версия - D365FO PU 27, есличо. Но не думаю, что это критично в данном случае.
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
А просто открыть две формы рядом? Одну с Вашим отфильтрованным списком, а другая SalesTable. Штатный DynaLink обеспечит первую форму как "оглавление", а подчиненная SalesTable как форму-деталировку
Для D365FO это не работает. 2 независимых окна браузера конечно открыть можно, но они не будут связаны DynaLink-ом. Эта технология применяется в Form Parts, но эти формочки слишком маленькие для размещения большого количества информации.
__________________
Возможно сделать все. Вопрос времени
Старый 21.08.2019, 16:20   #12  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
674 / 512 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
Нажмите на изображение для увеличения
Название: SalesTableListPageInteraction.png
Просмотров: 115
Размер:	194.5 Кб
ID:	12370

примерно вот так перебирать и добавлять нужные поля для фильтрации, если их не очень много.

если много и сложно, то времяночка и джойн на неё
__________________
Felix nihil admirari
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
ax2009, ax2012: как правильно отобразить фильтр на форме? mazzy DAX: Программирование 6 25.03.2019 19:09
Итератор с поддержкой методов обратного вызова для обработки контролов на форме gl00mie DAX: Программирование 18 06.08.2013 22:16
Отображение таблицы в новой форме форме DAsm DAX: Программирование 23 04.03.2011 21:50
Как правильно связать таблицы в форме? Как показать параметры партии? mazzy DAX: Программирование 10 27.10.2010 15:56
Несинхронность размерности полей в форме поиска... glibs DAX: Функционал 0 05.04.2010 21:54

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 19:40.