23.03.2004, 13:51 | #1 |
Участник
|
Как добавить в addRange условие по "или" на контейнерные поля?
Добрый день!
Необходимо определить следующее ограничение по "или" на поля типа Dimension: this.query().dataSourceTable(tablenum(PurchTable)).addRange(fieldId2Ext(fieldNum(PurchTable,Dimension),1)).value(strfmt('((%2.%4 == "%1") || (%2.%3 == "%1"))', "10-000", this.query().dataSourceTable(tablenum(PurchTable)).name(), "ExecuterDimension[1]", "Dimension[1]", )); Sql запрос на сколько я вижу корректный, но проблема в следующем - Система пишет, что не хватает правой круглой скобки и ничего соответсвенно не фильтрует. Попробовала тот же синтаксис определения ограничения только на простых полях: this.query().dataSourceTable(tablenum(PurchTable)).addRange(fieldId2Ext(fieldNum(PurchTable,Dimension),1)).value(strfmt('((%2.%4 == "%1") || (%2.%3 == "%1"))', "10-000", this.query().dataSourceTable(tablenum(PurchTable)).name(), "OrderAccount", "InvoiceAccount", )); В данном случае все отрабатывает корректно и без всяких предупреждений...Похоже что проблема именно с контейнерными полями, может в данном случае нужно по другому как то представлять в запросе эти поля? Кто нибудь сталкивался с подобной проблемой и методом ее решения? Спасибо
__________________
|
|
23.03.2004, 13:55 | #2 |
Участник
|
кавычку внутри range надо экранировать.
Т.е. писать не strfmt('((%2.%4 == "%1") || (%2.%3 == "%1"))', а strfmt('((%2.%4 == \"%1\") || (%2.%3 == \"%1\"))', Смотрите SysQuery::value() |
|
23.03.2004, 14:09 | #3 |
Участник
|
Цитата:
кавычку внутри range надо экранировать.
Пыталась энкранировать скобки в dimension\[1\] , но тоже рез-та нет. Тем более как я уже писала тот же синтаксис я проверила на обычных полях и ошибок нет скорее всего дело в чем другом ..
__________________
|
|
23.03.2004, 14:14 | #4 |
Участник
|
А можно сделать совсем просто:
PHP код:
|
|
23.03.2004, 14:18 | #5 |
Участник
|
Виноват. Невнимательно прочитал. У Вас или на разные поля стоит, тогда мой пример не подохдит.
|
|
23.03.2004, 14:24 | #6 |
Участник
|
Цитата:
У Вас или на разные поля стоит
__________________
|
|
23.03.2004, 15:12 | #7 |
----------------
|
Вот так вроде можно:
this.query().dataSourceTable(tablenum(PurchTable)).addRange(fieldId2Ext(fieldNum(PurchTable,Dimension),1)).value(strfmt('((%4 == "%1") || (%3 == "%1"))', "10-000", this.query().dataSourceTable(tablenum(PurchTable)).name(), "ExecuterDimension", "Dimension")); Но только для элементов с индексом [1] |
|
23.03.2004, 15:20 | #8 |
Юзовские
|
Добрый день.
Действительно, не хочет воспринимать квадратную скобку. Предлагаю попробовать так ('((\"%2.%4\" == "%1") || (\"%2.%3\" == "%1"))' |
|
23.03.2004, 15:57 | #9 |
Участник
|
Цитата:
...Но только для элементов с индексом [1]
Для моей задачи это решение подходит , но действительно как быть если проверять значение нужно элемента не первого индекса? Цитата:
Действительно, не хочет воспринимать квадратную скобку. Предлагаю попробовать так ('((\"%2.%4\" == "%1") || (\"%2.%3\" == "%1"))'
Всем большое спасибо.
__________________
|
|
29.11.2004, 13:52 | #10 |
Участник
|
Кто-нибудь нашел решение данной проблемы?
У меня возникла необходимость в таком условии, но не обязательно по первой аналитике. |
|
|
|