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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.08.2010, 17:22   #1  
JustNick is offline
JustNick
Участник
 
8 / 10 (1) +
Регистрация: 14.07.2010
Адрес: Москва
Сортировка и вывод полей в lookUp-е
Доброго времени суток. Возникла проблема, никак не поборю )))
Нужно создать лукап, в который выводятся данные из таблицы Месяцы (inf_Months) по условию для одного поля. Условие не меняется все время работы с лукапом.
Таблица хранит месяца работы (ежемесячные периоды), открытые или закрытые.
Структура таблицы следующая:
1. PeriodDate - тип Date, заполняется как первое число каждого месяца в виде 01.08.2010
2. MonthID - текстовое значение периода в виде "2010 Август"
3. PeriodStatus - признак Открыт/Закрыт (тип Enum)

так вот нужно в лукапе вывести ТОЛЬКО MonthID, но отсортированное по значению PeriodDate. Текст лукапа должен содержать также MonthID.
Трудность состоит в сортировке... При первом открытии списка все хорошо, после выбора значения и повторном открытии с сортировкой какая-то беда. Ни по индексу не хочет сортировать, ни по полю. Сортирует верно только если поле сортировки (PeriodDate) добавляется с признаком _returnItem = True, но выводить в текст нужно другое поле.

Заранее спасибо за помыщь
Код:
    Query                   q = new query();
    QueryBuildDataSource    qbds = q.addDataSource(tablenum(inf_Months));
    SysTableLookup          stl = SysTableLookup::newParameters(tablenum(inf_Months), this);
    inf_Months              tblM;
    FormRun                 fr;

    ;
    qbds.addRange(fieldnum(inf_Months, PeriodStatus)).value(SysQuery::value(inf_PeriodStatus::Open));
    stl.parmQuery(q).dataSourceNo(1).addSortIndex(indexnum(inf_Months, PK_inf_Months));
    stl.addLookupfield(fieldnum(inf_Months, PeriodDate));
    stl.addLookupfield(fieldnum(inf_Months, MonthID));
    fr = stl.formRun();
    this.performFormLookup(fr);
Старый 20.08.2010, 01:29   #2  
Corkscrew is offline
Corkscrew
Участник
Аватар для Corkscrew
 
9 / 11 (1) +
Регистрация: 13.11.2008
перед строкой
qbds.addRange(fieldnum(inf_Months, PeriodStatus)).value(SysQuery::value(inf_PeriodStatus::Open));

попробуйте вставить
qbds.addSortField(FieldNum(inf_Months,PeriodDate));
Старый 20.08.2010, 08:37   #3  
ansoft is offline
ansoft
Участник
Аватар для ansoft
 
123 / 37 (2) +++
Регистрация: 20.10.2005
Можно нескромный наводящий вопрос?
Строка:
stl.parmQuery(q).dataSourceNo(1).addSortIndex(indexnum(inf_Months, PK_inf_Months));
...подразумевает индекс по какому полю?
...может эта строка лишняя?
Старый 20.08.2010, 10:13   #4  
Corkscrew is offline
Corkscrew
Участник
Аватар для Corkscrew
 
9 / 11 (1) +
Регистрация: 13.11.2008
Цитата:
Сообщение от Corkscrew Посмотреть сообщение
перед строкой
qbds.addRange(fieldnum(inf_Months, PeriodStatus)).value(SysQuery::value(inf_PeriodStatus::Open));

попробуйте вставить
qbds.addSortField(FieldNum(inf_Months,PeriodDate));
забыл еще строку

qbds.orderMode(OrderMode::OrderBy);

и учитывая вопрос от ansoft получается

X++:
    Query                   q = new query();
    QueryBuildDataSource    qbds = q.addDataSource(tablenum(inf_Months));
    SysTableLookup          stl = SysTableLookup::newParameters(tablenum(inf_Months), this);
    //inf_Months              tblM;    // зачем объявлять и не использовать?
    FormRun                 fr;

    ;
    qbds.orderMode(OrderMode::OrderBy); 
    qbds.addSortField(FieldNum(inf_Months,PeriodDate));  
    qbds.addRange(fieldnum(inf_Months, PeriodStatus)).value(SysQuery::value(inf_PeriodStatus::Open));
    
     //stl.parmQuery(q).dataSourceNo(1).addSortIndex(indexnum(inf_Months, PK_inf_Months));   // ...может эта строка лишняя?
    
    //stl.addLookupfield(fieldnum(inf_Months, PeriodDate));  // так вот нужно в лукапе вывести ТОЛЬКО MonthID
    stl.addLookupfield(fieldnum(inf_Months, MonthID));
    fr = stl.formRun();
    this.performFormLookup(fr);
Старый 20.08.2010, 11:56   #5  
JustNick is offline
JustNick
Участник
 
8 / 10 (1) +
Регистрация: 14.07.2010
Адрес: Москва
Цитата:
Сообщение от ansoft Посмотреть сообщение
Можно нескромный наводящий вопрос?
Строка:
stl.parmQuery(q).dataSourceNo(1).addSortIndex(indexnum(inf_Months, PK_inf_Months));
...подразумевает индекс по какому полю?
...может эта строка лишняя?
Можно конешно ))) Индекс по полю PeriodDate

Цитата:
Сообщение от Corkscrew Посмотреть сообщение
перед строкой
qbds.addRange(fieldnum(inf_Months, PeriodStatus)).value(SysQuery::value(inf_PeriodStatus::Open));
...
забыл еще строку
qbds.orderMode(OrderMode::OrderBy);
Не получается сортировка все равно. Работает только при первом лукапе, после выбора значения пересортировывается так, что выбранное значение уходит в конец списка года. Выглядит это так:
первый выбор
2010 Январь
2010 Февраль
...
2010 Ноябрь
2010 Декабрь
2011 Январь
2011 Февраль
...
Выбрали "2010 Январь", следующий лукап
2010 Декабрь
...
2010 Январь
2011 Январь
2011 Февраль

В общем бред а как его лечить - не знамо
Старый 20.08.2010, 12:37   #6  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
Все работает как должно работать
Чтобы быстро спозиционироваться на выбранную строку в лукапе ядро разбивает запрос на два - один возвращает значения меньше выбранного, второй - больше или равно выбранного. Ядро перед выводом склеивает результаты, и выделяет первую строку результатов второго запроса. То есть сортировка должна быть ровно по тому полю по которому лукап. Хотите что то свое - рисуйте свою LookupForm и там делайте что хотите
За это сообщение автора поблагодарили: AlGol (2), S.Kuskov (3).
Старый 20.08.2010, 14:27   #7  
JustNick is offline
JustNick
Участник
 
8 / 10 (1) +
Регистрация: 14.07.2010
Адрес: Москва
Цитата:
Сообщение от db Посмотреть сообщение
Все работает как должно работать
Чтобы быстро спозиционироваться на выбранную строку в лукапе ядро разбивает запрос на два - один возвращает значения меньше выбранного, второй - больше или равно выбранного. Ядро перед выводом склеивает результаты, и выделяет первую строку результатов второго запроса. То есть сортировка должна быть ровно по тому полю по которому лукап. Хотите что то свое - рисуйте свою LookupForm и там делайте что хотите
в том-то и вопрос - это от незнания или так система устроена. Если кроме собственной лукап-формы это никак не борется, то вопрос закрыт ))
Старый 20.08.2010, 17:13   #8  
Corkscrew is offline
Corkscrew
Участник
Аватар для Corkscrew
 
9 / 11 (1) +
Регистрация: 13.11.2008
ну...

аксата 3.10 sp 3 kr 3

вот мой пример использования сортировки в лукапе
здесь правда через класс TableLookup_RU

X++:
client static void lookupBranches(Object _lookupCtrl)
{
    TableLookup_RU          sysTableLookup = new TableLookup_RU();
    Query                   query = new Query();
    QueryBuildDataSource    qbds = query.addDataSource(TableNum(LGBranches_PLM));
    ;

    qbds.orderMode(OrderMode::OrderBy);
    qbds.addSortField(FieldNum(LGBranches_PLM,Name));

    sysTableLookup.parmTableId(tableNum(LGBranches_PLM));
    sysTableLookup.parmCallingControl(_lookupCtrl);

    sysTableLookup.addLookupfield(fieldNum(LGBranches_PLM, BranchId));
    //sysTableLookup.addLookupfield(fieldNum(LGBranches_PLM, Name));

    sysTableLookup.parmQuery(query);

    sysTableLookup.performFormLookup();
}
у меня прекрасно сортируется
За это сообщение автора поблагодарили: JustNick (1).
Старый 20.08.2010, 18:25   #9  
titov is offline
titov
Участник
 
73 / 87 (3) ++++
Регистрация: 23.12.2005
Адрес: Казань
Цитата:
Сообщение от Corkscrew Посмотреть сообщение
у меня прекрасно сортируется
но не позиционирует.

есть вариант, пусть чуть громоздкий, но это на любителя (либо форма либо так)

__lookup.xpo

как-то понадобилось скрыть код в лукапе, а отображать только наименование... вот для такой задачи также можно применить доработку SysTableLookup
За это сообщение автора поблагодарили: JustNick (1).
Теги
lookup, сортировка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
вывод на форме полей ktrn DAX: Программирование 1 22.05.2009 15:52
Вывод в форме "Авансовый отчет" (EmplAdvTable_RU) полей из EmplTable Zepp DAX: Программирование 5 20.06.2007 15:44
Как перекрыть lookup для поля входящего в группу полей ATimTim DAX: Программирование 2 05.10.2005 11:26
Сортировка и/или фильтры в lookup форме - howto. Maximin DAX: Программирование 5 07.06.2005 11:06
Выбор набора полей из lookup alexbn DAX: Программирование 10 15.03.2005 10:01

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

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

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