База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как вывести в запросе 1С сумму по группе и элементу одновременно?
- В этой теме 1 ответ, 2 участника, последнее обновление 2 часа, 36 минут назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
27 февраля 2026 в 8:00 #35963
есть Запрос 1С в условии группа справочника и элемент справочника, вывести сумму по группе и саму группу, сумму и элемент
ВЫБРАТЬ
ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
ВЫБОР
КОГДА ТоварыНаСкладахОстатки.Склад.VEH_ТипСклада В (&МассивТипыСкладовКорп)
ТОГДА ЕСТЬNULL(ТоварыНаСкладахОстатки.ВНаличииОстаток, 0)
ИНАЧЕ 0
КОНЕЦ КАК ОстатокКорп,
0 КАК ОстатокВПути,
ТоварыНаСкладахОстатки.Склад КАК Склад
ПОМЕСТИТЬ тОстаткиНаСкладах
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки({(&Дата)}, ) КАК ТоварыНаСкладахОстатки
ГДЕТоварыНаСкладахОстатки.Склад В Иерархии (&Склад1)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ЗапасыИПотребностиОстатки.Номенклатура,
0,
ЕСТЬNULL(ЗапасыИПотребностиОстатки.ПоступитОстаток, 0),
ЗапасыИПотребностиОстатки.Склад
ИЗ
РегистрНакопления.ЗапасыИПотребности.Остатки({(&Дата)}, ТИПЗНАЧЕНИЯ(Заказ) = ТИП(Документ.ПеремещениеТоваров)) КАК ЗапасыИПотребностиОстатки
ГДЕ
ЗапасыИПотребностиОстатки.Склад В Иерархии (&Склад1);
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
тОстаткиНаСкладах.Номенклатура.Код КАК Код,
тОстаткиНаСкладах.Номенклатура КАК Номенклатура,
СУММА(тОстаткиНаСкладах.ОстатокКорп) + СУММА(тОстаткиНаСкладах.ОстатокВПути) КАК ОстатокКорп,
тОстаткиНаСкладах.Номенклатура.VEH_Категория КАК Категория,
тОстаткиНаСкладах.Номенклатура.VEH_Система КАК Система,
VEH_ОтборДляСнабжения.ЦенаССеб КАК ЦенаСеб,
тОстаткиНаСкладах.Склад КАК Склад
ИЗ
тОстаткиНаСкладах КАК тОстаткиНаСкладах
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.VEH_ОтборДляСнабжения КАК VEH_ОтборДляСнабжения
ПО тОстаткиНаСкладах.Номенклатура = VEH_ОтборДляСнабжения.НоменклатураСГРУППИРОВАТЬ ПО
тОстаткиНаСкладах.Номенклатура.Код,
тОстаткиНаСкладах.Номенклатура,
тОстаткиНаСкладах.Номенклатура.VEH_Категория,
тОстаткиНаСкладах.Номенклатура.VEH_Система,
VEH_ОтборДляСнабжения.ЦенаССеб,
тОстаткиНаСкладах.Склад -
27 февраля 2026 в 8:00 #35964
Чтобы вывести одновременно сумму по группе, саму группу, сумму и элемент справочника в 1С запросе, нужно использовать конструкцию с объединением данных по элементам и группам, применяя условие В ИЕРАРХИИ для групп и группировку по элементам и группам.
В вашем случае, у вас есть запрос с выборкой остатков по складам и номенклатуре, где в условии участвует группа складов (&Склад1) с использованием В ИЕРАРХИИ.
Для вывода суммы по группе и по элементу одновременно, нужно:
1. В выборке добавить группировку по группе (например, по полю Родитель или по ссылке группы).
2. Сделать отдельный запрос, который суммирует остатки по группе (включая все подчиненные элементы).
3. Объединить результаты по элементам и по группе.Примерный подход:
1С (Код)1234567891011121314151617181920212223242526272829// 1. Получаем остатки по элементам с группировкой по элементу и складуВЫБРАТЬ| тОстаткиНаСкладах.Номенклатура КАК Номенклатура,| тОстаткиНаСкладах.Склад КАК Склад,| СУММА(тОстаткиНаСкладах.ОстатокКорп + тОстаткиНаСкладах.ОстатокВПути) КАК Остаток|ИЗ| тОстаткиНаСкладах КАК тОстаткиНаСкладах|СГРУППИРОВАТЬ ПО| тОстаткиНаСкладах.Номенклатура,| тОстаткиНаСкладах.Склад// 2. Получаем сумму по группе (родителю) номенклатуры, используя В ИЕРАРХИИВЫБРАТЬ| НоменклатураРодитель КАК Группа,| тОстаткиНаСкладах.Склад КАК Склад,| СУММА(тОстаткиНаСкладах.ОстатокКорп + тОстаткиНаСкладах.ОстатокВПути) КАК ОстатокПоГруппе|ИЗ| тОстаткиНаСкладах КАК тОстаткиНаСкладах| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура| ПО тОстаткиНаСкладах.Номенклатура = Номенклатура.Ссылка| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Группы| ПО Номенклатура.Родитель = Группы.Ссылка|ГДЕ| Номенклатура.Ссылка В ИЕРАРХИИ(&ГруппаНоменклатуры)|СГРУППИРОВАТЬ ПО| НоменклатураРодитель,| тОстаткиНаСкладах.Склад// 3. Объединяем результаты по элементам и по группам (например, через объединение или подзапросы)Если нужно вывести в одной выборке и сумму по группе, и сумму по элементу, и саму группу, то можно сделать так:
— В выборке добавить поле группы (Родитель) для каждого элемента.
— Использовать оконные функции (если поддерживаются) или подзапросы для суммы по группе.Пример с подзапросом:
1С (Код)12345678910111213141516171819202122232425ВЫБРАТЬ| тОстаткиНаСкладах.Номенклатура КАК Номенклатура,| Номенклатура.Родитель КАК Группа,| тОстаткиНаСкладах.Склад КАК Склад,| СУММА(тОстаткиНаСкладах.ОстатокКорп + тОстаткиНаСкладах.ОстатокВПути) КАК ОстатокЭлемента,| (ВЫБРАТЬ| СУММА(т2.ОстатокКорп + т2.ОстатокВПути)| ИЗ| тОстаткиНаСкладах КАК т2| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Н2| ПО т2.Номенклатура = Н2.Ссылка| ГДЕ| Н2.Родитель = Номенклатура.Родитель| И т2.Склад = тОстаткиНаСкладах.Склад| ) КАК ОстатокПоГруппе|ИЗ| тОстаткиНаСкладах КАК тОстаткиНаСкладах| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура| ПО тОстаткиНаСкладах.Номенклатура = Номенклатура.Ссылка|ГДЕ| тОстаткиНаСкладах.Склад В ИЕРАРХИИ(&Склад1)|СГРУППИРОВАТЬ ПО| тОстаткиНаСкладах.Номенклатура,| Номенклатура.Родитель,| тОстаткиНаСкладах.СкладВ этом запросе:
— Для каждого элемента выводится его остаток (ОстатокЭлемента).
— Через подзапрос считается сумма по группе (ОстатокПоГруппе).
— Выводится ссылка на группу (Номенклатура.Родитель).Если нужно вывести саму группу (например, наименование), то можно добавить в выборку:
1С (Код)1| ГруппаНаименование.Наименование КАК НаименованиеГруппыс соответствующим соединением:
1С (Код)12| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК ГруппаНаименование| ПО Номенклатура.Родитель = ГруппаНаименование.СсылкаТаким образом, вы получите в одном запросе и сумму по элементу, и сумму по группе, и ссылки на группу и элемент.
—
Если в вашем случае группа — это параметр &ГруппаНоменклатуры, то условие по группе можно использовать через В ИЕРАРХИИ(&ГруппаНоменклатуры), чтобы получить все элементы и подгруппы.
—
Рекомендую использовать именно такой подход с подзапросом для суммы по группе, если в вашей версии 1С нет оконных функций.
—
Рекомендации по оптимизации:
— Если данных много, лучше предварительно выгрузить остатки в временную таблицу.
— Используйте индексы по ссылкам и родителям.
— Проверяйте план запроса.—
https://helpf.pro/faq8/view/918.html — про группировку и суммирование в табличных частях и запросах
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.