24.01.2019, 16:31 | #1 |
Участник
|
QueryRange ошибка
Приветствую!
Необходимо создать элементарный запрос с помощью динамического Query, но при задании Range выводится ошибка "Ошибка расширенного диапазона запроса: Задано недопустимое имя функции в 11." И запрос отрабатывается не корректно, он просто выводит все строки из таблицы, будто ограничений нет. Range задаю таким образом qbr.value(strFmt('((%1 >= %2) && (%1 <= %2))', fieldStr(FISalesPlanLine_ICL, Year), queryValue(int2str(2018)))); Пример брал с http://www.axaptapedia.com/Expressions_in_query_ranges. С Query не часто работал, но по идее все должно отрабатывать нормально, но не работает. Немного понятно как отрабатывает range при задании таким образом: qbr = qbds.addRange(fieldNum(FISalesPlanLine_ICL, Year)); qbr.value(" < 2019"); И ошибки нет, и отрабатывает запрос как надо. Но если задать по этому же полю второе ограничение, то внутри класса между двумя range ставится OR, а мне нужно AND. Если кто то подскажет как при задании двух addRange по одному полю сделать чтобы между ними было AND - буду очень благодарен. Ещё момент, если написать qbr.value(" <= 2019"); вместо qbr.value(" < 2019");, то снова вылезает ошибка о неверном условии. |
|
24.01.2019, 16:53 | #2 |
Участник
|
Имя поля (Year) совпало с именем функции year(), что и вызывает проблемы
Advanced query range value expressions: поле таблицы - имя вcтроенной функции year(). Если надо только 2 условия, то можно для первого использовать fieldNum(), а для второго global::filedIdExt(). Т.е. для второго условия как для первого элемента поля-массива. Идентификаторы получатся разные и это интерпретируется построителем как разные поля. Соответственно, объединение через AND PS: По приведенной тобой ссылке есть пример с алиасами полей в условии (%1.%2 < %3) попробуй этот вариант решения
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... Последний раз редактировалось Владимир Максимов; 24.01.2019 в 16:59. |
|
24.01.2019, 16:57 | #3 |
Участник
|
(%1 >= %2) && (%1 <= %2) - условие странное
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет. |
|
24.01.2019, 18:04 | #4 |
Участник
|
|
|
24.01.2019, 18:09 | #5 |
Участник
|
Вот так не пробовали?
X++: qbr = qbds.addRange(fieldNum(FISalesPlanLine_ICL, Year));
qbr.value(sysQuery::range(2018,2019));
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
За это сообщение автора поблагодарили: vizir (1). |
24.01.2019, 18:11 | #6 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
Имя поля (Year) совпало с именем функции year(), что и вызывает проблемы
Advanced query range value expressions: поле таблицы - имя вcтроенной функции year(). Если надо только 2 условия, то можно для первого использовать fieldNum(), а для второго global::filedIdExt(). Т.е. для второго условия как для первого элемента поля-массива. Идентификаторы получатся разные и это интерпретируется построителем как разные поля. Соответственно, объединение через AND PS: По приведенной тобой ссылке есть пример с алиасами полей в условии (%1.%2 < %3) попробуй этот вариант решения Алиасы пробовал, но ошибка та же самая была. А вот этот построитель всегда разные поля через AND соединяет, а одни и те же через OR? Нельзя как то это задать самому? |
|
24.01.2019, 18:13 | #7 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
Вот так не пробовали?
X++: qbr = qbds.addRange(fieldNum(FISalesPlanLine_ICL, Year));
qbr.value(sysQuery::range(2018,2019)); |
|
31.01.2019, 08:59 | #8 |
Участник
|
Возник ещё один более интересный вопрос. Есть ли возможность в агрегатную функцию SUM() в Query вставить формулу? Например у меня идет SUM(Field1), а мне надо SUM(Field1 + 2). Появилась необходимость пересчета значений поля по ходу запроса. Хотелось бы сделать все сразу, а не плодить промежуточные таблицы.
|
|
31.01.2019, 11:11 | #9 |
Участник
|
Делаете View с Computed Column, суммируете в этом новом View. Смотрите InventValue* views в АОТ.
https://docs.microsoft.com/en-us/dyn...lumn-to-a-view |
|
31.01.2019, 11:32 | #10 |
Участник
|
Цитата:
Сообщение от Stitch_MS
Делаете View с Computed Column, суммируете в этом новом View. Смотрите InventValue* views в АОТ.
https://docs.microsoft.com/en-us/dyn...lumn-to-a-view |
|
31.01.2019, 11:40 | #11 |
Участник
|
Цитата:
вам надо написать что-то вроде: X++: qbr.value(strFmt('((%3.%1 >= %2) && (%3.%1 <= %2))', fieldStr(FISalesPlanLine_ICL, Year), queryValue(int2str(2018) datasourceName))); |
|
31.01.2019, 11:55 | #12 |
Участник
|
Цитата:
Этот вопрос уже решен с помощью этого X++: qbr.value(sysQuery::range(2018,2019)); |
|
31.01.2019, 12:07 | #13 |
Участник
|
Цитата:
Сообщение от vizir
Возник ещё один более интересный вопрос. Есть ли возможность в агрегатную функцию SUM() в Query вставить формулу? Например у меня идет SUM(Field1), а мне надо SUM(Field1 + 2). Появилась необходимость пересчета значений поля по ходу запроса. Хотелось бы сделать все сразу, а не плодить промежуточные таблицы.
2. напрямую задать формулу в запросе аксапта не умеет ни в какой версии (только через View с Computed Column). поэтому, если вам так уж необходмо формулу, то вам остается только прямой запрос и ResultSet. со всеми вытекающими последствиями Если будете использовать ResultSet, то посмотрите на мой SysResultSet и вот этот пример с формулой Последний раз редактировалось mazzy; 31.01.2019 в 12:20. |
|
31.01.2019, 12:20 | #14 |
Участник
|
Цитата:
Сообщение от mazzy
1. как вставляются агрегатные функции в обычный запрос смотрите в SysQuery::countTotal()
2. напрямую задать формулу в запросе аксапта не умеет ни в какой версии (только через View с Computed Column). поэтому, если вам так уж необходмо формулу, то вам остается только прямой запрос и ResultSet. со всеми вытекающими последствиями Если будете использовать ResultSet, то посмотрите на мой SysResultSet |
|
31.01.2019, 12:25 | #15 |
Участник
|
Цитата:
Цитата:
(майкрософт обязан был это сделать давным давно, сразу как объявил, что MS SQL - единственная поддерживаемая СУБД) частично проблема решается методом sql.sqlLiteral см. пример для SysResultSet: https://github.com/mazzy-ax/SysResul...sultSet_AX.xpp Последний раз редактировалось mazzy; 31.01.2019 в 12:28. |
|
31.01.2019, 17:28 | #16 |
Участник
|
Цитата:
SUM(Field1 + 2)
|
|
01.02.2019, 09:29 | #17 |
Участник
|
Там надо коэффициент подставлять, я сумму как пример привел просто.
Последний раз редактировалось vizir; 01.02.2019 в 09:59. |
|