Цитата:
Сообщение от
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-овского запроса.