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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.02.2007, 11:27   #1  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
динамический select
Вот такая нетривиальная задача:
X++:
while select rPayEmplTblSum1
                where rPayEmplTblSum1.EmplId == emplTable.EmplId &&
                      rPayEmplTblSum1.PayPeriod >= dateStartMth(_payPeriod) &&
                      rPayEmplTblSum1.PayPeriod <= endMth(_payPeriod) &&
                      (rPayEmplTblSum1.TimeCode == "Time1" || rPayEmplTblSum1.TimeCode == "Time3")
а есть еще query в котором из таблицы RPayTblTimeTable пользователь выбирает нужные ему таймы. Так эти выбранные таймы нужно каким то макаром загнать в условие selecta. То есть допустим в query если выбраны только таймы "Time1" и "Time3" то select будет выглядеть так, как показано в коде
Старый 22.02.2007, 11:29   #2  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Используйте Query. В чем проблема?
Старый 22.02.2007, 11:34   #3  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
нужно именно в select условие дополнить без Query. Может как то можно внутри цикла условие добавить?

Последний раз редактировалось Eldar9x; 22.02.2007 в 11:37.
Старый 22.02.2007, 11:51   #4  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
(rPayEmplTblSum1.TimeCode == Time1 || !Time1)
если юзер выбрал переменную то условие выполнится, если нет, то проигнорируется
За это сообщение автора поблагодарили: Eldar9x (1).
Старый 22.02.2007, 11:52   #5  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
нужно именно в select условие дополнить без Query. Может как то можно внутри цикла условие добавить?
Можно все. Только медненно будет, очевидно. Почему нельзя query? Не хотите кардинально менять код из DIS?
Старый 22.02.2007, 11:55   #6  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
аааа, после того как прошол селект туда еще что то добавить???
Старый 22.02.2007, 12:04   #7  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
Как вариант
X++:
   while select mytable were ...
   {
      if (mytable.myfield ....)
         continue;
      if (mytable.myfield ....)
         continue;
      ...
   }
Но лучше стремиться одним селектом отсечь все лишнее и получить все возможные данные.
Старый 22.02.2007, 12:06   #8  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань

EVGL vbmenu_register("postmenu_131476", true); хочу обойтись без query. Там и так кода наворочено...
Sada vbmenu_register("postmenu_131479", true); а если выбрано несколько таймов?
Старый 22.02.2007, 12:08   #9  
Jony is offline
Jony
Участник
 
99 / 22 (1) +++
Регистрация: 25.06.2003
Адрес: г. Барнаул
всетаки сделайти через Query как рекомендовал EVGL - такие запросы через класс создаются оочень просто, и кода там не много будет
Старый 22.02.2007, 12:18   #10  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
Там и так кода наворочено...
Сделайте отдельный метод для формирования квери. И вообще, лучше использовать квери, там где можно. Например, не забывайте про РЛС.

Я, когда только начинал программировать в Аксе, тоже любил селект. А причина была простая - его вроде как "проще" писать было. И дело не в том, что там "и так кода наворочено".
Старый 22.02.2007, 12:21   #11  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
Там и так кода наворочено...
МА-А-А-АТЬ!!!
Хочется рвать и метать. Душить и вешать программистов, которые сделали этот код!
МАТЬ! МАТЬ! МАТЬ!

Кода там много только потому, что эти *бип*бип*бип* программисты НЕ ИСПОЛЬЗОВАЛИ query.

Создайте нужный вам query в AOT, назовите его, например,myQuery.
в коде напишите ОДНУ строчку
X++:
Query q = new Query(querystr(myQuery))
Пожалуйста, используйте стандартные средства ядра.
Не изобретайте велосипед и не занимайтесь закатом солнца вручную.
__________________
полезное на axForum, github, vk, coub.
Старый 22.02.2007, 12:23   #12  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
там мой код
Старый 22.02.2007, 12:38   #13  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
сделал :

X++:
    queryRun.reset();
            RPayCalendarTimeTable = queryRun.get(tableNum(RPayCalendarTimeTable));
            do
            {
                while select rPayEmplTblSum1
                    where rPayEmplTblSum1.EmplId == emplTable.EmplId &&
                          rPayEmplTblSum1.PayPeriod >= dateStartMth(_payPeriod) &&
                          rPayEmplTblSum1.PayPeriod <= endMth(_payPeriod) &&
                          (rPayEmplTblSum1.TimeCode == RPayCalendarTimeTable.PayCalendarTimeCode || !RPayCalendarTimeTable.PayCalendarTimeCode)
                {
                      FactSum += rPayEmplTblSum1.HourFact;
                      SheduleSum += rPayEmplTblSum1.HourSchedule;
                }
            }
            while (queryRun.next());
Старый 22.02.2007, 12:44   #14  
Himan is offline
Himan
Участник
Аватар для Himan
 
312 / 12 (1) ++
Регистрация: 07.11.2006
Адрес: Tumen
да такое решение возможно, оно зависит от цели данной операции, если это джоп то пойдет, иначе лучше использовать query
__________________
Рабочий день сокращает жизнь на 8 часов

Последний раз редактировалось Himan; 22.02.2007 в 12:48.
Старый 22.02.2007, 12:48   #15  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
там мой код
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: zemlyn (1).
Старый 22.02.2007, 12:53   #16  
Himan is offline
Himan
Участник
Аватар для Himan
 
312 / 12 (1) ++
Регистрация: 07.11.2006
Адрес: Tumen
mazzy, да не переживай ты так, люди всякие бывают и каждый уверен что имеено его решение правильно. И не важно что большинство уверенно что так нельзя....
Програмист он и есть програмист....
свое здоровье оно дороже всего, а все болезни от нервов
__________________
Рабочий день сокращает жизнь на 8 часов
Старый 26.02.2007, 09:37   #17  
Волчара is offline
Волчара
Участник
 
210 / 29 (1) +++
Регистрация: 08.02.2003
Адрес: Москва
Может человек просто заджойнить таблицу в query не умеет,
так подсказали бы...
__________________
Благодарю за поддержку ИЦ Кариатиду и Koder Logic
Старый 26.02.2007, 10:09   #18  
Himan is offline
Himan
Участник
Аватар для Himan
 
312 / 12 (1) ++
Регистрация: 07.11.2006
Адрес: Tumen
Цитата:
Может человек просто заджойнить таблицу в query не умеет,
так подсказали бы...
Умеет, просто не хочет
__________________
Рабочий день сокращает жизнь на 8 часов
Старый 26.02.2007, 13:07   #19  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Да, Александр, верно говорит, умею, просто мне "низкоуровневое" программирование ближе
Старый 26.02.2007, 13:18   #20  
Волчара is offline
Волчара
Участник
 
210 / 29 (1) +++
Регистрация: 08.02.2003
Адрес: Москва
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
Да, Александр, верно говорит, умею, просто мне "низкоуровневое" программирование ближе
Чем ниже тем ближе
__________________
Благодарю за поддержку ИЦ Кариатиду и Koder Logic
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
2 while select или join? _scorp_ DAX: Программирование 9 23.01.2009 16:02
Разница NotInTTS и Found Logger DAX: База знаний и проекты 6 18.09.2008 12:35
gatesasbait: Reverse keyword on Select Statements Blog bot DAX Blogs 0 08.02.2008 00:10
Fred Shen: Always use recId to know if a select statement returns a record Blog bot DAX Blogs 0 28.10.2006 16:40
Вопрос про Demand Planner slava09 DAX: Функционал 4 25.09.2006 11:43
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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