22.06.2013, 17:53 | #1 |
Участник
|
Динамическое изменений JOIN в форме
Доброго времени суток.
Вопрос, пожалуй, скорее не по джойну, а по тупняку моему с Query и формами Axapta 3, Form InventTable Имеется справочник совместимости, связь идёт по ItemId, список совместимых кодов выводится на отдельной вкладке. Вобщем к InventTable приджойнена новая таблица (ItemsCompat) Delayed-Join, и стандартно приджойнены InnerJoin три раза InventTableModule и 1 раз InventItemLocation. Хочется сделать возможности динамически (по галочке) отображать только те товары, для которых имеется совместимость. Если добавить ещё раз в DataSource таблицу совместимостей, но с Exist-Join, то получается как раз список нужных товаров, но после изменения в коде: X++: CompatItems_ds.linkType(FormLinkType::...) При попытке работы с Query (в поиске нашлись примеры) напрямую тоже не удалось, судя по всему из-за того, что джойн на таблицу совместимостей уже имеется в самих датасорсах. |
|
|
За это сообщение автора поблагодарили: NataLee (1). |
22.06.2013, 21:26 | #2 |
Участник
|
Не надо менять LinkType - это не работает. Если нужен отключаемый фильтр по дополнительному datasource'у, управляйте "включенностью" соотв. datasource'а в запросе с помощью свойства enabled:
X++: QueryBuildDataSource qbds; ; // ... qbds = InventTable_QR.query().dataSource(tablenum(ItemsCompat)); qbds.enabled(FilterCheckBox.value()); InventTable_DS.research(); |
|
|
За это сообщение автора поблагодарили: NataLee (1), Logger (1), Helm (1), Vlad_ (1). |
23.06.2013, 16:09 | #3 |
Участник
|
Как вариант для решения можно попытаться пойти по следующему пути:
Убрать из формы ItemsCompat. При открытии формы сохранить Query на InventTable который будет стандартным. При нажатии на checkbox вызвать например класс, в который отправится первоначальный Query. В классе сделаете к dataSource InventTable - adddatasource ItemsCompat и join тот который надо. Измененный Query вернуть в форму, потом InventTable_ds.query( Query ) и ExecuteQuery. Должно сработать. Что бы вернуть обратно, просто сделать InventTable_ds.query( Query ), где Query тот сохраненный при открытии. Однако может появится проблема, если возникнет необходимость отображать поля из таблицы ItemsCompat. Ее можно решить с помощью display методов. а это влечет за собой свои проблемы. |
|
|
За это сообщение автора поблагодарили: NataLee (1). |
23.06.2013, 20:58 | #4 |
Роман Долгополов (RDOL)
|
вариант плох хотя бы тем, что сбрасывает пользовательские фильтры и сортировки
gl00mie посоветовал абсолютно работоспособный и проверенный годами вариант без побочных эффектов - добавить еще один DS по ItemsCompat (можно сразу в дизайн, можно программно) по exists join и управлять его включением |
|
|
За это сообщение автора поблагодарили: NataLee (1). |
23.06.2013, 21:43 | #5 |
Участник
|
Да, всё помогло. Спасибо большое, gl00mie!
Не знал про Enabled, позорище( |
|
24.06.2013, 10:46 | #6 |
Участник
|
Цитата:
вариант плох хотя бы тем, что сбрасывает пользовательские фильтры и сортировки
|
|
14.04.2020, 11:15 | #7 |
Участник
|
Привет Вам, gl00mie, и спасибо из 2020
|
|