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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.11.2003, 13:19   #1  
AXnovice is offline
AXnovice
Участник
 
6 / 10 (1) +
Регистрация: 23.09.2003
Условия в Query
Есть Query: InventTable && exists join priceDiscTable.
В job-е накладываются различные условия, в том числе и такое:

str st;
PriceTable = q.dataSourceTable(Tablenum(PriceDiscTable));

st = 'PriceDiscTable.Currency = ' + queryValue(Currency);
PriceTable.addrange(fieldNum(PriceDiscTable, Currency)).value(st);
- в выборке пусто
Если написать так:
PriceTable.addrange(fieldNum(PriceDiscTable, Currency)).value(queryValue(Currency));
- выбирает
? что не так в первом случае
Старый 11.11.2003, 13:58   #2  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Так как в данном случае используется простой фильтр по значению поля, писать строковое выражение для последующего использования его в запросе не нужно, лучше и правильнее использовать именно 2-й работающий вариант. В случае сложных запросов иногда требуется передать в запрос сформированное в виде текста условие, оно должно выглядеть примерно так (обратите внимание на внешние скобки и двойное равенство):

PHP код:
st strFmt' (PriceDiscTable.Currency == %1 ) 'Currency ); 
__________________
Андрей.
Старый 11.11.2003, 14:01   #3  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
1. Не "=", а "=="
2. Если источник создан кодом и не имеет имени, то не "PriceDiscTable.Currency", а "Currency". Тем более, если в запрос входит только одна таблица.
3. В таких выражениях строковые значения типа Currency должны быть, по идее, в двойных кавычках на случай, если они содержат пробелы, специальные знаки и т.д.
Старый 11.11.2003, 15:51   #4  
AXnovice is offline
AXnovice
Участник
 
6 / 10 (1) +
Регистрация: 23.09.2003
Попробовал Ваш вариант - не работает
Попробовал Ваш вариант (strfmt(...)) - не работает
Насчет = или == пробовал и так и так - без разницы(в смысле одинаково не работает)
Проблема естественно не в данном простом примере, а в том, что если этот не работает, то и более сложные тоже не работают.
Например что-то вроде:
PriceTable.rangeField(fieldNum(PriceDiscTable, FromDate)).value(
'(!'+tableId2name(tableNum(PriceDiscTable)) +
'.' + fieldId2name(tableNum(PriceDiscTable), fieldNum(PriceDiscTable, FromDate)) +
') || (' +
tableId2name(tableNum(PriceDiscTable)) +
'.' + fieldId2name(tableNum(PriceDiscTable), fieldNum(PriceDiscTable, FromDate)) +
' < ' + queryvalue(SalesPurchDate) + ')');
И всетаки почему не работает?!!!
Добавление кавычек не помогает, добавление скобок:
st = '(PriceDiscTable.Currency = ' + queryValue(Currency) + ')';
Приводит к ошибке:
Ошибка расширенного диапазона запроса: Ожидается правая круглая скобка рядом с 0
Вариант со strFmt - к ошибке не приводит, но и результата не дает
Старый 11.11.2003, 17:05   #5  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Резюмируя свой ответ (не совсем правильный ) и ответ EVGL:
PHP код:
st strFmt' (Currency == "%1" ) 'Currency ); // в "%1" используются двойные кавычки
PriceTable.addrange(fieldNum(PriceDiscTableCurrency)).value(st); 
И это должно работать, если все остальное правильно.
__________________
Андрей.
Старый 11.11.2003, 17:54   #6  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
А дата в таких выражениях - вообще катастрофа. Вот живой действующий пример:
PHP код:
client static Range complexDateRange(PurchLineDlvDate   _dlvDate)
{
    return 
strFmt("( ((ConfirmedDlv >  01\\01\\1900) && (ConfirmedDlv <= %1\\%2\\%3)) || ((ConfirmedDlv == 01\\01\\1900) && (DeliveryDate <= %1\\%2\\%3)) )",
                  
dayofmth(_dlvDate),
                  
mthofyr(_dlvDate),
                  
year(_dlvDate));

Вместо \ читать \\ (дефект отображения на Axforum). Надеюсь, вопросы исчерпаны.
Старый 11.11.2003, 18:18   #7  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
даты в Range
Цитата:
Надеюсь, вопросы исчерпаны
рискую нарваться, но чем плох date2strXpp?
Старый 11.11.2003, 18:28   #8  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Re: даты в Range
Цитата:
Изначально опубликовано Vadik
рискую нарваться, но чем плох date2strXpp?
Снимаю шляпу
Старый 11.11.2003, 18:43   #9  
AXnovice is offline
AXnovice
Участник
 
6 / 10 (1) +
Регистрация: 23.09.2003
Простой пример:
static void Job11(Args _args)
{
query q;
queryBuildDataSource qbds;
queryRun qr;
str st;
currencyCode currency;
;
q = new Query();
qbds = q.addDataSource(TableNum(PriceDiscTable), "PriceDiscTable");
currency = currency::find("RUR").CurrencyCode;
st = strFmt( ' (Currency == "%1" ) ', Currency );
qbds.addRange(fieldNum(PriceDiscTable, Currency)).value(st);//queryValue(Currency));
qr = new queryRun(q);
qr.reset();
while (qr.next())
{
warning(any2str(qr.get(tablenum(PriceDiscTable)).(fieldNum(PriceDiscTable, Currency))));
}
}
чтоб выбирало нужно в PriceDiscTable записи с валютой "RUR"
Закоменченный вариант выводит сообщения, а со строковым выражением - нет.
? почему!
Попробуйте запустить у себя.
Старый 11.11.2003, 19:08   #10  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
PHP код:
st strFmt('(%1 == "%2"))'fieldstr(PriceDiscTableCurrency), queryValue(currency));
qbds.addRange(fieldNum(PriceDiscTableCurrency)).value(st); 
Старый 11.11.2003, 19:18   #11  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Причем в примере Vadik`а не нужны двойные кавычки.
АХАРТА прикалывается над нами
__________________
Андрей.
Старый 11.11.2003, 19:27   #12  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Прикалывается - не прикалывается, а без них не работает

PHP код:
st strFmt('(%1 == %2))'fieldstr(PriceDiscTableCurrency), queryValue(currency));
qbds.addRange(fieldNum(PriceDiscTableCurrency)).value(st);
info(qbds.toString()); 
Старый 11.11.2003, 19:31   #13  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
А у меня с кавычками выдает фразу "Unable to parse value", но все равно срабатывает, а без кавычек все идеально. АХАРТА 2.5 СП1.
__________________
Андрей.
Старый 11.11.2003, 19:43   #14  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
у меня 3.0 SP1
в 2.5 SP6 тоже выдает "unable to parse value"

PHP код:
qbds.addRange(fieldNum(PriceDiscTableCurrency)).value(queryValue(Currency)); 
это работает везде. если пример не сокращен, то Advanced query range value expressions здесь как бы и не нужны.
Старый 12.11.2003, 10:14   #15  
AXnovice is offline
AXnovice
Участник
 
6 / 10 (1) +
Регистрация: 23.09.2003
2Vadik
Супер, Ваш вариант действительно работает.
Самое смешное, что исходный вариант с:
(tableId2name, fieldId2name и т.д.) идеологически передран из базовой функциональности аксапты, где он прекрасно работает (Форма Address).
?
Старый 12.11.2003, 11:40   #16  
AXnovice is offline
AXnovice
Участник
 
6 / 10 (1) +
Регистрация: 23.09.2003
2Vadik
Супер, Ваш вариант действительно работает.
Самое смешное, что исходный вариант с:
(tableId2name, fieldId2name и т.д.) идеологически передран из базовой функциональности аксапты, где он прекрасно работает (Форма Address).
?
Старый 25.07.2007, 11:14   #17  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от Vadik Посмотреть сообщение
PHP код:
st strFmt('(%1 == "%2"))'fieldstr(PriceDiscTableCurrency), queryValue(currency));
qbds.addRange(fieldNum(PriceDiscTableCurrency)).value(st); 
рискну проапить тему...

но у меня и такой вариант не работает
нужно ограничить данные на форме делаю так:
init() на DS:
X++:
qbrType = findOrCreateRange_W(this.query().dataSourceNo(1), fieldnum(myTable, ReqType));
executeQuery() :
X++:
s = strfmt(' ((%1 == "%2")) ',fieldstr(myTable, ReqType),
                                queryValue(ReqType::StaffAccounting));
qbrType.value(s);
в итоге получается вот такое:
WHERE ((BudgetReqType = ((budgetReqType == "Расчеты с персоналом"))))

в чем трабл?
Старый 25.07.2007, 11:46   #18  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Что то мне сходу кажется что вы пытаетесь в тип перечисление подставить тип строку
Старый 25.07.2007, 11:48   #19  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от MikeR Посмотреть сообщение
Что то мне сходу кажется что вы пытаетесь в тип перечисление подставить тип строку
да уже чего только не пробовал и с кавычками и без них...

вообщем удалось извартиться след. образом:

Код:
s = strfmt('!%1,!%2 ',queryValue(ReqType::Tax),
                              queryValue(ReqType::StaffAccounting));
qbrTypeTax_StaffAcc.value(s);
вроде пока работает
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
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
Проблема с составлением Query axaLearner DAX: Программирование 10 01.12.2005 15:00

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

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

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