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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.04.2002, 19:24   #1  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Как в query создать relation вида...
... неравно.

Например, хочу сделать query вида:
<pre> InventTrans T1, T2;

select T2 join T1 where T2.InventDimId == T1.InventDimId && T2.InventTransId != T1.InventTransId;</pre>

Если у кого-нибудь есть идеи, как это реализовать с помощью query, пожалуйста, поделитесь.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 01.04.2002, 21:05   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Не очень понятен смысл этого выражения. Попарно все движения с одинаковой складской аналитикой. А зачем? Это ж офигительная выборка получится. А смысла никакого...

В любом случае - неравенство это тип связи notexist.

А почему именно query?
Почему не хочешь выбрать все InventDim'ы, а затем проверить внутри на несовпадение? Среди выбранного богатства совпадающие inventTransID составят несколько процентов... Т.е. с запросом провозишься, а выиграешь несколько процентов... Стоит ли?
__________________
полезное на axForum, github, vk, coub.
Старый 02.04.2002, 11:24   #3  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Наверное, не очень корректно сформулировал...
В виде SQL-запросов то, что я хочу сделать, выглядит примерно так:
<pre>
InventTrans T1, T2;

select firstonly T1 where T1.InventTransId == X;

while select T2 where T2.InventDimId == T1.InventDimId && T2.InventTransId != T1.InventTransId
{
// bla, bla, bla...
}</pre>

Это я хочу сделать с помощью query, чтобы использовать эту выборку в отчете. Проблема в том, что при создании query для отчета единственный доступный тип связи, это "==", причем сравниваются только поля (с фиксированными величинами сравнивать нельзя). Правда, если делать отчет мастером отчетов, то иногда получается сравнить с фиксированной величиной (эти связи добавляются автоматически), а вот в ручную такую связь добавить не удается.

Можно поподробнее про связь notexist. Каким образом ее создать?
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 02.04.2002, 19:27   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
notexist не надо создавать это свойство JoinMode у датасорса.

Насчет мастера и сравнения с константой. Можно подробнее?
__________________
полезное на axForum, github, vk, coub.
Старый 04.04.2002, 10:11   #5  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Изначально опубликовано mazzy
Насчет мастера и сравнения с константой. Можно подробнее?
Если создавать отчет с помощью мастера, то иногда (когда, я пока не понял) создаются relation вида <ПОЛЕ> = <КОНСТАНТА> (при этом в свойствах relation поля related field и related table недоступны для редактирования). Создать такой relation прямо в AOT мне не удалось (получаются только relation вида <ПОЛЕ> = <ПОЛЕ>).
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 04.04.2002, 13:41   #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
Ладно - поделюсь стратегическим знанием

static void FedTest(Args _args)
{
Query qry;
QueryRun qrun;
InventTrans inventTrans1,inventTrans2;
QueryBuildDataSource qbds;
QueryBuildRange qbr;

qry = new Query();
qbds=qry.addDataSource(tablenum(inventTrans),"it1");
qbds=qbds.addDataSource(tablenum(inventTrans),"it2");
qbds.relations(false);
qbr=qbds.addRange(fieldnum(inventTrans,voucher));
qbr.value("( (it1.InventDimId != it2.InventDimId ) && (it1.inventTransId == it2.inventTransId) )");
qrun = new QueryRun(qry);
qrun.reset();
while (qrun.next())
{
inventTrans1 = qrun.getNo(1);
inventTrans2 = qrun.getNo(2);
print inventTrans1.InventTransId, " ", inventTrans1.InventDimId," ",inventTrans2.InventTransId," ",inventTrans2.inventDimId;
pause;
}



}
Старый 04.04.2002, 13:55   #7  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Спасибо, но это фильтрация через Range
В принципе, тоже подойдет, но просто ради спортивного интереса я пытаюсь ее сделать через relation. Кажется, mazzy прав, стоит попробовать JoinMode NotExist. Пока не было времени проверить. Как сделаю, сообщу.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 05.04.2002, 09:25   #8  
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
Если при использовании данного подхода включить трассировку SQL-запросов, можно увидеть, что Axapta генерирует вполне правильный join двух таблиц, который очень даже быстро отрабатывает.
Собственно - не вижу никаких преимуществ использования relation в данной ситуации.
Старый 05.04.2002, 19:04   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
max, спасибо. Только узнать бы "когда" она это делает.

fed,
запрос генерируется нормальный. Это да.
Есть только один недостаток: это делается через программирование.
А как сделать без программирования?

И еще одно замечание:
если через программирование, то второе условие в range value лишнее. Лучше прилинковать таблицы явно через addDynalink, а не через range.
Старый 05.04.2002, 19:20   #10  
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
Привет mazzy !
Ну - собственно - если у тебя две одинковых таблицы в запросе отчета, то тебе все равно придеться метод fetch перепрограммировать, иначе тебе до нужного экземпляра таблицы не добраться.
Кстати - и за что же ты так программирование не любишь ?
Я же не предлагаю систему корреспонденции проводок переделать .
Старый 05.04.2002, 21:02   #11  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Да. точно. Придется. Я не подумал об этом.

Программирование я люблю.

Просто мне кажется, что программисты очень часто забывают о стандартных и штатных фичах программы (и сам такой). В результате строки срываются на ровном месте. Поэтому первый вопрос, который я себе задаю - как это сделать без программирования.

Кроме того, Аксапта позиционируется как готовая программа. Она таковой и является. В моей Аксапта-практике - если возникает необходимость глобального программирования, то чаще всего я чего-то не понимаю или не знаю.

Например, этот вопрос max'а: сделать query вида.
В такой формулировке можно сделать только программированием.
НО! Наверняка макс не просто так вопрос задает. Наверняка он решает какую-то важную задачу. Уверен, что существует решение его задачи без программирования. Уверен, что его задачу можно решить в Аксапте быстрее и эффективнее, если решать ее без программирования.

Max, скажи, что за проблема то?
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX: QueryRun and Query Objects - Binding operation failed to allocate buffer space Blog bot DAX Blogs 0 03.04.2009 08:05
palleagermark: Sample union query from AX 2009 Blog bot DAX Blogs 0 11.07.2008 20:05
Dynamics AX Geek: Using query() Blog bot DAX Blogs 0 28.10.2006 16:40
Установка условия ИЛИ (OR) в Query Zeratul DAX: Программирование 3 22.06.2006 14:28
Создать Relation в AOT программным кодом EVGL DAX: Программирование 3 21.05.2003 12:47
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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