|
22.02.2007, 11:27 | #1 |
MCTS
|
динамический select
Вот такая нетривиальная задача:
X++: while select rPayEmplTblSum1 where rPayEmplTblSum1.EmplId == emplTable.EmplId && rPayEmplTblSum1.PayPeriod >= dateStartMth(_payPeriod) && rPayEmplTblSum1.PayPeriod <= endMth(_payPeriod) && (rPayEmplTblSum1.TimeCode == "Time1" || rPayEmplTblSum1.TimeCode == "Time3") |
|
22.02.2007, 11:29 | #2 |
Banned
|
Используйте Query. В чем проблема?
|
|
22.02.2007, 11:34 | #3 |
MCTS
|
нужно именно в select условие дополнить без Query. Может как то можно внутри цикла условие добавить?
Последний раз редактировалось Eldar9x; 22.02.2007 в 11:37. |
|
22.02.2007, 11:52 | #4 |
Banned
|
|
|
22.02.2007, 11:51 | #5 |
Программатор
|
(rPayEmplTblSum1.TimeCode == Time1 || !Time1)
если юзер выбрал переменную то условие выполнится, если нет, то проигнорируется |
|
|
За это сообщение автора поблагодарили: Eldar9x (1). |
22.02.2007, 11:55 | #6 |
Программатор
|
аааа, после того как прошол селект туда еще что то добавить???
|
|
22.02.2007, 12:04 | #7 |
NavAx
|
Как вариант
X++: while select mytable were ... { if (mytable.myfield ....) continue; if (mytable.myfield ....) continue; ... } |
|
22.02.2007, 12:06 | #8 |
MCTS
|
|
|
22.02.2007, 12:18 | #9 |
Axapta
|
Сделайте отдельный метод для формирования квери. И вообще, лучше использовать квери, там где можно. Например, не забывайте про РЛС.
Я, когда только начинал программировать в Аксе, тоже любил селект. А причина была простая - его вроде как "проще" писать было. И дело не в том, что там "и так кода наворочено". |
|
22.02.2007, 12:21 | #10 |
Участник
|
МА-А-А-АТЬ!!!
Хочется рвать и метать. Душить и вешать программистов, которые сделали этот код! МАТЬ! МАТЬ! МАТЬ! Кода там много только потому, что эти *бип*бип*бип* программисты НЕ ИСПОЛЬЗОВАЛИ query. Создайте нужный вам query в AOT, назовите его, например,myQuery. в коде напишите ОДНУ строчку X++: Query q = new Query(querystr(myQuery)) Не изобретайте велосипед и не занимайтесь закатом солнца вручную. |
|
22.02.2007, 12:08 | #11 |
Участник
|
всетаки сделайти через Query как рекомендовал EVGL - такие запросы через класс создаются оочень просто, и кода там не много будет
|
|
22.02.2007, 12:23 | #12 |
MCTS
|
там мой код
|
|
22.02.2007, 12:48 | #13 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: zemlyn (1). |
22.02.2007, 12:38 | #14 |
MCTS
|
сделал :
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 | #15 |
Участник
|
да такое решение возможно, оно зависит от цели данной операции, если это джоп то пойдет, иначе лучше использовать query
__________________
Рабочий день сокращает жизнь на 8 часов Последний раз редактировалось Himan; 22.02.2007 в 12:48. |
|
22.02.2007, 12:53 | #16 |
Участник
|
mazzy, да не переживай ты так, люди всякие бывают и каждый уверен что имеено его решение правильно. И не важно что большинство уверенно что так нельзя....
Програмист он и есть програмист.... свое здоровье оно дороже всего, а все болезни от нервов
__________________
Рабочий день сокращает жизнь на 8 часов |
|
26.02.2007, 09:37 | #17 |
Участник
|
Может человек просто заджойнить таблицу в query не умеет,
так подсказали бы... |
|
26.02.2007, 10:09 | #18 |
Участник
|
Цитата:
Может человек просто заджойнить таблицу в query не умеет,
так подсказали бы...
__________________
Рабочий день сокращает жизнь на 8 часов |
|
26.02.2007, 13:07 | #19 |
MCTS
|
Да, Александр, верно говорит, умею, просто мне "низкоуровневое" программирование ближе
|
|
26.02.2007, 13:18 | #20 |
Участник
|
Чем ниже тем ближе
|
|