20.12.2012, 09:30 | #1 |
Программатор
|
Lookup Num из Dimesions по кнопке "Выбор"
Добрый день, уважаемые! Ax2009
Есть диалоговая форма(форма в АОТе), там есть кнопочка выбор X++: qbds = ret.addDataSource(tablenum(Dimensions)); qbr = qbds.addRange(fieldnum(Dimensions, DimensionCode)); qbr.status(1); // locked qbr.value(QueryValue(SysDimension::Center)); qbds.addSortField(fieldnum(Dimensions, Num)); Заранее спасибо!!! Последний раз редактировалось Sada; 20.12.2012 в 09:33. |
|
20.12.2012, 09:40 | #2 |
Участник
|
Обновление перекрёстных ссылок не поможет?
X++: xRefTableRelation::updateTableId(TableNum(Dimensions)); |
|
20.12.2012, 09:44 | #3 |
Программатор
|
нет, не помогло. А у вас нормально работает?
|
|
20.12.2012, 10:03 | #4 |
Участник
|
У нас в приложении лукап аналитики модифицирован, поэтому сложно проверить ваш сценарий.
По идее, должно работать. Именно для таких вещей, на таблице Dimensions предусмотренна связь на саму себя. Другое дело учитывает ли эти связи форма фильтрации. |
|
20.12.2012, 10:30 | #5 |
Участник
|
X++: qbds.addRange(fieldId2Ext(fieldNum(Dimensions, DimensionCode),2)).value(sysQuery::value(SysDimension::Center)); |
|
20.12.2012, 10:32 | #6 |
Участник
|
Какой запрос при этом формируется? info(qbds.toString()); ?
возможно поможет 1. SysQuery::value(...) 2. strFmt("%1",SysDimension::Center) вместо QueryValue |
|
20.12.2012, 10:52 | #7 |
Программатор
|
Info Сообщение (10:52:22) SELECT FIRSTFAST * FROM Dimensions ORDER BY Dimensions.Num ASC WHERE ((DimensionCode = 1))
|
|
20.12.2012, 10:54 | #8 |
Программатор
|
Фишка в том что форма Выбора - это SysQueryForm и ДС у нее TMPSysQuery. Вот она помоему не верно заполняется...
|
|
20.12.2012, 11:00 | #9 |
Ищущий знания...
|
а можете весь lookUp-ный метод выложить?
P.S. X++: qbr.status(1); // locked X++: qbr.status(RangeStatus::Locked); // locked
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
20.12.2012, 11:02 | #10 |
Программатор
|
X++: public Query query() {// TODO 03 - прописываем запрос, на основании которого будет строиться отчет. Query ret; QueryBuildDatasource qbds; QueryBuildRange qbr; ; ret = new Query(); // датасорс с пользователями qbds = ret.addDataSource(tablenum(Dimensions)); //qbds.addRange(fieldnum(Dimensions, DimensionCode)); qbr = qbds.addRange(fieldnum(Dimensions, DimensionCode)); qbr.status(1); // locked qbr.value(SysQuery::value(SysDimension::Center)); qbds.addSortField(fieldnum(Dimensions, Num)); //info(qbds.toString()); return ret; } Последний раз редактировалось Sada; 20.12.2012 в 11:11. |
|
20.12.2012, 12:34 | #11 |
Участник
|
Нет никакого lookUp-ного метода. Есть стандартная форма расширенного фильтра SysQueryForm. В этой форме при вводе значения критерия отрабатывает стандартный лукап SysLookup::lookupRange(). Только этот лукап не фильтруется по связанному полю. Sada, так?
|
|
20.12.2012, 12:59 | #12 |
Программатор
|
именно так!!!
|
|
20.12.2012, 15:53 | #13 |
Участник
|
Цитата:
Сообщение от Sada
X++: public Query query() {// TODO 03 - прописываем запрос, на основании которого будет строиться отчет. Query ret; QueryBuildDatasource qbds; QueryBuildRange qbr; ; ret = new Query(); // датасорс с пользователями qbds = ret.addDataSource(tablenum(Dimensions)); //qbds.addRange(fieldnum(Dimensions, DimensionCode)); qbr = qbds.addRange(fieldnum(Dimensions, DimensionCode)); qbr.status(1); // locked qbr.value(SysQuery::value(SysDimension::Center)); qbds.addSortField(fieldnum(Dimensions, Num)); //info(qbds.toString()); return ret; } X++: ret = new Query(); qbds = ret.addDataSource(tablenum(Dimensions)); qbds = this.query().dataSourceTable(tablenum(Dimensions)); или qbds = this.query().dataSourceName('Dimensions_1'); // как он там называется или qbds = this.query().dataSourceNo(1); // какой он там по счету. (аналогично , qbds = this.queryRun().query()..........(если это в классе)). Потому что сэмулировав это на Репорте, на котором уже настроен qbds, именно так и происходит. Если query() нет и он один только раз инициализируется в этом методе, то у меня все нормально работает
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. Последний раз редактировалось Pustik; 20.12.2012 в 16:01. |
|
20.12.2012, 16:22 | #14 |
Участник
|
Другими словами, вы хотите, что бы выбранное значение критерия по одному из полей в форме расширенного фильтра участвовало в фильтрации значений критериев по другим полям в этой же форме?
__________________
Axapta v.3.0 sp5 kr2 |
|
20.12.2012, 16:46 | #15 |
Участник
|
Воспроизвёл сейчас вашу ситуацию со стандартным лукапом на тестовом окружении.
Посмотрел на код метода SysLookup::lookupRange. В этом методе происходит поэтапный перебор вариантов вызова лукап формы. В зависимости от ситуации лукап будет сгенерирован на основании: 1) свойства FormHelp расширенного типа данных, если он заполнен 2) перечисления, если это Enum 3) календаря, если это дата 4) свойства FormHelp, таблицы на которую ссылается relation расширенного типа данных, если relation есть и есть FormHelp на указанной таблице 5) свойства FormHelp, таблицы на которую ссылается подходящий relation таблицы из которой вызван лукап. В нашем случае выбор завершается сразу же на первом пункте. Т.к. на типе SysDim указано значение DimensionsLookup в свойстве FormHelp. Варианта выхода из сложивщейся ситуации я вижу два: - либо научить форму DimensionsLookup корректно отрабатывать данную ситуацию; - либо заставить метод SysLookup::lookupRange() работать по 5-му сценарию. Второго варианта добиться просто. Для этого нужно чтобы у поля Num таблицы Dimensions был расширенный тип без FormHelp и Relation. Такой тип можно создать продублировав тип SysDim и обнулив свойство FormHelp. Заменяем у поля Dimensions.Num расширенный тип на новый и всё. Во всех остальных местах будет продолжать работать лукап на основаный на форме DimensionsLookup. Получившийся новый лукап может отличаться от него т.к. генерироваться он уже будет системными средствами. Если необходимо везде иметь единую форму лукапа, то нужно оставлять один EDT и всё-таки разбираться с формой DimensionsLookup, учить её корректно отрабатывать фильтрацию по связанному полю. |
|
20.12.2012, 17:48 | #16 |
Программатор
|
так у вас воспроизвелась ошибка или нет? Спасибо всем большое за участие, чуть попозже переварю Ваши советы
|
|
20.12.2012, 18:08 | #17 |
Участник
|
у меня все прекрасно фильтрует, если речь идет о форме SysQueryForm, которая вызывается по кнопочке Выбор. Или я что-то не понимаю.
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
20.12.2012, 19:36 | #18 |
Участник
|
Да, воспроизвелась.
To Pustik, воспроизводил так. Создал пустой Query в AOT. Перетащил в его датасурс таблицу Dimensions. Открыл Query, запустилась форма редактирования запроса. Задал критерий для поля DimensionCode. При выборе значения критерия для поля Num открылся полный лукап, содержащий аналитики всех типов, а не только указанного в DimensionCode. |
|
|
За это сообщение автора поблагодарили: Pustik (2), Sada (2). |
21.12.2012, 08:37 | #19 |
Участник
|
Цитата:
Сообщение от S.Kuskov
To Pustik, воспроизводил так. Создал пустой Query в AOT. Перетащил в его датасурс таблицу Dimensions. Открыл Query, запустилась форма редактирования запроса. Задал критерий для поля DimensionCode. При выборе значения критерия для поля Num открылся полный лукап, содержащий аналитики всех типов, а не только указанного в DimensionCode.
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
28.12.2012, 12:14 | #20 |
Программатор
|
не получилось решит проблему? у меня кроме как вызывать форму DimensionLookup из Syslookup только для этого случая ничего в голову не приходит))
|
|
|
|