|
18.06.2008, 18:35 | #1 |
Модератор
|
Можно ли в SELECT использовать критерия вида "10..20"
Можно ли в SELECT использовать критерия вида "10..20" для определенного поля.
Или критерий типа "10,20,25" Может быть есть функция которой можно передать критерий "10..20,25,30" и имя поля таблицы а она выдаст нормальное условие.(на подобие что делает в query когда передаем критерий в Range, аксапта сама критерий приводит удобочитаемый вид) к примеру при спользовании "10..20,25" в итоге получали бы select table where (field1<10 AND filed1>20) OR filed1 ==25 |
|
18.06.2008, 19:23 | #2 |
Боец
|
X++: static void Job2(Args _args) { Address address; ; select address where ( (address.LineNum >= 10 && address.LineNum <= 20) || address.LineNum == 25 || address.LineNum == 30); } |
|
18.06.2008, 19:59 | #3 |
Участник
|
В кернеле такая функция точно есть.
X++: static void Test(Args _args) { Query q = new Query(); QueryBuildDataSource qbds = q.addDataSource(tablenum(CustTrans)); QueryBuildRange qbr = qbds.addRange(fieldnum(CustTrans, AmountCur)); ; qbr.value('1..2, 5*'); info(qbds.toString()); } |
|
19.06.2008, 01:50 | #4 |
Участник
|
вроде должно сработать
X++: select table where table.field like "10..20" |
|
19.06.2008, 10:00 | #5 |
Moderator
|
Не, что-то не то, для строковых полей такая конструкция не работает (АХ 3.0) ...
__________________
Андрей. |
|
19.06.2008, 11:16 | #6 |
Участник
|
Цитата:
Работает только для wildcards Пример: X++: static void Job2(Args _args) { InventTable it; ; while select it where it.ItemId like "ESB-00*" { print it.ItemId; } pause; } |
|
19.06.2008, 10:09 | #7 |
MCTS
|
Цитата:
Можно ли в SELECT использовать критерия вида "10..20" для определенного поля.
Или критерий типа "10,20,25" Так что как сказал Hyper Цитата:
В кернеле такая функция точно есть
__________________
В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|
19.06.2008, 10:37 | #8 |
Модератор
|
Конечно я ожидал ответы что будете говорит что использовать Query. Но просто было интересно может кто знает как такой хитрый критерий использовать. Я просто изначально не знаю какой критерий соберет пользователь. Строка критерия хранится в одной таблице. Разумно конечно сразу прибегнуть к Query.
Но тогда другой вопрос.. а как быть с агрегатными функциями в Query? (к примеру SUM или другие) |
|
19.06.2008, 10:45 | #9 |
Moderator
|
А если как-то вот так?
X++: static void test_SQL_Imitation(Args _args) { #macrolib.SQL_Imitation LedgerTable ledgerTable; ; // имитация: WHERE ledgerTable.AccountNum BETWEEN '01' AND '02яяяя' while select ledgerTable where #sqlBetween( ledgerTable.AccountNum, ['01','02яяяя'] ) { info (ledgerTable.AccountNum); } info ('-------------------------'); // имитация: WHERE ledgerTable.AccountNum IN ('01.20.00','01.50.00','01.70.00','02.30.00','02.40.00','02.60.00') // ! для прогона здесь следует подставить конкретные значения из плана счетов своей системы while select ledgerTable where #sqlIn( ledgerTable.AccountNum, ['01.20.00','01.50.00','01.70.00','02.30.00','02.40.00','02.60.00'] ) { info (ledgerTable.AccountNum); } } X++: #LOCALMACRO.sqlBetween (%1 >= conpeek(%2, 1) && %1 <= conpeek(%2, 2)) #ENDMACRO #LOCALMACRO.sqlIn ( %1 == conpeek(%2, 1) || %1 == conpeek(%2, 2) || %1 == conpeek(%2, 3) || %1 == conpeek(%2, 4) || %1 == conpeek(%2, 5) || %1 == conpeek(%2, 6) || %1 == conpeek(%2, 7) || %1 == conpeek(%2, 8) || %1 == conpeek(%2, 9) || %1 == conpeek(%2,10) ) #ENDMACRO Последний раз редактировалось Gustav; 13.08.2010 в 12:50. |
|
19.06.2008, 10:47 | #10 |
Участник
|
Нормально там с агрегатными функциями.
Не парьтесь. Нарисуйте query в AOT. мышкой. попереключайте свойства и режимы. в коде сделайте только одну строчку Query q = new Query(querystr(mySuperQueryFromAOT)); |
|
19.06.2008, 10:49 | #11 |
MCTS
|
Цитата:
как быть с агрегатными функциями в Query? (к примеру SUM или другие)
вопрос разобран по косточкам
__________________
В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|
19.06.2008, 15:51 | #12 |
Модератор
|
Russland респект. Будем работать с query (addSelectionField) динамически его создавать.
жаль что нет ответа на наличие функции по преобразования критерия к виду для использования в select. макросы не подойдут.. |
|
19.06.2008, 16:57 | #13 |
Дмитрий Ерин
|
Цитата:
Если предположить, что устроит возврат строки, то подойдет уже упоминавшаяся функция qbds.toString(). Но ведь эту строку потом как-то надо заставить выполниться, тем же runbuf()-ом. В итоге получается много лишних движений... |
|
19.06.2008, 17:14 | #14 |
Участник
|
Вот ведь неймется... Дай попрограммировать.
НЕ НАДО ДИНАМИЧЕСКИ создавать. Создайте в AOT и используйте одной строчкой |
|
19.06.2008, 18:23 | #15 |
Модератор
|
mazzy
Можно попробывать и в АОТ. ладно создал Query на InventTrans. В Range добавил TransType и Direction. Как мне теперь в коде к ним обратиться и присвоить критерии отбора? Как полю Qty просуммировать? Как после next() и использования результата запроса .. пересоздать критерия, присвоить новые и заново выполнить? |
|
19.06.2008, 20:18 | #16 |
Участник
|
Читать документацию, мать-мать-мать.
Читать форум, Осваивать свою профессию. Если лениво, то просто использовать метод SysQuery::findOrCreateRange() Вам же сказали - создайте правильный Query в AOT. Мышкой. Может вы все-таки почитаете доку по поводу Query? Цитата:
Какой нафиг "пересоздать критерий после next"? Это же приведет к изменению запроса! По сути дела, SQL выкинет данные, полученные с таким огромным трудом для предыдущего запроса, и сделает новый запрос. Вы вообще понимаете разницу между Query и QueryRun? Может быть, стоит прочитать про основы SQL и про то, как вообще запросы работают? Я пас, пожалуй. Чтобы быть конструктивным: Критерии вы можете поменять методом SysQuery::findOrCreateRange() |
|
19.06.2008, 23:24 | #17 |
Member
|
Цитата:
Сообщение от Poleax
...
Как после next() и использования результата запроса .. пересоздать критерия, присвоить новые и заново выполнить? ... и вперед. Когда вы создаете экземпляр объекта Query на базе АОТ и делаете в нем фильтры, то Query в АОТе модификациям не подвергается. Поддерживаю насчет прочтения документации хотябы по диагонали. Или найдите себе преподавателя, если лень читать.
__________________
С уважением, glibs® |
|
20.06.2008, 10:33 | #18 |
Модератор
|
mazzy Ох разгорячился..
так мне и надо выполнять запрос по раз 15 с разными критериями.. вся кими.. после выполнения запроса вся информация используется и запрос надо пересоздавать.. Или ты думаешь я глупости спрашиваю? Я бы не спрашивал если бы это не нужно было бы... Скинь мне линку на доки по query с полным описание.. Читать весь форму времени нет. Есть нормальная дока на русском? Или опять сокрушаться будем... что начинающие не радуют. |
|
20.06.2008, 11:07 | #19 |
Участник
|
Открыть Аксапту. Меню Помощь. Пункт руководство разработчика.
|
|
20.06.2008, 10:36 | #20 |
Модератор
|
glibs есть нормальная дока с примерами?
есть книга MBS Axapta 3 Еременко и шашкова.. там и половины нет того что вы тут пришите.. только простые query. Если такие всезнающие моглибы просто подсказать.. а то что я не знаю я и так об этом знаю. Поэтому и спрашиваю |
|
Теги |
query, select |
|
|