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