14.07.2005, 11:55 | #1 |
Участник
|
Как в query добавить фильтр по аналитике (Dimension)?
Здравствуйте, столкнулся с такой проблемой:
У меня есть довольно сложный запрос с уже созданной формой, на которой имеются стандартные поля для указания аналитик (Департамент, продукт, пр.). Необходимо, собственно, получить данные из этих полей (которые вводит пользователь) и установить по ним фильтр на ранее выбранные записи таблицы smmQuotationTable. Сейчас мои попытки выглядят примерно так: for (i = 1; i <= enumcnt(SysDimension); i++) { ds.addRange(fieldId2ext(fieldnum(smmQuotationTable, Dimension), i)); } Насколькок я понимаю, это лишь добавление фильтра, но не получение значений для него. Если в цикле (или вообще без цикла) использовать value и указать какое-нибудь конкретное значение, то оно [значение] попадёт во ВСЕ dimensions. В общем, как всё это корректно оформить? Могу конкретизировать вопрос: напишите, пожалуйста, простенький запрос, выбирающий из таблицы предложений smmQuotationTable все предложения, для которых, скажем, аналитика "департамент" имеет значение, введенное пользователем на форме. Заранее спасибо. |
|
14.07.2005, 12:23 | #2 |
NavAx
|
можно попробовать :
smmQuotationTable.Dimension[1] (в квадратных скобах указать номер аналитики) |
|
14.07.2005, 12:23 | #3 |
Участник
|
purposeId = fieldId2Ext(fieldNum(VendTrans, Dimension), SysDimension::Purpose + 1);
queryBuildRangeConfigId = queryBuildDataSource.addRange(purposeId); queryBuildRangeConfigId.value("значение"); |
|
|
За это сообщение автора поблагодарили: macklakov (4). |
14.07.2005, 12:55 | #4 |
Участник
|
Спрошу чуток по-другому:
Как с ФОРМЫ снять значения аналитик (dimension), вводимые пользователем, и использовать их в качестве фильтра для query? Сейчас интересующая меня часть запроса выглядит так: Some_qr = new QueryRun(Some_Query); for (i = 1; i<= enumcnt(SysDimension); i++) { Some_qr.query().dataSourceNo(1).addRange(fieldId2ext(fieldnum(smmQuotationTable, Dimension), i)).value("?????"); } Что нужно написать вместо value("??????"), чтобы туда подставлялись значения, введенные пользователем в соответствующие поля формы? |
|
14.07.2005, 14:51 | #5 |
Участник
|
...да, забыл добавить, что поля формы, куда вводятся условия фильтрации по аналитикам, являются стандартными, я их вообще нигде в родительских классах не нашёл Как же получить эти значения, что пользователь вводит?
|
|
14.07.2005, 15:58 | #6 |
Участник
|
Не знаю, как у вас, но у меня вот этот код накладывает фильтр только на первую аналитику:
PHP код:
Попробуйте может свойство autoDeclaration для этих трех полей поставить yes и обращаться к ним по имени? |
|
14.07.2005, 16:03 | #7 |
Модератор
|
Цитата:
Изначально опубликовано kashperuk
Не знаю, как у вас, но у меня вот этот код накладывает фильтр только на первую аналитику: qbr = qbds.addRange(fieldId2ext(fieldNum(smmQuotationTable, Dimension),1)); С Уважением, Георгий |
|
14.07.2005, 16:07 | #8 |
Участник
|
Не, понятно, что на первую. Просто насколько я понял, у автора при выполнении наложения фильтра на одну из аналитик фильтр накладывался на все три сразу. |
|
14.07.2005, 16:14 | #9 |
Участник
|
Спасибо, но до этого я уже сам дошёл, т.е. у меня ПОЛУЧИЛОСЬ наложить фильтр по любой аналитике с помощью...
Some_qr.query().dataSourceNo(1).addRange(fieldId2ext(fieldnum(smmQuotationTable, Dimension), i)).value("?????"); ...как я уже писал ранее. Но вопрос теперь немножко в другом (о чём я тоже уже написал) - а именно: ЧТО писать вместо "?????", чтобы туда попало значение, введенное пользователем на форме, а не то, что мы пропишем в коде. На форме имеются стандартные поля для добавления фильтра по аналитикам - как оттуда значения вытащить? (примечание: как эти поля попали в форму - я не знаю, т.к. исходная форма не моя. И ни в одном из родительских классов я не нашёл упоминания Dimension) |
|
14.07.2005, 16:25 | #10 |
Модератор
|
А что говорит smmQuotationTable.Dimension[1] ?
С Уважением, Георгий |
|
14.07.2005, 16:35 | #11 |
Участник
|
Говорит ровно то, что находится в поле Dimension[1] текущей записи таблицы smmQuotationTable. Да, по этому полю накладывается фильтр (весьма успешно), но мне-то надо значение для фильтра взять из поля ввода на форме, а не из таблицы какой-нибудь. Если бы то, что пользователь вводит в поле, сохранялось в таблицу, не было бы и проблемы.
|
|
14.07.2005, 16:48 | #12 |
Участник
|
у меня такая ситуация была...
но у моем случае...Как и вызывающий объект, так и диалог был на RanBase. значение аналитики записывала в контейнер и передавала в вызывающий объект. |
|
14.07.2005, 16:58 | #13 |
Administrator
|
Остался непонятным вопрос:
Контрольки на форме не привязаны к соотв полям таблицы ? ( Цитата:
Если бы то, что пользователь вводит в поле, сохранялось в таблицу, не было бы и проблемы.
Вариант 1. Контрольки генерятся динамически (класс-наследник RunBase). Тогда данные лежат в соотв переменной класса (как и пишет Tays) Вариант 2. Контрольки не привязаны вообще к датасорсу, но это полноценная форма. Тогда добраться к значениям возможно лишь - через контрольки. Т.е. объявляете контролькам autodeclaration=yes или через control:: достукиваетесь до них. А далее - в зависимости от типа (скорее всего String) - получаете значение контрольки Или что-то не так? |
|
14.07.2005, 17:21 | #14 |
Участник
|
К чему привязаны эти контрольки я не знаю, чем создаются тоже... нигде в родительских классах я не нашёл упоминания аналитик. Прикреплю пару иллюстраций - может понятнее станет, как до данных "достучаться"...
|
|
14.07.2005, 17:22 | #15 |
Участник
|
попытка №2...
|
|
14.07.2005, 17:23 | #16 |
Участник
|
и ещё одна...
|
|
14.07.2005, 17:29 | #17 |
Модератор
|
Хм. Ну, поствьте autodeclaration в Yes и в modified накладывайте фильтр.
Внешний вид, без свойств - он как-то не очень информативен для разработчика. |
|
14.07.2005, 17:36 | #18 |
Участник
|
согласоно картинке №2 мне думается, что искать нужно по ключевому слову Dialog в вызывающем этот диалог классе. Группа полей "Интервал" скорее всего создается в классе, а "Таблица предложений" - это из query. Соответственно в классе нужно добавить свой филд для диалога и далее использовать значение из него в вашем запросе
|
|
14.07.2005, 18:02 | #19 |
Участник
|
по картинкам видно, что родитель должен быть ранбайз...
согласно моим наблюдениям.. данные из контралов должны записываться в контейнер.. 2 George Nordic Согласна, кратинки мало информативны. Свойства... бы то ж не плохо, а лучше покопаться в коде...))) |
|
15.07.2005, 00:51 | #20 |
Administrator
|
Картинки достаточно информативны чтобы с уверенностью заявить что:
1) это не обычная форма, а класс-наследник RunBaseBatch (или просто RunBase) 2) аналитика добавлена через query и кнопочку выбор (на картинке она заметна) а как передать значения с query... завтра посмотрю |
|