11.11.2003, 13:19 | #1 |
Участник
|
Условия в 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 |
Moderator
|
Так как в данном случае используется простой фильтр по значению поля, писать строковое выражение для последующего использования его в запросе не нужно, лучше и правильнее использовать именно 2-й работающий вариант. В случае сложных запросов иногда требуется передать в запрос сформированное в виде текста условие, оно должно выглядеть примерно так (обратите внимание на внешние скобки и двойное равенство):
PHP код:
__________________
Андрей. |
|
11.11.2003, 14:01 | #3 |
Banned
|
1. Не "=", а "=="
2. Если источник создан кодом и не имеет имени, то не "PriceDiscTable.Currency", а "Currency". Тем более, если в запрос входит только одна таблица. 3. В таких выражениях строковые значения типа Currency должны быть, по идее, в двойных кавычках на случай, если они содержат пробелы, специальные знаки и т.д. |
|
11.11.2003, 15:51 | #4 |
Участник
|
Попробовал Ваш вариант - не работает
Попробовал Ваш вариант (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 |
Moderator
|
Резюмируя свой ответ (не совсем правильный ) и ответ EVGL:
PHP код:
__________________
Андрей. |
|
11.11.2003, 17:54 | #6 |
Banned
|
А дата в таких выражениях - вообще катастрофа. Вот живой действующий пример:
PHP код:
|
|
11.11.2003, 18:18 | #7 |
Модератор
|
даты в Range
Цитата:
Надеюсь, вопросы исчерпаны
|
|
11.11.2003, 18:28 | #8 |
Banned
|
Re: даты в Range
Цитата:
Изначально опубликовано Vadik
рискую нарваться, но чем плох date2strXpp? |
|
11.11.2003, 18:43 | #9 |
Участник
|
Простой пример:
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 |
Модератор
|
PHP код:
|
|
11.11.2003, 19:18 | #11 |
Moderator
|
Причем в примере Vadik`а не нужны двойные кавычки.
АХАРТА прикалывается над нами
__________________
Андрей. |
|
11.11.2003, 19:27 | #12 |
Модератор
|
Прикалывается - не прикалывается, а без них не работает
PHP код:
|
|
11.11.2003, 19:31 | #13 |
Moderator
|
А у меня с кавычками выдает фразу "Unable to parse value", но все равно срабатывает, а без кавычек все идеально. АХАРТА 2.5 СП1.
__________________
Андрей. |
|
11.11.2003, 19:43 | #14 |
Модератор
|
у меня 3.0 SP1
в 2.5 SP6 тоже выдает "unable to parse value" PHP код:
|
|
12.11.2003, 10:14 | #15 |
Участник
|
2Vadik
Супер, Ваш вариант действительно работает. Самое смешное, что исходный вариант с: (tableId2name, fieldId2name и т.д.) идеологически передран из базовой функциональности аксапты, где он прекрасно работает (Форма Address). ? |
|
12.11.2003, 11:40 | #16 |
Участник
|
2Vadik
Супер, Ваш вариант действительно работает. Самое смешное, что исходный вариант с: (tableId2name, fieldId2name и т.д.) идеологически передран из базовой функциональности аксапты, где он прекрасно работает (Форма Address). ? |
|
25.07.2007, 11:14 | #17 |
Участник
|
Цитата:
но у меня и такой вариант не работает нужно ограничить данные на форме делаю так: init() на DS: X++: qbrType = findOrCreateRange_W(this.query().dataSourceNo(1), fieldnum(myTable, ReqType)); X++: s = strfmt(' ((%1 == "%2")) ',fieldstr(myTable, ReqType), queryValue(ReqType::StaffAccounting)); qbrType.value(s); WHERE ((BudgetReqType = ((budgetReqType == "Расчеты с персоналом")))) в чем трабл? |
|
25.07.2007, 11:46 | #18 |
MCT
|
Что то мне сходу кажется что вы пытаетесь в тип перечисление подставить тип строку
|
|
25.07.2007, 11:48 | #19 |
Участник
|
Цитата:
вообщем удалось извартиться след. образом: Код: s = strfmt('!%1,!%2 ',queryValue(ReqType::Tax), queryValue(ReqType::StaffAccounting)); qbrTypeTax_StaffAcc.value(s); |
|