AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.12.2012, 09:30   #1  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
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));
при лукапе номера аналитики Аксапта не хочет накладывать фильтр на DimensionCode и вываливает все аналитики. Сталкивался кто с такой проблемкой?

Заранее спасибо!!!

Последний раз редактировалось Sada; 20.12.2012 в 09:33.
Старый 20.12.2012, 09:40   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Обновление перекрёстных ссылок не поможет?
X++:
xRefTableRelation::updateTableId(TableNum(Dimensions));
Старый 20.12.2012, 09:44   #3  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
нет, не помогло. А у вас нормально работает?
Старый 20.12.2012, 10:03   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Sada Посмотреть сообщение
нет, не помогло. А у вас нормально работает?
У нас в приложении лукап аналитики модифицирован, поэтому сложно проверить ваш сценарий.

По идее, должно работать. Именно для таких вещей, на таблице Dimensions предусмотренна связь на саму себя. Другое дело учитывает ли эти связи форма фильтрации.
Старый 20.12.2012, 10:32   #5  
titov is offline
titov
Участник
 
73 / 87 (3) ++++
Регистрация: 23.12.2005
Адрес: Казань
Какой запрос при этом формируется? info(qbds.toString()); ?

возможно поможет
1. SysQuery::value(...)
2. strFmt("%1",SysDimension::Center)
вместо QueryValue
Старый 20.12.2012, 16:46   #6  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Sada Посмотреть сообщение
А у вас нормально работает?
Воспроизвёл сейчас вашу ситуацию со стандартным лукапом на тестовом окружении.

Посмотрел на код метода 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, 10:30   #7  
Player1 is offline
Player1
Участник
Самостоятельные клиенты AX
 
306 / 137 (5) +++++
Регистрация: 21.04.2008
X++:
qbds.addRange(fieldId2Ext(fieldNum(Dimensions, DimensionCode),2)).value(sysQuery::value(SysDimension::Center));
Старый 20.12.2012, 10:52   #8  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Info Сообщение (10:52:22) SELECT FIRSTFAST * FROM Dimensions ORDER BY Dimensions.Num ASC WHERE ((DimensionCode = 1))
Старый 20.12.2012, 10:54   #9  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Фишка в том что форма Выбора - это SysQueryForm и ДС у нее TMPSysQuery. Вот она помоему не верно заполняется...
Старый 20.12.2012, 11:00   #10  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
а можете весь lookUp-ный метод выложить?

P.S.
X++:
qbr.status(1); // locked
я бы лучше написал:
X++:
qbr.status(RangeStatus::Locked); // locked
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 20.12.2012, 12:34   #11  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от lev Посмотреть сообщение
а можете весь lookUp-ный метод выложить?
Нет никакого lookUp-ного метода. Есть стандартная форма расширенного фильтра SysQueryForm. В этой форме при вводе значения критерия отрабатывает стандартный лукап SysLookup::lookupRange(). Только этот лукап не фильтруется по связанному полю. Sada, так?
Старый 20.12.2012, 11:02   #12  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
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, 15:53   #13  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
Цитата:
Сообщение от 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;

}
кверя не моя, за оформление не ругайте
очень похоже на то, правда могу ошибаться, что query() уже есть и в нем уже сидит датасорс Dimensions, а строчкой
X++:
ret = new Query();
qbds = ret.addDataSource(tablenum(Dimensions));
добавляется еще один query() и датасорс, условно назовем его Dimensions2 и соответственно на него ложится условие. Попробуйте вместо этой строчки написать (не знаю специфики, но как- то так)
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, 12:59   #14  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
именно так!!!
Старый 20.12.2012, 16:22   #15  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от Sada Посмотреть сообщение
именно так!!!
Другими словами, вы хотите, что бы выбранное значение критерия по одному из полей в форме расширенного фильтра участвовало в фильтрации значений критериев по другим полям в этой же форме?
__________________
Axapta v.3.0 sp5 kr2
Старый 20.12.2012, 17:48   #16  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
так у вас воспроизвелась ошибка или нет? Спасибо всем большое за участие, чуть попозже переварю Ваши советы
Старый 20.12.2012, 19:36   #17  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Sada Посмотреть сообщение
так у вас воспроизвелась ошибка или нет?
Да, воспроизвелась.

To Pustik, воспроизводил так. Создал пустой Query в AOT. Перетащил в его датасурс таблицу Dimensions. Открыл Query, запустилась форма редактирования запроса. Задал критерий для поля DimensionCode. При выборе значения критерия для поля Num открылся полный лукап, содержащий аналитики всех типов, а не только указанного в DimensionCode.
За это сообщение автора поблагодарили: Pustik (2), Sada (2).
Старый 21.12.2012, 08:37   #18  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
To Pustik, воспроизводил так. Создал пустой Query в AOT. Перетащил в его датасурс таблицу Dimensions. Открыл Query, запустилась форма редактирования запроса. Задал критерий для поля DimensionCode. При выборе значения критерия для поля Num открылся полный лукап, содержащий аналитики всех типов, а не только указанного в DimensionCode.
Сейчас с утра попробовал. У меня все работает . Чудеса. Правда пробую не на чистом стандарте, другой возможности пока нет.
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
Старый 20.12.2012, 18:08   #19  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
у меня все прекрасно фильтрует, если речь идет о форме SysQueryForm, которая вызывается по кнопочке Выбор. Или я что-то не понимаю.
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
Старый 28.12.2012, 12:14   #20  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
не получилось решит проблему? у меня кроме как вызывать форму DimensionLookup из Syslookup только для этого случая ничего в голову не приходит))
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как избежать "обрезания" lookup-списка? DesertBrowser DAX: Программирование 21 08.12.2011 15:46
axforum blogs: Вспомогательный документооборот. Поле "Код конфигурации вспомогательного бизнес-правила" lookup ни чего не показывает. Blog bot DAX Blogs 0 08.04.2011 10:11
Как убрать автопоиск по "*" для Lookup? Poleax DAX: База знаний и проекты 14 17.03.2009 13:38
"Подсунуть" произвольное значение в lookup nebraska DAX: Программирование 1 19.01.2009 05:36
Как подавить вызов LookUp формы при нажатии на "*" SergeyA DAX: Программирование 3 29.08.2003 13:10

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 03:41.