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