Небольшое замечание. Если вдруг в лукапе потом захочется вывести поля, к которым нужно применить агрегатную функцию (Sum, Count и т.д.), то можно столкнуться с неприятным моментом, когда пропадает группировка.
Связано это с тем, что в рамках оптимизации исполнения запроса выбираются не все поля, а только те, что определены в лукапе (для которых был вызван метод addLookupField).
Соответственно, выполняется следующий код (\Classes\SysTableLookup\buildSelectionList):
X++:
for (i = 1; i <= conlen(lookupItems); i++)
{
[fieldId, returnItem, method] = conpeek(lookupItems, i);
queryBuildDataSource.addSelectionField(fieldId);
}
И тут, как несложно заметить - метод addSelectionField вызывается без агрегатных функций. Соответственно, все наши Sum-ы пропадают и по этим полям начинает работать группировка (т.е. фактически, она слетает).
Лечится это простым условием:
X++:
if (queryBuildDataSource.orderMode() == OrderMode::OrderBy) // Ограничение числа полей актуально только для выборки без группировок
{
for (i = 1; i <= conlen(lookupItems); i++)
{
[fieldId, returnItem, method] = conpeek(lookupItems, i);
queryBuildDataSource.addSelectionField(fieldId);
}
}
после чего суммирование начинает работать нормально.
Справедливо для всех версий (3.0 - 2009 RU5)