Неверно работает списывание товара

1. Echosinus 13.05.24 13:34 Сейчас в теме
При списании от выбранной даты у меня списываются товары по сроку годности
А нужно чтобы сначала списывалось по выбранной дате а потом остаток из остального по сроку годности
Как исправить ?

Код модуля "продажа товаров"
Процедура ОбработкаПроведения(Отказ, Режим) 	
	//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
	// Данный фрагмент построен конструктором.
	// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

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

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот