Как получить общий остаток по группе складов

Версия для печатиPDF-версия

Платформа:

Есть справочник группа складов, там один основной и несколько подчиненных. Например, если находятся в одном здании, то брать общий остаток.
Как в запросе взять общий остаток, если склад входит в группу.

ВЫБРАТЬ
	Товары.Номенклатура,
	Товары.КоличествоОстаток
ИЗ
	РегистрНакопления.ТоварыОрганизаций.Остатки(
        	&Дата,
        	Номенклатура = &Номенклатура
            		И Склад = &Склад) КАК Товары

Группы складов - это отдельный справочник или просто справочник Склады иерархический?

Отдельный сделала. Группировка складов по зданию. Например склад и магазин в одном, остаток надо общий. Как бы с группой понятно было бы как работать, но у нас нет возможности выбора группы. Надо как то проверить вхождение в справочник, и если входит то перебрать остальные с целью получения остатка. В инете погуглила пусто. 
Нам надо скрестить наш запрос 

ВЫБРАТЬ
|ТочкиЗаказаСрезПоследних.Организация КАК Организация,
|ТочкиЗаказаСрезПоследних.Склад КАК Склад,
|ТочкиЗаказаСрезПоследних.Номенклатура как Номенклатура,
|ТочкиЗаказаСрезПоследних.Номенклатура.Ходовой как Ходовой,
 
|ТочкиЗаказаСрезПоследних.контрагент КАК Поставщик,
|ВЫБОР
| КОГДА ТочкиЗаказаСрезПоследних.среднее = 0
| ТОГДА ВЫБОР
| КОГДА ТочкиЗаказаСрезПоследних.Мин >= ЕСТЬNULL(ТоварыОрганизацийОстатки.КоличествоОстаток, 0)
| ТОГДА ТочкиЗаказаСрезПоследних.Макс - ЕСТЬNULL(ТоварыОрганизацийОстатки.КоличествоОстаток, 0)
| ИНАЧЕ 0
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА ТочкиЗаказаСрезПоследних.среднее >= ЕСТЬNULL(ТоварыОрганизацийОстатки.КоличествоОстаток, 0)
| ТОГДА ТочкиЗаказаСрезПоследних.Макс - ЕСТЬNULL(ТоварыОрганизацийОстатки.КоличествоОстаток, 0)
| ИНАЧЕ 0
| КОНЕЦ
| КОНЕЦ КАК Заказать
|ИЗ
| РегистрСведений.ДК_среднееноменклатура.СрезПоследних КАК ТочкиЗаказаСрезПоследних
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций.Остатки КАК ТоварыОрганизацийОстатки
| ПО ТочкиЗаказаСрезПоследних.Организация = ТоварыОрганизацийОстатки.Организация
| И ТочкиЗаказаСрезПоследних.Склад = ТоварыОрганизацийОстатки.Склад
| И ТочкиЗаказаСрезПоследних.Номенклатура = ТоварыОрганизацийОстатки.Номенклатура
|ГДЕ
| ВЫБОР
| КОГДА ТочкиЗаказаСрезПоследних.среднее = 0
| ТОГДА ВЫБОР
| КОГДА ТочкиЗаказаСрезПоследних.Мин >= ЕСТЬNULL(ТоварыОрганизацийОстатки.КоличествоОстаток, 0)
| ТОГДА ТочкиЗаказаСрезПоследних.Макс - ЕСТЬNULL(ТоварыОрганизацийОстатки.КоличествоОстаток, 0)
| ИНАЧЕ 0
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА ТочкиЗаказаСрезПоследних.среднее >= ЕСТЬNULL(ТоварыОрганизацийОстатки.КоличествоОстаток, 0)
| ТОГДА ТочкиЗаказаСрезПоследних.Макс - ЕСТЬNULL(ТоварыОрганизацийОстатки.КоличествоОстаток, 0)
| ИНАЧЕ 0
| КОНЕЦ
| КОНЕЦ > 0
|СГРУППИРОВАТЬ ПО
| ТочкиЗаказаСрезПоследних.Организация,
| ТочкиЗаказаСрезПоследних.Склад,
| ТочкиЗаказаСрезПоследних.Номенклатура,
| ТочкиЗаказаСрезПоследних.Номенклатура.Ходовой,
 
 
| ТочкиЗаказаСрезПоследних.Контрагент,
| ТочкиЗаказаСрезПоследних.Мин,
| ТочкиЗаказаСрезПоследних.Макс,
| ТочкиЗаказаСрезПоследних.Среднее,
| ТоварыОрганизацийОстатки.Организация,
| ТоварыОрганизацийОстатки.Номенклатура,
| ТоварыОрганизацийОстатки.Склад,
| ТоварыОрганизацийОстатки.КоличествоОстаток
 
|УПОРЯДОЧИТЬ ПО
| поставщик 
и 
Выбрать
|Спр.Склад как Склад
|из
|справочник.ДК_ГруппаСклад.Подчиненные как спр
|Где склад=&мСклад
и в запросе как то получить общий остаток по полученной группе. Не получиться наверное. Там ведь по нескольким остаток надо. Наверное придеться перебором с точкой заказа работать. А в запросе получать сведения из регистров по складу.

 

А точки заказа будут устанавливаться по-прежнему для каждого склада или для группы?

Для каждого. Сейчас переделаваю так сначала запрос на остаток по складам и мин, макс, сренее выгружаем в таблицу. Потом поиск склада в группе в переборе,Потом получить общий остаток и перезаписать значение остатка. Но как то получаеться некрасиво, в цикле запросы... А если сделать для группы, то есть возможность одним запросом решить дело? Так у них половина на группах будет, половина отдельно. Можно попробовать . Просто опять вопрос как остаток получить по нескольким значениям. Доступ к складам через Справочник.ГруппаСклад.Подчиненные.
Переделала точки заказа движение по регистру на группы.
Попробовала написать

|ИЗ
| РегистрСведений.ДК_среднееноменклатура.СрезПоследних КАК ТочкиЗаказаСрезПоследних
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций.Остатки КАК ТоварыОрганизацийОстатки
| ПО ТочкиЗаказаСрезПоследних.Организация = ТоварыОрганизацийОстатки.Организация
| И ТочкиЗаказаСрезПоследних.Склад.подчиненные.склад = ТоварыОрганизацийОстатки.Склад
| И ТочкиЗаказаСрезПоследних.Номенклатура = ТоварыОрганизацийОстатки.Номенклатура
количество не дает. 

Сделала прогоном через таблицу значений. Она в коде 2 раза перебираеться, не знаю оптимизировать нужно. Есть отбор по складам в списке. В эту сторону надо покопать еще.

Привязку общих остатков по группе складов к складам можно сделать таким запросом:

ВЫБРАТЬ
	ГруппыСкладовПодчиненные.Ссылка КАК Группа,
	ГруппыСкладовПодчиненные.Склад
ПОМЕСТИТЬ ВТ_ГруппыСкладов
ИЗ
	Справочник.ГруппыСкладов.Подчиненные КАК ГруппыСкладовПодчиненные
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ВТ_ГруппыСкладов.Группа,
	ТоварыОрганизацийОстатки.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
	СУММА(ЕСТЬNULL(ТоварыОрганизацийОстатки.КоличествоОстаток, 0)) КАК Остаток
ПОМЕСТИТЬ ВТ_ОстаткиНаГруппахСкладов
ИЗ
	ВТ_ГруппыСкладов КАК ВТ_ГруппыСкладов
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций.Остатки КАК ТоварыОрганизацийОстатки
		ПО ВТ_ГруппыСкладов.Склад = ТоварыОрганизацийОстатки.АналитикаУчетаНоменклатуры.Склад

СГРУППИРОВАТЬ ПО
	ВТ_ГруппыСкладов.Группа,
	ТоварыОрганизацийОстатки.АналитикаУчетаНоменклатуры.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ВТ_ГруппыСкладов.Склад,
	ВТ_ОстаткиНаГруппахСкладов.Номенклатура,
	ЕСТЬNULL(ВТ_ОстаткиНаГруппахСкладов.Остаток, 0) КАК Количество
ИЗ
	ВТ_ГруппыСкладов КАК ВТ_ГруппыСкладов
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОстаткиНаГруппахСкладов КАК ВТ_ОстаткиНаГруппахСкладов
		ПО ВТ_ГруппыСкладов.Группа = ВТ_ОстаткиНаГруппахСкладов.Группа

Спасибо! Подскажите такой вопрос

Выбрать
|мТЗ.Номенклатура как Номенклатура,
|мТЗ.Заказать как Количество,
|мТЗ.Поставщик  как Поставщик,
|мТЗ.Организация как Организация,
|мТЗ.Группа как Склад
|Поместить Таблица
|Из 
|&мТЗ как мТЗ;
|Выбрать
|Таблица.Номенклатура как Ном,
|Таблица.Количество как Колво
|Из 
|Таблица как Таблица
 
|где Таблица.Поставщик=&Контрагент и
|Таблица.Организация=&Организация и 
|Таблица.Склад=&Склад и
|Таблица.Номенклатура=&Номенклатура и Таблица.Количество=&Количество";
гЗапрос.УстановитьПараметр("Контрагент",Выборка.Контрагент);
гЗапрос.УстановитьПараметр("Организация",Выборка.Организация);
гЗапрос.УстановитьПараметр("Склад",мСклад);
гЗапрос.УстановитьПараметр("Номенклатура",мВыборка.Номенклатура);
гЗапрос.УстановитьПараметр("Количество",число(мВыборка.Количество));
гЗапрос.УстановитьПараметр("мТЗ",мТЗ);
гВыборка=гЗапрос.Выполнить();
Ругаеться на несовпадение типов в Таблица.Количество=&Количество;
 
 
мТЗ.Колонки.Добавить("Заказать", Новый ОписаниеТипов("Строка", Новый КвалификаторыЧисла(7, 3, ДопустимыйЗнак.Неотрицательный)));
ТипЗНЧ(мВыборка.Количество)=Число.

 

Конечно, типы не совпадают. У вас же в мТЗ тип колонки "Заказать" - Строка.

мТЗ.Колонки.Добавить("Заказать", Новый ОписаниеТипов("Строка", Новый КвалификаторыЧисла(7, 3, ДопустимыйЗнак.Неотрицательный)));