Учет ведется в разрезе товаров и сроков годности.
Себестоимость рассчитывается как средняя по товару, но сразу по всем срокам годности
Товары могут приходить с разными сроками годности. Списываться должны с сначала с меньшим сроком.
Как правильно списывать себестоимость? Делаю сейчас так:
СтоимостьКоличество = Выборка.КоличествоОстВсе;
СтоимостьСумма = Выборка.СуммаОстВсе;
ОсталосьСписать = Выборка.Количество;
ВыборкаДЗ = Выборка.Выбрать();
Пока ВыборкаДЗ.Следующий() и ОсталосьСписать > 0 Цикл
Списываем = Мин(ОсталосьСписать, ВыборкаДЗ.КоличествоОст);
ОсталосьСписать = ОсталосьСписать - Списываем;
ТекСебестоимость = Списываем / СтоимостьКоличество * СтоимостьСумма; // <---
СтоимостьКоличество = СтоимостьКоличество - Списываем;
СтоимостьСумма = СтоимостьСумма - ТекСебестоимость;
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Управленческий.ПрибылиУбытки;
Движение.СчетКт = ПланыСчетов.Управленческий.Товары;
Движение.Период = Дата;
Движение.Сумма = ТекСебестоимость;
Движение.КоличествоКт = Списываем;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = ВыборкаДЗ.Номенклатура;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = ВыборкаДЗ.Номенклатура;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.СрокГодности] = ВыборкаДЗ.СрокГодности;
КонецЦикла;
Это правильно?
Раньше делал просто так:
ТекСебестоимость = Списываем / Выборка.КоличествоОстВсе * Выборка.СуммаОстВсе;
Но в замечании Белоусов написал мне:
".Не решена "проблема копеек": на последнем шаге надо сравнить с остатками по всем срокам за минусом уже списанных на предыдущих шагах и закрыть соответственно надо оставшуюся сумму, а не остаток суммы по всем срокам сразу"