Серии учитывает? - нет
ПодборТоваровСервер.ОстаткиНоменклатуры - общий модуль
// Возвращает структуру, данные об остатках товара.
//
// Параметры:
// Номенклатура - СправочникСсылка.Номенклатура - номенклатура товара;
// Характеристика - СправочникСсылка.Характеристики - характеристика товара;
// Склады - Массив, Неопределено - массив складов.
//
// Возвращаемое значение:
// Структура:
// * ТекущиеОстатки - Число - текущее количество остатков номенклатуры;
// * ПланируемыеОстатки - Число - планируемое количество остатков номенклатуры;
//
Функция ОстаткиНоменклатуры(Номенклатура, Характеристика, Склады = Неопределено) Экспорт
СоставРазделовЗапроса = Новый Массив;
Запрос = Новый Запрос();
Если Склады = Неопределено Тогда
ЗапросПоСкладам = Новый Запрос(
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Склады.Ссылка КАК Склад
|ИЗ
| Справочник.Склады КАК Склады
|ГДЕ
| (Не Склады.ЭтоГруппа)");
МассивСкладов = ЗапросПоСкладам.Выполнить().Выгрузить().ВыгрузитьКолонку("Склад");
Запрос.УстановитьПараметр("Склады", МассивСкладов);
Иначе
Запрос.УстановитьПараметр("Склады", Склады);
КонецЕсли;
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.УстановитьПараметр("Характеристика", Характеристика);
ИспользованиеХарактеристик = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Номенклатура, "ИспользованиеХарактеристик");
НесколькоХарактеристик = ИспользованиеХарактеристик <> Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать;
Запрос.Текст = ОбеспечениеСервер.ТекстЗапросаДоступныхОстатковПоДатамДляПодбора(
ЗначениеЗаполнено(Характеристика), НесколькоХарактеристик, СоставРазделовЗапроса);
УстановитьПривилегированныйРежим(Истина);
Результат = Запрос.ВыполнитьПакет();
// Планируемые остатки
Выборка = Результат[СоставРазделовЗапроса.Найти("ПланируемыеОстатки")].Выбрать();
ПланируемыеОстатки = Новый Массив;
Пока Выборка.Следующий() Цикл
НоваяСтрока = Новый Структура("Склад, Период, Доступно");
ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
ПланируемыеОстатки.Добавить(НоваяСтрока);
КонецЦикла;
// Текущие остатки.
Выборка = Результат[СоставРазделовЗапроса.Найти("ДоступныеТовары")].Выбрать();
ТекущиеОстатки = Новый Массив;
Пока Выборка.Следующий() Цикл
НоваяСтрока = Новый Структура("Склад, ВНаличии, Свободно");
ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
ТекущиеОстатки.Добавить(НоваяСтрока);
КонецЦикла;
Возврат Новый Структура("ТекущиеОстатки, ПланируемыеОстатки", ТекущиеОстатки, ПланируемыеОстатки);
КонецФункции
Показать