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