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