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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.07.2023, 13:52   #1  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
887 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Стандартный SysTableLookup крайне криво работает с переданным запросом - если есть хоть одно пересечение м-ду полями группировки в запросе и полями в лукапе, группировка сбрасывается.
Вся "радость" происходит в buildSelectionList() , можете сравнить свой queryBuildDataSource в своем lookup() и в buildSelectionList() в конце его исполнения - будете удивлены (group by исчезнет).
Решение - контролировать добавление полей ТАМ на каждой итерации цикла на отсутствие их в queryBuildDataSource fields()
__________________
Мы летаем, кружимся, нагоняем ужасы ...
Старый 31.07.2023, 14:36   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,971 / 3267 (116) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
Стандартный SysTableLookup крайне криво работает с переданным запросом - если есть хоть одно пересечение м-ду полями группировки в запросе и полями в лукапе, группировка сбрасывается.
Вся "радость" происходит в buildSelectionList() , можете сравнить свой queryBuildDataSource в своем lookup() и в buildSelectionList() в конце его исполнения - будете удивлены (group by исчезнет).
Решение - контролировать добавление полей ТАМ на каждой итерации цикла на отсутствие их в queryBuildDataSource fields()
На x++ фикс можно сделать ?

Мне казалось бага где-то в ядре сидит.
Старый 01.08.2023, 12:18   #3  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
887 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Цитата:
Сообщение от Logger Посмотреть сообщение
На x++ фикс можно сделать ?.
А почему нет ?
SysTableLookup - открытый класс.

X++:
protected void buildSelectionList(Query _query)
{
    QueryBuildDataSource            queryBuildDataSource = _query.dataSourceTable(tableId);
    QueryBuildFieldList             selectedFields;
    boolean                         returnItem;
    str                             method;
    int                             fieldId;
    int                             i;

    //+ ТумОВ 02.12.2022
    boolean  fieldSelected(FieldId _id)
    {
        int     j;
        FieldId selectedFieldId;

        for( j = 1 ; j <= selectedFields.fieldCount() ; j++ )
        {
            selectedFieldId = selectedFields.field(j);

            if(selectedFieldId == _id) return true;
        }

        return false;
    };
    //- ТумОВ 02.12.2022

    if (!queryBuildDataSource)
    {
        return;
    }

    selectedFields = queryBuildDataSource.fields();

    for (i = 1; i <= conlen(lookupItems); i++)
    {
        [fieldId, returnItem, method] = conpeek(lookupItems, i);
        //
        // FieldId could be 0 if current element represents a display method used
        // to return values for a lookup column.
        // If fieldId is 0 then there is no sense to add it to the selection list of the query.
        //
        //+ ТумОВ 02.12.2022
        //todo А если, <censored>, поле уже выбрано как агрегат в ранее переданном запросе - на<censored> агрегацию ?
        //if (fieldId)
        if (fieldId && !fieldSelected(fieldId))
        //- ТумОВ 02.12.2022
        {
            queryBuildDataSource.addSelectionField(fieldId);
        }
    }
}
Цитата:
Сообщение от Logger Посмотреть сообщение
Мне казалось бага где-то в ядре сидит.
Внутри закрытого QueryBuildDataSource.addSelectionField(<код поля>, [<тип агрегации>)] - повторная передача поля в список выбираемых с типом агрегации по умолчанию сносит режим группировки у источника данных. Обходится вышеуказанным контролем на наличие добавляемого поля в списке полей выбора источника данных lookup-овского запроса.
__________________
Мы летаем, кружимся, нагоняем ужасы ...
За это сообщение автора поблагодарили: Logger (10).
Теги
lookup, законченный пример

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Передача значения из ComboBox одной формы в lookup форму P^ilk^A DAX: Программирование 4 03.03.2015 18:25
получение значения из Lookup Global::conView() DesertBrowser DAX: Программирование 3 23.11.2011 15:56
LookUp. На основе предыдущего значения. Михаил Петрович DAX: Программирование 4 24.10.2007 12:26
Выбор значения из lookup + ввод с клавиатуры Lucky13 DAX: Программирование 29 25.05.2007 10:54
Как получить значения поля из lookup метода в WEB Dronas DAX: Программирование 5 13.01.2005 10:17
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

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