|
![]() |
#1 |
Мрачный тип
|
Стандартный SysTableLookup крайне криво работает с переданным запросом - если есть хоть одно пересечение м-ду полями группировки в запросе и полями в лукапе, группировка сбрасывается.
Вся "радость" происходит в buildSelectionList() , можете сравнить свой queryBuildDataSource в своем lookup() и в buildSelectionList() в конце его исполнения - будете удивлены (group by исчезнет). Решение - контролировать добавление полей ТАМ на каждой итерации цикла на отсутствие их в queryBuildDataSource fields()
__________________
Мы летаем, кружимся, нагоняем ужасы ... |
|
![]() |
#2 |
Участник
|
Цитата:
Сообщение от TasmanianDevil
![]() Стандартный SysTableLookup крайне криво работает с переданным запросом - если есть хоть одно пересечение м-ду полями группировки в запросе и полями в лукапе, группировка сбрасывается.
Вся "радость" происходит в buildSelectionList() , можете сравнить свой queryBuildDataSource в своем lookup() и в buildSelectionList() в конце его исполнения - будете удивлены (group by исчезнет). Решение - контролировать добавление полей ТАМ на каждой итерации цикла на отсутствие их в queryBuildDataSource fields() Мне казалось бага где-то в ядре сидит. |
|
![]() |
#3 |
Мрачный тип
|
А почему нет ?
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 (10). |
Теги |
lookup, законченный пример |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|