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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.06.2008, 18:35   #1  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
? Можно ли в 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  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1234 (44) ++++++++
Регистрация: 11.04.2008
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  
Hyper is offline
Hyper
Участник
Соотечественники
 
163 / 29 (1) +++
Регистрация: 09.10.2003
В кернеле такая функция точно есть.

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  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
вроде должно сработать
X++:
select table where table.field like "10..20"
Правда оно, насколько я помню, не всегда (не для всех комбинаций) работает. Надо попробовать снова
Старый 19.06.2008, 10:00   #5  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Цитата:
Сообщение от kashperuk Посмотреть сообщение
вроде должно сработать
X++:
select table where table.field like "10..20"
Не, что-то не то, для строковых полей такая конструкция не работает (АХ 3.0) ...
__________________
Андрей.
Старый 19.06.2008, 10:09   #6  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Цитата:
Можно ли в SELECT использовать критерия вида "10..20" для определенного поля.
Или критерий типа "10,20,25"
Если возникла такая задача - это верный признак того, что надо отказываться от select в пользу Query. Они специально для этого разработаны в Аксапте. Не мучайте свой мозг и систему.

Так что как сказал Hyper
Цитата:
В кернеле такая функция точно есть
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 19.06.2008, 10:37   #7  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
Конечно я ожидал ответы что будете говорит что использовать Query. Но просто было интересно может кто знает как такой хитрый критерий использовать. Я просто изначально не знаю какой критерий соберет пользователь. Строка критерия хранится в одной таблице. Разумно конечно сразу прибегнуть к Query.
Но тогда другой вопрос.. а как быть с агрегатными функциями в Query? (к примеру SUM или другие)
Старый 19.06.2008, 10:45   #8  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
А если как-то вот так?
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);
    }
}
где глобальный макрос SQL_Imitation примерно следующий:
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
P.S. 13.08.2010. Через 2 года история имела продолжение здесь: select в X++ и список значений в условии where

Последний раз редактировалось Gustav; 13.08.2010 в 12:50.
Старый 19.06.2008, 10:47   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Poleax Посмотреть сообщение
а как быть с агрегатными функциями в Query?
Нормально там с агрегатными функциями.

Не парьтесь. Нарисуйте query в AOT. мышкой. попереключайте свойства и режимы.
в коде сделайте только одну строчку

Query q = new Query(querystr(mySuperQueryFromAOT));
__________________
полезное на axForum, github, vk, coub.
Старый 19.06.2008, 10:49   #10  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Цитата:
как быть с агрегатными функциями в Query? (к примеру SUM или другие)
ищите поиском addSelectionField
вопрос разобран по косточкам
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 19.06.2008, 11:16   #11  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от Dron AKA andy Посмотреть сообщение
Не, что-то не то, для строковых полей такая конструкция не работает (АХ 3.0) ...
Угу. Проверил только что.
Работает только для 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, 15:51   #12  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
Russland респект. Будем работать с query (addSelectionField) динамически его создавать.
жаль что нет ответа на наличие функции по преобразования критерия к виду для использования в select.
макросы не подойдут..
Старый 19.06.2008, 16:57   #13  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
Цитата:
Сообщение от Poleax Посмотреть сообщение
жаль что нет ответа на наличие функции по преобразования критерия к виду для использования в select.
макросы не подойдут..
А что Вы ожидаете получить от такой функции в результате? Функция ведь возвращает значение, а не оператор (или часть оператора, каковой является конструкция where). Поэтому и были предложены макросы.

Если предположить, что устроит возврат строки, то подойдет уже упоминавшаяся функция qbds.toString(). Но ведь эту строку потом как-то надо заставить выполниться, тем же runbuf()-ом. В итоге получается много лишних движений...
Старый 19.06.2008, 17:14   #14  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Poleax Посмотреть сообщение
Будем работать с query (addSelectionField) динамически его создавать.
Вот ведь неймется... Дай попрограммировать.
НЕ НАДО ДИНАМИЧЕСКИ создавать. Создайте в AOT и используйте одной строчкой
__________________
полезное на axForum, github, vk, coub.
Старый 19.06.2008, 18:23   #15  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
mazzy
Можно попробывать и в АОТ.
ладно создал Query на InventTrans.
В Range добавил TransType и Direction. Как мне теперь в коде к ним обратиться и присвоить критерии отбора?
Как полю Qty просуммировать?
Как после next() и использования результата запроса ..
пересоздать критерия, присвоить новые и заново выполнить?
Старый 19.06.2008, 20:18   #16  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Poleax Посмотреть сообщение
Как мне теперь в коде к ним обратиться и присвоить критерии отбора?
Читать документацию, мать-мать-мать.
Читать форум,
Осваивать свою профессию.

Если лениво, то просто использовать метод SysQuery::findOrCreateRange()

Цитата:
Сообщение от Poleax Посмотреть сообщение
Как полю Qty просуммировать?
Вам же сказали - создайте правильный Query в AOT. Мышкой.
Может вы все-таки почитаете доку по поводу Query?

Цитата:
Сообщение от Poleax Посмотреть сообщение
Как после next() и использования результата запроса ..
пересоздать критерия, присвоить новые и заново выполнить?
Мать-мать-мать-мать-мать-мать...
Какой нафиг "пересоздать критерий после next"? Это же приведет к изменению запроса! По сути дела, SQL выкинет данные, полученные с таким огромным трудом для предыдущего запроса, и сделает новый запрос.

Вы вообще понимаете разницу между Query и QueryRun?

Может быть, стоит прочитать про основы SQL и про то, как вообще запросы работают?

Я пас, пожалуй.
Чтобы быть конструктивным: Критерии вы можете поменять методом SysQuery::findOrCreateRange()
__________________
полезное на axForum, github, vk, coub.
Старый 19.06.2008, 23:24   #17  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Цитата:
Сообщение от Poleax
...
Как после next() и использования результата запроса ..
пересоздать критерия, присвоить новые и заново выполнить?
...
query = new Query(querystr(MyQuery));

и вперед.

Когда вы создаете экземпляр объекта Query на базе АОТ и делаете в нем фильтры, то Query в АОТе модификациям не подвергается.

Поддерживаю насчет прочтения документации хотябы по диагонали. Или найдите себе преподавателя, если лень читать.
__________________
С уважением,
glibs®
Старый 20.06.2008, 10:33   #18  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
mazzy Ох разгорячился..
так мне и надо выполнять запрос по раз 15 с разными критериями.. вся кими.. после выполнения запроса вся информация используется и запрос надо пересоздавать..
Или ты думаешь я глупости спрашиваю? Я бы не спрашивал если бы это не нужно было бы...

Скинь мне линку на доки по query с полным описание.. Читать весь форму времени нет.
Есть нормальная дока на русском? Или опять сокрушаться будем... что начинающие не радуют.
Старый 20.06.2008, 10:36   #19  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
glibs есть нормальная дока с примерами?
есть книга MBS Axapta 3 Еременко и шашкова..
там и половины нет того что вы тут пришите.. только простые query.
Если такие всезнающие моглибы просто подсказать.. а то что я не знаю я и так об этом знаю.
Поэтому и спрашиваю
Старый 20.06.2008, 10:44   #20  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
Цитата:
glibs есть нормальная дока с примерами?
к сожалению или к счастью лучшая книжка это репозитарий, а так же форумы и сайты связанные с AX..... Ну или + книга MS Inside Dynamcis AX 4.0
Теги
query, select

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
OZKA's DAX Journal: Модификация формы "Должностные лица". Blog bot DAX Blogs 0 30.09.2008 22:05
gatesasbait: Reverse keyword on Select Statements Blog bot DAX Blogs 0 08.02.2008 00:10
Можно ли в Аксапте делать "горячие клавиши"? Garic DAX: Программирование 12 25.01.2006 19:51
Как использовать значение переменной в Select-е kaw DAX: Программирование 5 23.04.2004 11:13
Зарплата-Карточка сотрудника-"профсоюз". Как использовать в расчетах?. DSV DAX: Функционал 5 16.07.2003 13:46

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 13:36.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.