Всем привет. Подскажите как пересчитать себестоимость каждой продажи при удалении накладной на поступление товара.
Было:
(покупка) +10кг по 10р каждый (на складе теперь 10 кг по 10 р каждый)
(покупка) +10кг по 15р каждый (на складе теперь 20 кг по 12,5р каждый)
(продажа) -5кг (себестоимость 62,5Р, на складе 15кг по 12,5р каждый)
(продажа) -3кг (себестоимость 37,5Р, на складе 12 кг по 12,5 каждый)
(покупка) +8кг по 20р каждый (на складе 20кг по 15,5 рублей каждый)
(продажа) -5кг (себестоимость 77,5Р, на складе 15 кг по 15,5 руб каждый)
Мы убираем поставку 10 кг по 10р. Как пересчитать все поставки и всю себестоимость всех последующих продаж. И какую для этого лучше иметь схему таблицы mysql
Зачем пересчитывать все поставки? Записывайте приходные и расходные транзакции (со стоимостью товара). Возврат товара - это вид расходной транзакции по себестоимости. Среднюю цену сохранять и записывать смысла нет, рассчитывайте ее в реальном времени исходя из того, какой товар у вас на складе остался и по цене последних транзакций. У вас после последней продажи осталось 15 кг товара (15 единиц). Если склад работает по FIFO, то значит первые единицы товара мы уже продали, значит оставшиеся единицы поступили в транзакциях +8кг по 20 р и +10кг по 15р. Берем 8 из последней транзакции и 7 из предпоследней транзакции и вычисляем среднюю себестоимость.
dinegnet: я так понял, что регистры это подсчёты себестоимости как бы заранее, чтобы не считать Ее каждый раз. У меня главная проблема это как отменить накладную, чтобы все пересчиталось
dailysse: при отмене накладной из регистров RA просто вычищаются записи, которые этой накладной соответствуют.
и устанавливается дата по котороую залезли задним числом: А те записи регистра RG, которые датированы позже накладной, можно просто помечать как недействительные путем установки одной единственной даты "все что лежит в RG и находится ранее этой даты - недействительно.
RG рассчитываются раз в месяц, к примеру. таким образом, все изменения в текущем месяце - касаются только RA.
dailysse:
самая жопа заключается в том, что если вы удалите запись из середины (не важно "плюс" или "минус").
тогда вам ОБЯЗАТЕЛЬНО нужно будет пересчитать все записи со знаком "минус" после удаленной.
и никак этого не избежать.
в 1С для этого есть специальная процедура пересчета называемая "восстановлением последовательности", но это чисто алгоритмическое и к структуре БД отношения не имеет.