База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как в 1С запросе агрегировать суммы по группе и элементу справочника? › Ответ в теме: Как в 1С запросе агрегировать суммы по группе и элементу справочника?
Чтобы в 1С запросе вывести сумму по группе, саму группу, сумму и элемент, нужно использовать группировку по группе и элементу, а также агрегатную функцию СУММА. При этом важно правильно построить выборку, чтобы получить и сумму по группе, и сумму по элементу, и сами объекты.
Пример запроса для иерархического справочника (например, Справочник.Номенклатура), где есть группы и элементы, и нужно вывести:
— Группу (ссылка и наименование)
— Элемент (ссылка и наименование)
— Сумму по элементу
— Сумму по группе (агрегированную по всем элементам группы)
Схема запроса:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
ВЫБРАТЬ | Группа.Ссылка КАК ГруппаСсылка, | Группа.Наименование КАК ГруппаНаименование, | Элемент.Ссылка КАК ЭлементСсылка, | Элемент.Наименование КАК ЭлементНаименование, | СУММА(Документ.Товары.Количество) КАК СуммаПоЭлементу, | ГрупповаяСумма.СуммаПоГруппе |ИЗ | Справочник.Номенклатура КАК Элемент | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Группа | ПО Элемент.Родитель = Группа.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ | ( | ВЫБРАТЬ | | Элемент2.Родитель КАК ГруппаСсылка, | | СУММА(Документ.Товары2.Количество) КАК СуммаПоГруппе | |ИЗ | | Справочник.Номенклатура КАК Элемент2 | | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.Товары КАК Документ.Товары2 | | ПО Элемент2.Ссылка = Документ.Товары2.Номенклатура | |ГРУППИРОВАТЬ ПО | | Элемент2.Родитель | ) КАК ГрупповаяСумма | ПО Группа.Ссылка = ГрупповаяСумма.ГруппаСсылка | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.Товары КАК Документ.Товары | ПО Элемент.Ссылка = Документ.Товары.Номенклатура |ГДЕ | Группа.Ссылка = &Группа |ГРУППИРОВАТЬ ПО | Группа.Ссылка, | Группа.Наименование, | Элемент.Ссылка, | Элемент.Наименование, | ГрупповаяСумма.СуммаПоГруппе |
Объяснение:
— В выборке есть и группа, и элемент, чтобы вывести их вместе.
— Сумма по элементу считается через СУММА(Документ.Товары.Количество).
— Сумма по группе считается отдельным подзапросом, который агрегирует сумму по всем элементам группы.
— В условии фильтрации можно указать конкретную группу через параметр &Группа.
— Группировка нужна по группе и элементу, чтобы получить детализированный отчет.
Если у вас нет связанного документа с количеством, замените поле и таблицу на ваши данные, где хранится сумма.
Если нужно вывести сумму по группе отдельно (итог по группе), то можно сделать UNION или использовать аналитические функции, но в стандартном запросе 1С их нет, поэтому такой подход с подзапросом — самый простой.
Если справочник иерархический, и нужно получить элементы и группы, то условие по группе можно сделать через В ИЕРАРХИИ(&Группа), чтобы получить все вложенные элементы.
Пример с В ИЕРАРХИИ:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
ВЫБРАТЬ | Элемент.Родитель КАК ГруппаСсылка, | Группа.Наименование КАК ГруппаНаименование, | Элемент.Ссылка КАК ЭлементСсылка, | Элемент.Наименование КАК ЭлементНаименование, | СУММА(Документ.Товары.Количество) КАК СуммаПоЭлементу |ИЗ | Справочник.Номенклатура КАК Элемент | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Группа | ПО Элемент.Родитель = Группа.Ссылка | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.Товары КАК Документ.Товары | ПО Элемент.Ссылка = Документ.Товары.Номенклатура |ГДЕ | Элемент.Ссылка В ИЕРАРХИИ(&Группа) |ГРУППИРОВАТЬ ПО | Элемент.Родитель, | Группа.Наименование, | Элемент.Ссылка, | Элемент.Наименование |
Сумму по группе можно получить отдельным запросом или в коде, суммируя суммы по элементам.
Если нужна именно сумма по группе в одной строке с элементом, то придется использовать подзапрос, как в первом примере.
—
Если нужна помощь с конкретным вашим запросом — приложите его, помогу адаптировать.