Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 17:31

метод фифо

Автор kah, 17 фев 2021, 20:30

0 Пользователей и 1 гость просматривают эту тему.

kah

Изучал метод ФИФО, в интернете нашёл конфигурацию с реализованным этим методом. Переделал код под свою конфигурацию, расход происходит, но почему-то данный метод не работает. Получается у меня есть две партии одинакового товара и при расходе товара, запрос почему-то вычитает количество расходуемого товара из всех партий, а не по порядку, можете подсказать, что сделал не так?

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

ВыборкаНоменклатура = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаНоменклатура.Следующий() Цикл
Если НЕ ВыборкаНоменклатура.Номенклатура.Малоценка и ВыборкаНоменклатура.КоличествоОстаток < ВыборкаНоменклатура.КоличествоВДокументе Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не хватает " + Строка(ВыборкаНоменклатура.КоличествоВДокументе - ВыборкаНоменклатура.КоличествоОстаток) + " единиц номенклатуры " + ВыборкаНоменклатура.Номенклатура + ". Проведение невозможно.";
Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;

Если Отказ Тогда
Продолжить;
КонецЕсли;

ОсталосьСписать = ВыборкаНоменклатура.КоличествоВДокументе;

ВыборкаДетЗаписи = ВыборкаНоменклатура.Выбрать();
Пока ВыборкаДетЗаписи.Следующий() И ОсталосьСписать <> 0 Цикл

КСписанию = Мин(ОсталосьСписать, ВыборкаДетЗаписи.КоличествоОстаток);
НовоеДвижение = Движения.ОстаткиНоменклатуры.ДобавитьРасход();
НовоеДвижение.Период = Дата;
НовоеДвижение.Регистратор = Ссылка;
НовоеДвижение.Количество = КСписанию;
НовоеДвижение.Номенклатура = ВыборкаДетЗаписи.Номенклатура;
НовоеДвижение.Партия = ВыборкаДетЗаписи.Партия;
КонецЦикла;

КонецЦикла;

КонецПроцедуры

bsn-chita

ОсталосьСписать вы ни как не уменьшаете.

kah

Цитата: bsn-chita от 18 фев 2021, 03:06
ОсталосьСписать вы ни как не уменьшаете.
Добавил строку:

ОсталосьСписать = ОсталосьСписать - КСписанию;

Заработало! Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск