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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.03.2010, 14:02   #1  
IKA is offline
IKA
Участник
 
359 / 65 (3) ++++
Регистрация: 15.03.2006
как создать поле-критерий, как в sysQueryForm
Нужно добавить на диалог поле, вкотором пользователь может указать критерий как в sysQueryForm форме. То есть , допустим," поставщик1, поставщик2" .... или ," поставщик1 .. поставщик2" и тд (чтобы выбирались в этом поле только поставщики и только на них накладывать можно было условие) Я потом если этот критерий заполнен, могу добавить нужные таблицы в запрос и наложить это условие. Если критерий не заполнен - оставить запрос неизменным.
Как такое сделать?

Последний раз редактировалось IKA; 12.03.2010 в 14:05.
Старый 12.03.2010, 14:17   #2  
IKA is offline
IKA
Участник
 
359 / 65 (3) ++++
Регистрация: 15.03.2006
Может, можно как-то стандартным запросом обойтись?
Изначально постановка такая:
Есть таблица А , есть таблица B (1одной записи в А может соответствовать несколько в B либо вообще в В не быть соответствующей записи).
Если пользователь накладывает ограничение на таблицу В, то в А надо выбрать соответствующие записи, причем, не задваивая , если в B для А две записи (т.е group by сделать).
Если пользователь не наложил критерий на B, то надо просто выбирать основываясь только по критериям, надоженным на А и соответствеенно, выбирать из А даже те записи, которых нету в B
Старый 12.03.2010, 14:31   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от IKA Посмотреть сообщение
Нужно добавить на диалог поле, вкотором пользователь может указать критерий как в sysQueryForm форме. То есть , допустим," поставщик1, поставщик2" .... или ," поставщик1 .. поставщик2" и тд (чтобы выбирались в этом поле только поставщики и только на них накладывать можно было условие) Я потом если этот критерий заполнен, могу добавить нужные таблицы в запрос и наложить это условие. Если критерий не заполнен - оставить запрос неизменным.
Как такое сделать?
См. как сделано в форме со стандартными критериями SysQueryForm
Поле для критерия должно быть основано на типе Ragne.

Есть два способа реализации подобной штуки:
1. универсальный и сложный как в форме SysQueryForm. Нужно будет перехватывать методы Lookup, Validate и пр.
2. простой и понятный: создать новый тип на основе Range и добавить туда Relation, настроить внешний вид lookup-кнопок, ширину по-умолчанию и т.п.

Есть очень неприятная засада при реализации хотелки "добавить на диалог поле".
Очень легко реализовать одну сторону: пользователь вводит значение в поле, программист изменяет query.
Чертовски трудно реализовать обратную сторону: пользователь изменяет критерий в SysQueryForm, программист отображает значение в поле.

Поэтому очень многие реализовавшие эту хотелку запрещают пользователям юзать SysQueryForm. Что приводит к другим проблемам... В общем, лучше научить пользователей юзать стандартный функционал.
__________________
полезное на axForum, github, vk, coub.
Старый 12.03.2010, 14:39   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от IKA Посмотреть сообщение
Изначально постановка такая:
...
Может, можно как-то стандартным запросом обойтись?
Стандартно - это изначально включить в запрос только таблицу A и научить пользователей в случае необходимости самостоятельно добавлять таблицу B (такая возможность присутствует в стандартном sysQueryForm).
Компромисс - это собрать изначально полный запрос A exists join B (именно exists, чтобы не делать group by) и потом анализировать задал ли пользователь фильтр по таблице B, если нет то программно удалять(отключать) источник данных B.
Старый 12.03.2010, 14:59   #5  
IKA is offline
IKA
Участник
 
359 / 65 (3) ++++
Регистрация: 15.03.2006
спасибо большое. насчет
Цитата:
пользователь изменяет критерий в SysQueryForm, программист отображает значение в поле.
- они не настолько смелы, чтобы добавлять таблицы самим в запросе. То есть, если я там оставлю только таблицу A, а таблицу B буду добавлять в ручную + сделаю поле на диалоге как Вы описали, то вероятность, что они догадаются в запрос навернуть таблицу B вручную оч мал. (если я правильно поняла проблему описанную Вами).

Последний раз редактировалось IKA; 12.03.2010 в 15:21.
Старый 15.03.2010, 17:06   #6  
Maximin is offline
Maximin
NavAx
NavAx Club
 
412 / 346 (12) ++++++
Регистрация: 09.10.2002
Адрес: Москва
Я не скажу, что первый "универсальный" метод настолько уж сложен.
Из SysQueryForm нужно выдрать не так уж много методов, обеспечивающих нужный функционал.
Правда, если в искомой таблице будут контейнерные поля (фин. аналитики), то все равно придется лезть в стандартную форму DimensionsLookup, т.к. иначе фильтроваться при lookup аналитики не будут соответственно своему номеру, но это мелочи.
Тем более, если есть возможность ограничить создаваемую функциональность "заточив" её на работу только с определенной таблицей (как в этом случае - только "Поставщики").
Не вижу также проблем при изменении запроса при использовании SysQueryForm. Сложнее, если там начнут использоваться extended query ranges. Но, думаю, налагающий такой критерий человек, знает, что делает.

Пишу, т.к. мои консультанты очень любят настраиваемые разного рода критерии, так что эту собаку ел уже неоднократно.

Сложнее бывает, когда где-то в настройках есть преднастроенный запрос, и требуется "наложить " его на текущий в форме с сохранением текущих ranges и прицепленных datasources. Но это уже совсем другая история. Что должно получиться при этом надо подробно описывать в постановке. Приходилось писать и такое.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...
Старый 15.03.2010, 20:53   #7  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Проблема в том, что твое условие невозможно реализовать без программирования. Точнее, без создания принципиально разных Query.

Условие 1: Если наложено ограничние на B, то запрос имеет вид

select A exists join B

Условие 2: Если не наложено никаких ограничений на B, то запрос имеет вид

select A

Если бы каждой записи таблицы A, соответствовала хотя бы одна запись таблицы B, то можно было бы обойтись одним запросом с exists. Но поскольку у тебя могут существовать записи A, которым не соответствует ни одной записи B, то так не получится.

В принципе, если по таблице B накладывается ограничение только по одному полю, то логично вывести это поле (точнее EDT по которому построено это поле) на форму диалога отдельно от Query. А потом, если там что-то указано, достраивать Query дополнительным DataSource.

Чтобы что-то дальше советовать, необходимо уточнение. Речь идет о классе-наследнике от RunBase, RunBaseButch, RunBaseReport? Какая версия Axapta?

Как добавить поле на форму диалога в RunBase можно посмотреть в классах Tutorial_RunBase*. А вот как достравивать запросы, тут несколько сложнее, хотя не так, чтобы очень. Просто есть некоторые тонкости...
Старый 15.03.2010, 21:34   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Maximin Посмотреть сообщение
Сложнее бывает, когда где-то в настройках есть преднастроенный запрос, и требуется "наложить " его на текущий в форме с сохранением текущих ranges и прицепленных datasources.
Хм... А в чем сложность?

Просто никогда не надо "править" element.Query()
всегда надо работать с element.QueryRun().Query().

А какие хитрости имеются в виду?
__________________
полезное на axForum, github, vk, coub.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как создать поле длиной более 255 символов? novic DAX: Программирование 13 18.05.2009 19:58
сопоставление оплат клиента, переносов сальдо-поле накладная в общем журнале? Aquarius DAX: Функционал 3 28.01.2009 12:51
Поле "Оплатить до" в строке общего журнала longson DAX: Функционал 7 29.03.2008 14:38
Пользовательский генератор строк-перечислений...- 2: Доп.вкладка для SysQueryForm Gustav DAX: База знаний и проекты 1 04.05.2007 18:04
Создание feature key на поле формы tov DAX: Администрирование 11 30.06.2003 15:49

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

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

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