Для решения задачи используем виртуальную таблицу оборотов регистра накопления — она позволяет получить агрегированные данные за период без ручного суммирования движений.
ВЫБРАТЬ
Контрагент,
СУММА(СуммаОборот) КАК СуммаПродаж
ИЗ
РегистрНакопления.Продажи.Обороты(
&НачалоПериода,
&КонецПериода,
,
)
СГРУППИРОВАТЬ ПО
Контрагент
Параметры передаются из кода на встроенном языке:
Запрос.УстановитьПараметр("НачалоПериода", ТекущаяДата() - 30 * 86400);
Запрос.УстановитьПараметр("КонецПериода", ТекущаяДата());
.Обороты() принимает параметры: начало периода, конец периода, периодичность и отбор — фильтрацию лучше делать внутри параметров таблицы, а не в ГДЕ, чтобы не снижать производительностьСуммаОборот, а не просто Сумма — это стандартное именование ресурса в виртуальной таблицеСГРУППИРОВАТЬ ПО Контрагент обязательно при использовании агрегатной функции СУММА()ВЫБРАТЬ и СГРУППИРОВАТЬ ПОТакой запрос эффективен и лаконичен: платформа сама рассчитывает обороты на уровне СУБД, не поднимая все записи движений в память.
Виртуальная таблица .Обороты() регистра накопления автоматически агрегирует данные на уровне СУБД, что делает её более эффективной, чем выборка всех движений с последующим суммированием в коде.
Новый — ещё не проверен сообществом
Вы