Показать сообщение отдельно
Старый 01.08.2023, 12:18   #8  
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).