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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.03.2019, 17:59   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
ax2009, ax2012: как правильно отобразить фильтр на форме?
обратите внимание:
= версия аксапты - 2009, 2012
= вопрос сформулирован "как правильно?", поэтому воздержитесь от "быстрых и грязных" решений при обсуждении.

Итак, типовая задача от пользователей - отобразить фильтр на форме.

Вы уже показывали Ctrl+F3, рассказали о возможности сохранения фильтров и даже показали как добавлять новые таблицы к стандартным фильтрам. Вы даже добавили пункт меню, который позволяет копировать настроенные фильтры другим пользователям.

Но пользователи все равно хотят фильтр на форме.
С одной стороны, добавлять таблицы в Ctrl+F3 - действительно утомляет.
С другой стороны, есть такие пользователи, что ну его нафиг, пусть будет фильтр на форме.

===============
Требования к фильтру:
= это должен быть критерий, а не единственное значение для фильтрации
= поле должно показывать текущий фильтр при входе на форму и при изменении критерия стандартными средствами (тот же Ctrl+F3)
= фильтр должен изменять только свой range, не изменяя другие критерии в запросе
= фильтр должен работать и по добавленным таблицам.


==============
типичный пример - добавить фильтр по дате в Партии на форме складских проводок.
если фильтр не задан, то показываем все проводки
если фильтр задан, то показываем проводки для которых партии заданы И дата в партии подходит под критерий

==============
типичный сценарий использования:
1. пользователь открывает форму складских проводок [скриншот 1]
2. пользователь выполняет поиск, фильтрацию сортировку (по номенклатуре, по датам, по статусам и т.п.)
3. в какой-то момент пользователь хочет отфильтровать и по дате, которая указана в партии. при этом он понимает, что после фильтрации он НЕ увидит проводок, для которых партия не включена в складских аналитиках. [в стандартном функционале] пользователь нажимает Ctrl+F3, добавляет таблицу InventBatch, добавляет range. получает проводки, отфильтрованные еще и по полю Expired Date
4. затем пользователь может убрать фильтр по номенклатуре, а фильтр по полю Expired Date оставить

==============
вопрос:
как правильно реализовать подобный функционал при помощи фильтра на форме аксапты 2009, 2012? внимание: важно не только добавлять фильтр по Expired Date, но и убирать его, когда пользователь очищает критерий.

бонус вопрос:
предположим мы реализовали подобный фильтр. как отобразить поле Expired Date в гриде, когда фильтр задан?
Миниатюры
Нажмите на изображение для увеличения
Название: 1.PNG
Просмотров: 158
Размер:	47.3 Кб
ID:	12252   Нажмите на изображение для увеличения
Название: 2.PNG
Просмотров: 209
Размер:	83.8 Кб
ID:	12253  

Нажмите на изображение для увеличения
Название: 3.PNG
Просмотров: 152
Размер:	32.3 Кб
ID:	12254   Нажмите на изображение для увеличения
Название: 4.PNG
Просмотров: 166
Размер:	63.7 Кб
ID:	12255  

__________________
полезное на axForum, github, vk, coub.
Старый 23.03.2019, 12:18   #2  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1630 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Что-то на моей практике никто не требовал " = поле должно показывать текущий фильтр при входе на форму и при изменении критерия стандартными средствами (тот же Ctrl+F3)". Это выглядит усложнением

Т.е. стандартно я делаю так
1.Для фильтров создаю временную таблицу. Это имхо позволяет удобно общаться со значениями фильтров и дает нормальный переход к основной таблице.
2. В classDeclaration формы добавляется Range или в твоем случае ссылка на QBDS. На init формы или датасорса инициализация этого Range(с признаком locked)
3. В executeQuery основной таблицы простановка в этот Range значения из полей временной таблицы(ну или в твоем случае дизейблинг датасорса)
4. На modified всех полей временной таблицы стоит executeQuery основной таблицы

В 2012 можно поиграться с addFilter на источнике данных, он вроде будет корректно работать с outerJoin
За это сообщение автора поблагодарили: mazzy (2), Corel (1).
Старый 23.03.2019, 20:41   #3  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Основной принцип который у меня в голове это
в executeQuery менять/добавлять/удалять свой range для queryRun().Query() (то есть динамическое Query на данный момент а не изначальное статическое Query). Понятно что не весь код в executeQuery(), а вызов метода на уровне element скорее всего. Насколько помню это прекрасно сочетается с вручную наложенными фильтрами.

Все остальное уже не так важно.

Временная таблица хорошая идея, иногда так делал. Но не как стандарт, а когда упрощает решение. К примеру когда список значений range явно безумен.

Последний раз редактировалось ax_mct; 23.03.2019 в 20:44.
Старый 24.03.2019, 02:30   #4  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1630 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Цитата:
Сообщение от ax_mct Посмотреть сообщение
Основной принцип который у меня в голове это
в executeQuery менять/добавлять/удалять свой range для queryRun().Query() (то есть динамическое Query на данный момент а не изначальное статическое Query).
Тут может быть проблема что queryRun().Query() будет пустой при первом вызове, т.е. если нужно ставить какие-то значения при открытии, это не будет работать.
Старый 24.03.2019, 10:39   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от trud Посмотреть сообщение
Что-то на моей практике никто не требовал " = поле должно показывать текущий фильтр при входе на форму и при изменении критерия стандартными средствами (тот же Ctrl+F3)". Это выглядит усложнением
наверное. но на проектах часто добавляют установку специальных фильтров на форму. или какое нибудь принудительное восстановление из запомненных.

кроме того, на проектах любят делать кнопки, которые устанавливают query принудительно.

Цитата:
Сообщение от trud Посмотреть сообщение
Т.е. стандартно я делаю так
1.Для фильтров создаю временную таблицу. Это имхо позволяет удобно общаться со значениями фильтров и дает нормальный переход к основной таблице.
значения или критерий? (критерий может содержать несколько значений и запятыми, всякими .. и прочими метасимволы)

другими словами, инжектить содержимое формы Ctrl+F3 в пользовательскую форму?

Цитата:
Сообщение от trud Посмотреть сообщение
2. В classDeclaration формы добавляется Range или в твоем случае ссылка на QBDS. На init формы или датасорса инициализация этого Range(с признаком locked)
3. В executeQuery основной таблицы простановка в этот Range значения из полей временной таблицы(ну или в твоем случае дизейблинг датасорса)
4. На modified всех полей временной таблицы стоит executeQuery основной таблицы
да, подход в целом стандартный и понятный (кроме временной таблицы).
но имеем стандартные недостатки - фильтры могут содержать значения, не совпадающие с текущим запросом. т.е. фильтры показывают одно, а Ctrl+F3 - другое.

Цитата:
Сообщение от trud Посмотреть сообщение
Тут может быть проблема что queryRun().Query() будет пустой при первом вызове, т.е. если нужно ставить какие-то значения при открытии, это не будет работать.
угу.


добавлено:
а что насчет добавления/убирания таблиц в query? см. пример в исходном сообщении

я к чему:
у меня ощущение, что жутко не хватает класса, который реализовал бы функционал окна Ctrl+F3.
может быть есть такой класс? может кто-то уже делал?
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 24.03.2019 в 10:48.
Старый 24.03.2019, 15:46   #6  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от trud Посмотреть сообщение
Тут может быть проблема что queryRun().Query() будет пустой при первом вызове, т.е. если нужно ставить какие-то значения при открытии, это не будет работать.
Init это частный случай, абсолютно не проблема помимо вызова в executeQuery добавить одну строку
в Init() и изменять просто Query, а не this.QueryRun().Query().

element.updateQuery(this.QueryRun() ? this.QueryRun().Query() : this.Query())
Не прямо так конечно но типа этого.

По крайней мере мне всегда этого хватало. И с точки зрения как правильно мне кажется что правильней то и нет.
Старый 25.03.2019, 19:09   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от mazzy Посмотреть сообщение
вопрос:
как правильно реализовать подобный функционал при помощи фильтра на форме аксапты 2009, 2012? внимание: важно не только добавлять фильтр по Expired Date, но и убирать его, когда пользователь очищает критерий.
зайдем с другой стороны:
кто-нибудь пробовал использовать/расширять класс SysQueryForm и/или SysQieryEdit для полей-фильтров на форме?
__________________
полезное на axForum, github, vk, coub.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
AX2012 AIF HTTP WebService и их вызов из AX2009 Dmytro.Semenakha DAX: Программирование 2 29.03.2016 09:38
Перенос и адаптация кода с Ax2009 на Ax2012 R3 matew DAX: Прочие вопросы 10 23.01.2015 19:52
Deploy reports to SRS при одновременно установленной AX2009 и ax2012 mazzy DAX: Администрирование 3 18.12.2012 15:50
Фильтр в lookup-форме не срабатывает. samolalex DAX: Программирование 4 22.11.2011 14:18
Как настроить DynaLink или фильтр в форме s.alex DAX: Программирование 9 31.08.2009 14:54

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

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

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